本文整理汇总了C#中GitCommands.GitModule.GetSubmodulesLocalPaths方法的典型用法代码示例。如果您正苦于以下问题:C# GitModule.GetSubmodulesLocalPaths方法的具体用法?C# GitModule.GetSubmodulesLocalPaths怎么用?C# GitModule.GetSubmodulesLocalPaths使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类GitCommands.GitModule
的用法示例。
在下文中一共展示了GitModule.GetSubmodulesLocalPaths方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateSubmodulesList
private void UpdateSubmodulesList()
{
_previousUpdateTime = DateTime.Now;
// Cancel any previous async activities:
_submodulesStatusCTS.Cancel();
_submodulesStatusCTS.Dispose();
_submodulesStatusCTS = new CancellationTokenSource();
RemoveSubmoduleButtons();
toolStripButtonLevelUp.DropDownItems.Add(_loading.Text);
// Start gathering new submodule information asynchronously. This makes a significant difference in UI
// responsiveness if there are numerous submodules (e.g. > 100).
var cancelToken = _submodulesStatusCTS.Token;
string thisModuleDir = Module.WorkingDir;
// First task: Gather list of submodules on a background thread.
var updateTask = Task.Factory.StartNew(() =>
{
// Don't access Module directly because it's not thread-safe. Use a thread-local version:
GitModule threadModule = new GitModule(thisModuleDir);
SubmoduleInfoResult result = new SubmoduleInfoResult();
// Add all submodules inside the current repository:
foreach (var submodule in threadModule.GetSubmodulesLocalPaths().OrderBy(submoduleName => submoduleName))
{
cancelToken.ThrowIfCancellationRequested();
var name = submodule;
string path = threadModule.GetSubmoduleFullPath(submodule);
if (Settings.DashboardShowCurrentBranch && !GitModule.IsBareRepository(path))
name = name + " " + GetModuleBranch(path);
var smi = new SubmoduleInfo { Text = name, Path = path };
result.OurSubmodules.Add(smi);
GetSubmoduleStatusAsync(smi, cancelToken);
}
if (threadModule.SuperprojectModule != null)
{
GitModule supersuperproject = threadModule.FindTopProjectModule();
if (threadModule.SuperprojectModule.WorkingDir != supersuperproject.WorkingDir)
{
var name = Path.GetFileName(Path.GetDirectoryName(supersuperproject.WorkingDir));
string path = supersuperproject.WorkingDir;
if (Settings.DashboardShowCurrentBranch && !GitModule.IsBareRepository(path))
name = name + " " + GetModuleBranch(path);
result.TopProject = new SubmoduleInfo { Text = name, Path = supersuperproject.WorkingDir };
GetSubmoduleStatusAsync(result.TopProject, cancelToken);
}
{
string name;
GitModule parentModule = threadModule.SuperprojectModule;
string localpath = "";
if (threadModule.SuperprojectModule.WorkingDir != supersuperproject.WorkingDir)
{
parentModule = supersuperproject;
localpath = threadModule.SuperprojectModule.WorkingDir.Substring(supersuperproject.WorkingDir.Length);
localpath = PathUtil.GetDirectoryName(localpath.ToPosixPath());
name = localpath;
}
else
name = Path.GetFileName(Path.GetDirectoryName(supersuperproject.WorkingDir));
string path = threadModule.SuperprojectModule.WorkingDir;
if (Settings.DashboardShowCurrentBranch && !GitModule.IsBareRepository(path))
name = name + " " + GetModuleBranch(path);
result.Superproject = new SubmoduleInfo { Text = name, Path = threadModule.SuperprojectModule.WorkingDir };
GetSubmoduleStatusAsync(result.Superproject, cancelToken);
}
var submodules = supersuperproject.GetSubmodulesLocalPaths().OrderBy(submoduleName => submoduleName);
if (submodules.Any())
{
string localpath = threadModule.WorkingDir.Substring(supersuperproject.WorkingDir.Length);
localpath = PathUtil.GetDirectoryName(localpath.ToPosixPath());
foreach (var submodule in submodules)
{
cancelToken.ThrowIfCancellationRequested();
var name = submodule;
string path = supersuperproject.GetSubmoduleFullPath(submodule);
if (Settings.DashboardShowCurrentBranch && !GitModule.IsBareRepository(path))
name = name + " " + GetModuleBranch(path);
bool bold = false;
if (submodule == localpath)
{
result.CurrentSubmoduleName = threadModule.GetCurrentSubmoduleLocalPath();
bold = true;
}
var smi = new SubmoduleInfo { Text = name, Path = path, Bold = bold };
result.SuperSubmodules.Add(smi);
GetSubmoduleStatusAsync(smi, cancelToken);
}
}
}
return result;
}, cancelToken);
//.........这里部分代码省略.........
示例2: GetAllChangedFilesFromString
/*
source: https://git-scm.com/docs/git-status
*/
public static List<GitItemStatus> GetAllChangedFilesFromString(GitModule module, string statusString, bool fromDiff = false)
{
var diffFiles = new List<GitItemStatus>();
if (string.IsNullOrEmpty(statusString))
return diffFiles;
/*The status string can show warnings. This is a text block at the start or at the beginning
of the file status. Strip it. Example:
warning: LF will be replaced by CRLF in CustomDictionary.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in FxCop.targets.
The file will have its original line endings in your working directory.*/
var nl = new[] { '\n', '\r' };
string trimmedStatus = statusString.Trim(nl);
int lastNewLinePos = trimmedStatus.LastIndexOfAny(nl);
if (lastNewLinePos > 0)
{
int ind = trimmedStatus.LastIndexOf('\0');
if (ind < lastNewLinePos) //Warning at end
{
lastNewLinePos = trimmedStatus.IndexOfAny(nl, ind >= 0 ? ind : 0);
trimmedStatus = trimmedStatus.Substring(0, lastNewLinePos).Trim(nl);
}
else //Warning at beginning
trimmedStatus = trimmedStatus.Substring(lastNewLinePos).Trim(nl);
}
// Doesn't work with removed submodules
IList<string> Submodules = module.GetSubmodulesLocalPaths();
//Split all files on '\0' (WE NEED ALL COMMANDS TO BE RUN WITH -z! THIS IS ALSO IMPORTANT FOR ENCODING ISSUES!)
var files = trimmedStatus.Split(new char[] { '\0' }, StringSplitOptions.RemoveEmptyEntries);
for (int n = 0; n < files.Length; n++)
{
if (string.IsNullOrEmpty(files[n]))
continue;
int splitIndex = files[n].IndexOfAny(new char[] { '\0', '\t', ' ' }, 1);
string status = string.Empty;
string fileName = string.Empty;
if (splitIndex < 0)
{
status = files[n];
fileName = files[n + 1];
n++;
}
else
{
status = files[n].Substring(0, splitIndex);
fileName = files[n].Substring(splitIndex);
}
char x = status[0];
char y = status.Length > 1 ? status[1] : ' ';
if (x != '?' && x != '!' && x != ' ')
{
GitItemStatus gitItemStatusX = null;
if (x == 'R' || x == 'C') // Find renamed files...
{
string nextfile = n + 1 < files.Length ? files[n + 1] : "";
gitItemStatusX = GitItemStatusFromCopyRename(fromDiff, nextfile, fileName, x, status);
n++;
}
else
gitItemStatusX = GitItemStatusFromStatusCharacter(fileName, x);
gitItemStatusX.IsStaged = true;
if (Submodules.Contains(gitItemStatusX.Name))
gitItemStatusX.IsSubmodule = true;
diffFiles.Add(gitItemStatusX);
}
if (fromDiff || y == ' ')
continue;
GitItemStatus gitItemStatusY;
if (y == 'R' || y == 'C') // Find renamed files...
{
string nextfile = n + 1 < files.Length ? files[n + 1] : "";
gitItemStatusY = GitItemStatusFromCopyRename(false, nextfile, fileName, y, status);
n++;
}
else
gitItemStatusY = GitItemStatusFromStatusCharacter(fileName, y);
gitItemStatusY.IsStaged = false;
if (Submodules.Contains(gitItemStatusY.Name))
gitItemStatusY.IsSubmodule = true;
diffFiles.Add(gitItemStatusY);
}
return diffFiles;
}