3.4. COM interface

TortoiseGit

3.4. COM interface

If you need to access Subversion revision information from other programs, you can use the COM interface of GitWCRev. The object to create is GitWCRev.object, and the following methods are supported:

Table 3.4. COM/automation methods supported

Method Description
.GetWCInfo This method traverses the working tree gathering the status and revision information. Naturally you must call this before you can access the information using the remaining methods. The first parameter is the path. The second parameter needs to be true if you want to exclude submodules. Equivalent to the -s command line switch.
.Revision The highest commit revision in the working tree. Equivalent to $WCREV$.
.Date The commit date/time of the highest commit revision. Equivalent to $WCDATE$.
.Author The author of the highest commit revision, that is, the last person to commit changes to the working tree.
.HasModifications True if there are local modifications
.HasUnversioned True if there are unversioned items
.IsGitItem True if the item is versioned.
.IsUnborn True if the branch is not yet born.
.HasSubmodule True if working tree contains submodules.
.HasSubmoduleModifications True if a submodule has uncommitted changes.
.HasSubmoduleUnversioned True if a submodule has unversioned items.
.IsSubmoduleUp2Date True if all submodules are checked out at the in the parent repository specified version.

The following example shows how the interface might be used.

// testCOM.js - javascript file
// test script for the GitWCRev COM/Automation-object

filesystem = new ActiveXObject("Scripting.FileSystemObject");

GitWCRevObject1 = new ActiveXObject("GitWCRev.object");
GitWCRevObject2 = new ActiveXObject("GitWCRev.object");
GitWCRevObject3 = new ActiveXObject("GitWCRev.object");
GitWCRevObject4 = new ActiveXObject("GitWCRev.object");
GitWCRevObject5 = new ActiveXObject("GitWCRev.object");

GitWCRevObject2_1 = new ActiveXObject("GitWCRev.object");
GitWCRevObject2_2 = new ActiveXObject("GitWCRev.object");
GitWCRevObject2_3 = new ActiveXObject("GitWCRev.object");
GitWCRevObject2_4 = new ActiveXObject("GitWCRev.object");
GitWCRevObject2_5 = new ActiveXObject("GitWCRev.object");

GitWCRevObject1.GetWCInfo(filesystem.GetAbsolutePathName("."), 0);
GitWCRevObject2.GetWCInfo(filesystem.GetAbsolutePathName(".."), 0);
GitWCRevObject3.GetWCInfo(filesystem.GetAbsolutePathName("GitWCRev.cpp"), 0);
GitWCRevObject4.GetWCInfo(filesystem.GetAbsolutePathName("..\\.."), 0);

GitWCRevObject2_1.GetWCInfo(filesystem.GetAbsolutePathName("."), 1);
GitWCRevObject2_2.GetWCInfo(filesystem.GetAbsolutePathName(".."), 1);
GitWCRevObject2_3.GetWCInfo(filesystem.GetAbsolutePathName("GitWCRev.cpp"), 1);
GitWCRevObject2_4.GetWCInfo(filesystem.GetAbsolutePathName("..\\.."), 1);

wcInfoString1 = "Revision = " + GitWCRevObject1.Revision +
                "\nDate = " + GitWCRevObject1.Date +
                "\nAuthor = " + GitWCRevObject1.Author +
                "\nHasMods = " + GitWCRevObject1.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject1.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject1.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject1.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject1.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject1.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject1.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject1.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject1.IsSubmoduleUp2Date;
wcInfoString2 = "Revision = " + GitWCRevObject2.Revision +
                "\nDate = " + GitWCRevObject2.Date +
                "\nAuthor = " + GitWCRevObject2.Author +
                "\nHasMods = " + GitWCRevObject2.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject2.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject2.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject2.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject2.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject2.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject2.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject2.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject2.IsSubmoduleUp2Date;
wcInfoString3 = "Revision = " + GitWCRevObject3.Revision +
                "\nDate = " + GitWCRevObject3.Date +
                "\nAuthor = " + GitWCRevObject3.Author +
                "\nHasMods = " + GitWCRevObject3.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject3.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject3.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject3.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject3.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject3.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject3.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject3.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject3.IsSubmoduleUp2Date;
wcInfoString4 = "Revision = " + GitWCRevObject4.Revision +
                "\nDate = " + GitWCRevObject4.Date +
                "\nAuthor = " + GitWCRevObject4.Author +
                "\nHasMods = " + GitWCRevObject4.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject4.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject4.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject4.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject4.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject4.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject4.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject4.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject4.IsSubmoduleUp2Date;

WScript.Echo(wcInfoString1 + "\n");
WScript.Echo(wcInfoString2 + "\n");
WScript.Echo(wcInfoString3 + "\n");
WScript.Echo(wcInfoString4 + "\n");

wcInfoString1 = "Revision = " + GitWCRevObject2_1.Revision +
                "\nDate = " + GitWCRevObject2_1.Date +
                "\nAuthor = " + GitWCRevObject2_1.Author +
                "\nHasMods = " + GitWCRevObject2_1.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject2_1.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject2_1.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject2_1.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject2_1.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject2_1.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject2_1.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject2_1.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject2_1.IsSubmoduleUp2Date;
wcInfoString2 = "Revision = " + GitWCRevObject2_2.Revision +
                "\nDate = " + GitWCRevObject2_2.Date +
                "\nAuthor = " + GitWCRevObject2_2.Author +
                "\nHasMods = " + GitWCRevObject2_2.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject2_2.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject2_2.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject2_2.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject2_2.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject2_2.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject2_2.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject2_2.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject2_2.IsSubmoduleUp2Date;
wcInfoString3 = "Revision = " + GitWCRevObject2_3.Revision +
                "\nDate = " + GitWCRevObject2_3.Date +
                "\nAuthor = " + GitWCRevObject2_3.Author +
                "\nHasMods = " + GitWCRevObject2_3.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject2_3.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject2_3.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject2_3.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject2_3.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject2_3.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject2_3.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject2_3.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject2_3.IsSubmoduleUp2Date;
wcInfoString4 = "Revision = " + GitWCRevObject2_4.Revision +
                "\nDate = " + GitWCRevObject2_4.Date +
                "\nAuthor = " + GitWCRevObject2_4.Author +
                "\nHasMods = " + GitWCRevObject2_4.HasModifications +
                "\nHasUnversioned = " + GitWCRevObject2_4.HasUnversioned +
                "\nIsTagged = " + GitWCRevObject2_4.IsWcTagged +
                "\nIsGitItem = " + GitWCRevObject2_4.IsGitItem +
                "\nIsUnborn = " + GitWCRevObject2_4.IsUnborn +
                "\nHasSubmodule = " + GitWCRevObject2_4.HasSubmodule +
                "\nHasSubmoduleModifications = " + GitWCRevObject2_4.HasSubmoduleModifications +
                "\nHasSubmoduleUnversioned = " + GitWCRevObject2_4.HasSubmoduleUnversioned +
                "\nIsSubmoduleUp2Date = " + GitWCRevObject2_4.IsSubmoduleUp2Date;

WScript.Echo(wcInfoString1 + "\n");
WScript.Echo(wcInfoString2 + "\n");
WScript.Echo(wcInfoString3 + "\n");
WScript.Echo(wcInfoString4 + "\n");

The following listing is an example on how to use the GitWCRev COM object from C#:

using LibGitWCRev;
GitWCRev sub = new GitWCRev();
sub.GetWCInfo("C:\\PathToMyFile\\MyFile.cc", false);
if (sub.IsGitItem == true)
{
    MessageBox.Show("versioned");
}
else
{
    MessageBox.Show("not versioned");
}