Skip to main content

%Studio.SourceControl.Change

Class %Studio.SourceControl.Change Extends %Persistent [ System = 4 ]

Class for storing changes to environment

Parameters

MANAGEDEXTENT

Parameter MANAGEDEXTENT As INTEGER [ Constraint = "0,1", Flags = ENUM ] = 0;

The MANAGEDEXTENT parameter can be set to 0 (zero) to cause the Extent Manager to ignore this class. If set to 1 then the Extent Manager will register globals used by the class and detect collisions. Unmanaged extents (MANAGEDEXTENT = 0) are not checked. Currently, only classes using default storage (%Storage.Persistent) can be managed. This is required since each Namespace will have it's own Change extent

SrcVer

Parameter SrcVer = "$Id: //iris/2024.3.0/databases/sys/cls/Studio/SourceControl/Change.xml#1 $";

This Parameter should be updated when synced from Perforce

Version

Parameter Version = 29;

Revision number of this class when compiled as part of the //custom_ccrs/_common/config/... branch. This version will not be updated (by design) when the class is integrated to other branches. This allows the user to tell what version of the Studio client tools are in use.

Properties

Action

Property Action As %String(VALUELIST = ",add,edit,predelete,delete,revert") [ Required ];

Action for this change

BackupName

Property BackupName As %String [ Calculated, SqlComputeCode = {S {*}=$S((({Tier2}))&&($D(^SYS("ChangeControlClass"))):$zobjclassmethod(^SYS("ChangeControlClass"),"BackupName",{InternalName}),1:$zobjclassmethod(##class(%Studio.SourceControl.Interface).SourceControlClassGet(),"BackupName",{InternalName})) }, SqlComputed ];

Returns the name of the backup file for this Item in the file system

ChangedBy

Property ChangedBy As %String;

User who made this change, and for uncommitted changes this is the person who has it "checked out"

Committed

Property Committed As %Boolean [ InitialExpression = 0, Required ];

Flag indicating whether or not this change has been committed to Perforce

ActivelyCommitted

Property ActivelyCommitted As %Boolean [ InitialExpression = 0 ];

Flag indicating whether or not this change was committed to Perforce via Source/Change control tools. If ActivelyCommitted = 0 for a committed change, then it might have been either reverted or committed directly by a Perforce client and the Perforce history should be checked to see whether or not it was committed

CommittedTime

Property CommittedTime As %TimeStamp [ InitialExpression = {$zdt("0,0",3)} ];

Time when this change was committed to Perforce (either via an ItemSet, the Studio CheckIn page or through a P4V)

this value should be set in the form $zdt($H,3) (i.e. "0000-00-00 00:00:00" format)

CommittedTimeDisplay

Property CommittedTimeDisplay As %String [ Calculated, SqlComputeCode = {S {*}=$S({Committed}:{CommittedTime},1:"uncommitted") }, SqlComputed ];

Display the CommittedTime field, showing "Uncommitted" for changes that have not yet been committed

CCR

Property CCR As %String;

When this change was first created, this CCR was associated with it for tracking purposes (optional field)

ExternalName

Property ExternalName As %String [ Calculated, SqlComputeCode = {S {*}=$S(({Tier2})&&($D(^SYS("ChangeControlClass"))):$zobjclassmethod(^SYS("ChangeControlClass"),"ExternalName",{InternalName}),1:$zobjclassmethod(##class(%Studio.SourceControl.Interface).SourceControlClassGet(),"ExtName",{InternalName})) }, SqlComputed ];

Returns the name of this Item in the file system

InternalName

Property InternalName As %String(MAXLEN = 200);

Name used within instance to refer to this changed item

ItemFile

Property ItemFile As %String(MAXLEN = 500) [ Required ];

Location where this item is stored on disk

Name

Property Name As %String(MAXLEN = 200);

Human readable Name referring to this changed item. This will default to the value if InternalName unless it is explicitly set

P4Issued

Property P4Issued As %TimeStamp;

Time of when the P4 command was issued to Perforce
NOTE - a change can have a non-null P4Issued and still have Committed=0 because a 'p4 edit' will check it out but it is not committed until 'p4 submit'

Source

Property Source As %String(VALUELIST = ",studio,terminal,trakcare,healthshare,tier2") [ InitialExpression = "studio" ];

Utility by which this change was made

Tier2

Property Tier2 As %Boolean [ Calculated, SqlComputeCode = {S {*}=$S((({Source}="trakcare")||({Source}="healthshare")||({Source}="tier2")):1,1:0)}, SqlComputed ];

Determine if current change is sourced from a tier 2 change control environment

UpdatedTime

Property UpdatedTime As %TimeStamp [ InitialExpression = {$zdt($H,3)} ];

Last time this change was saved locally

Methods

IsUncommitted

ClassMethod IsUncommitted(Filename, ByRef ID) As %Boolean

Returns Boolean value indicating whether or not an item is Uncommitted

OpenUncommitted

ClassMethod OpenUncommitted(Filename) As %Studio.SourceControl.Change

Returns uncommited change object

GetUncommitted

ClassMethod GetUncommitted(Filename, ByRef Action, ByRef InternalName, ByRef ChangedBy, ByRef Source, ByRef Updated, ByRef P4Issued, ByRef CCR, ByRef Name) As %Status

Retrieves the details from the Uncommitted queue of an Uncommitted item

SetUncommitted

ClassMethod SetUncommitted(Filename, Action, InternalName, ChangedBy, Source, P4Issued As %Boolean, CCR, Name, EnforceSourcesPath = 1) As %Status

Sets the details for a new Uncommitted item into the Uncommitted queue

UpdateUncommitted

ClassMethod UpdateUncommitted(Filename, Action, InternalName, ChangedBy, Source, Updated, P4Issued, CCR, Name) As %Status

Update the details for an Uncommitted item in the Uncommitted queue

RemoveUncommitted

ClassMethod RemoveUncommitted(FileList, Display = 1, Revert = 0, ActiveCommit = 1, CommitCCR) As %Status

Removes one or more Uncommitted items from the Uncommitted queue and changes the exported file to Reaonly (except for reverts of Adds, or new CSP files within the Perforce root)

Default assumed behavior is that the the change was not reverted, and that it was actively committed to Perforce

If the method calling does not know whether it was reverted or committed to Perforce, then it should pass Revert = 0 and ActiveCommit = 0, indicating that the change might have been reverted and the Perforce history should be checked for the definitive answer.

The Revert, ActiveCommit, and CommitCCR arguments only impact the behavior if ^SYS("SourceControl","ChangeConfig","KeepHistory")=1, which means Change objects should have their Committed flag set to 1 and be saved for historical reference, rather than just deleting the Change objects when RemoveUncommitted() is called.

Arguments are as follows:

  • FileList - the name of the file to revert, or an array subscripted by filenames (e.g. FileList("C:\Perforce\custom_ccrs\us\ISCX\TESTSYS\cls\User\Test.xml")="")
  • Display - boolean flag controlling whether to display the results to standard output (defaults to '1')
  • Revert - boolean flag controlling whether to revert a checkout which would delete the change from the change history table (defaults to '0')
  • ActiveCommit - used for historical tracking purposes for the %Studio_SourceControl.Change table
  • CommitCCR - used for historical tracking purposes for the %Studio_SourceControl.Change table

RemoveAllUncommitted

ClassMethod RemoveAllUncommitted(Display = 1, IncludeRevert = 1) As %Status

Removes all Uncommitted items from the Uncommitted queue

ListUncommitted

ClassMethod ListUncommitted(ByRef UncommittedList = "", IncludeRevert = 0, RefreshUncommitted = 1) As %Status

Lists the Uncommitted items from the Uncommitted queue

Only lists items with action of type 'revert' if the IncludeRevert flag is passed as true

DisplayUncommitted

ClassMethod DisplayUncommitted(ByRef UncommittedList, IncludeRevert = 0) As %Status

Displays a list of Uncommitted items from the Uncommitted queue to the output device

Only lists items with action of type 'revert' if the IncludeRevert flag is passed as true

RefreshUncommitted

ClassMethod RefreshUncommitted(Display = 1, IncludeRevert = 0) As %Status

Goes through Uncommitted queue and removes any items of action 'edit' or 'add' which are ReadOnly or non-existent on the filesystem

%OnAddToSaveSet

Method %OnAddToSaveSet(depth As %Integer = 3, insert As %Integer = 0, callcount As %Integer = 0) As %Status [ Private, ProcedureBlock = 1, ServerOnly = 1 ]

This callback method is invoked when the current object is added to the SaveSet, either because %Save() was invoked on this object or on an object that references this object. %OnAddToSaveSet can modify the current object. It can also add other objects to the current SaveSet by invoking %AddToSaveSet or remove objects by calling %RemoveFromSaveSet.

If this method returns an error status then %Save() will fail and the transaction will be rolled back.

OnToolsCompile

ClassMethod OnToolsCompile() [ CodeMode = objectgenerator, Internal ]

Handles all compile-time logic for this class [Previously private]

InstanceVersion

ClassMethod InstanceVersion() As %Numeric [ CodeMode = expression ]

Returns value the Major.Minor version for this instance, so it can be used in comparison code which makes sure certain features are used in appropriate versions

BuildNewIndexes

ClassMethod BuildNewIndexes() [ CodeMode = objectgenerator, Internal ]

Check indexes defined in this class build them if they have never been built. Any errors are thrown as an exception.