本文整理汇总了C#中MonoDevelop.VersionControl.Git.GitRevision类的典型用法代码示例。如果您正苦于以下问题:C# GitRevision类的具体用法?C# GitRevision怎么用?C# GitRevision使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
GitRevision类属于MonoDevelop.VersionControl.Git命名空间,在下文中一共展示了GitRevision类的19个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: GetDirectoryVersionInfoCore
static void GetDirectoryVersionInfoCore (LibGit2Sharp.Repository repo, GitRevision rev, FilePath directory, List<VersionInfo> versions, bool recursive)
{
var relativePath = repo.ToGitPath (directory);
var status = repo.RetrieveStatus (new StatusOptions {
PathSpec = relativePath != "." ? new [] { relativePath } : null,
IncludeUnaltered = true,
});
versions.AddRange (status.Added.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.ScheduledAdd, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.Ignored.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Ignored, rev, VersionStatus.Unversioned, null)));
versions.AddRange (status.Missing.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.ScheduledDelete, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.Modified.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.Modified, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.Removed.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.ScheduledDelete, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.RenamedInIndex.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.ScheduledReplace, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.RenamedInWorkDir.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned | VersionStatus.ScheduledReplace, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.Unaltered.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Versioned, rev, VersionStatus.Versioned, null)));
versions.AddRange (status.Untracked.Select (s => new VersionInfo (
repo.FromGitPath (s.FilePath), "", false, VersionStatus.Unversioned, rev, VersionStatus.Unversioned, null)));
foreach (var conflict in repo.Index.Conflicts) {
FilePath path = conflict.Ours.Path;
if (path.IsChildPathOf (directory))
versions.Add (new VersionInfo (
repo.FromGitPath (path), "", false, VersionStatus.Versioned | VersionStatus.Conflicted, rev, VersionStatus.Versioned, null));
}
if (!recursive)
versions.RemoveAll (v => v.LocalPath.ParentDirectory != directory);
}
开发者ID:powerumc,项目名称:monodevelop_korean,代码行数:37,代码来源:GitRepository.cs
示例2: GetPreviousRevisionFor
internal GitRevision GetPreviousRevisionFor (GitRevision revision)
{
ObjectId id = revision.GitRepository.Resolve (revision.ToString () + "^");
if (id == null)
return null;
return new GitRevision (this, revision.GitRepository, id.Name);
}
开发者ID:kthguru,项目名称:monodevelop,代码行数:7,代码来源:GitRepository.cs
示例3: GetDirectoryVersionInfo
VersionInfo[] GetDirectoryVersionInfo (FilePath localDirectory, IEnumerable<FilePath> localFileNames, bool getRemoteStatus, bool recursive)
{
var versions = new List<VersionInfo> ();
if (localFileNames != null) {
var localFiles = new List<FilePath> ();
foreach (var group in GroupByRepository (localFileNames)) {
var repository = group.Key;
GitRevision arev;
if (!versionInfoCacheEmptyRevision.TryGetValue (repository, out arev)) {
arev = new GitRevision (this, repository, null);
versionInfoCacheEmptyRevision.Add (repository, arev);
}
foreach (var p in group) {
if (Directory.Exists (p)) {
if (recursive)
versions.AddRange (GetDirectoryVersionInfo (p, getRemoteStatus, true));
versions.Add (new VersionInfo (p, "", true, VersionStatus.Versioned, arev, VersionStatus.Versioned, null));
} else
localFiles.Add (p);
}
}
// No files to check, we are done
if (localFiles.Count != 0) {
foreach (var group in GroupByRepository (localFileNames)) {
var repository = group.Key;
GitRevision rev = null;
Commit headCommit = GetHeadCommit (repository);
if (headCommit != null) {
if (!versionInfoCacheRevision.TryGetValue (repository, out rev)) {
rev = new GitRevision (this, repository, headCommit);
versionInfoCacheRevision.Add (repository, rev);
} else if (rev.Commit != headCommit) {
rev = new GitRevision (this, repository, headCommit);
versionInfoCacheRevision [repository] = rev;
}
}
GetFilesVersionInfoCore (repository, rev, group.ToList (), versions);
}
}
} else {
var directories = new List<FilePath> ();
CollectFiles (directories, localDirectory, recursive);
// Set directory items as Versioned.
GitRevision arev = null;
foreach (var group in GroupByRepository (directories)) {
var repository = group.Key;
if (!versionInfoCacheEmptyRevision.TryGetValue (repository, out arev)) {
arev = new GitRevision (this, repository, null);
versionInfoCacheEmptyRevision.Add (repository, arev);
}
foreach (var p in group)
versions.Add (new VersionInfo (p, "", true, VersionStatus.Versioned, arev, VersionStatus.Versioned, null));
}
Commit headCommit = GetHeadCommit (RootRepository);
if (headCommit != null) {
if (!versionInfoCacheRevision.TryGetValue (RootRepository, out arev)) {
arev = new GitRevision (this, RootRepository, headCommit);
versionInfoCacheRevision.Add (RootRepository, arev);
} else if (arev.Commit != headCommit) {
arev = new GitRevision (this, RootRepository, headCommit);
versionInfoCacheRevision [RootRepository] = arev;
}
}
GetDirectoryVersionInfoCore (RootRepository, arev, localDirectory.CanonicalPath, versions, recursive);
}
return versions.ToArray ();
}
开发者ID:powerumc,项目名称:monodevelop_korean,代码行数:74,代码来源:GitRepository.cs
示例4: GetFilesVersionInfoCore
static void GetFilesVersionInfoCore (LibGit2Sharp.Repository repo, GitRevision rev, List<FilePath> localPaths, List<VersionInfo> versions)
{
foreach (var file in repo.ToGitPath (localPaths)) {
var status = repo.RetrieveStatus (file);
VersionStatus fstatus = VersionStatus.Versioned;
if (status != FileStatus.Unaltered) {
if ((status & FileStatus.NewInIndex) != 0)
fstatus |= VersionStatus.ScheduledAdd;
else if ((status & (FileStatus.DeletedFromIndex | FileStatus.DeletedFromWorkdir)) != 0)
fstatus |= VersionStatus.ScheduledDelete;
else if ((status & (FileStatus.TypeChangeInWorkdir | FileStatus.ModifiedInWorkdir)) != 0)
fstatus |= VersionStatus.Modified;
else if ((status & (FileStatus.RenamedInIndex | FileStatus.RenamedInWorkdir)) != 0)
fstatus |= VersionStatus.ScheduledReplace;
else if ((status & (FileStatus.Nonexistent | FileStatus.NewInWorkdir)) != 0)
fstatus = VersionStatus.Unversioned;
else if ((status & FileStatus.Ignored) != 0)
fstatus = VersionStatus.Ignored;
}
if (repo.Index.Conflicts [file] != null)
fstatus = VersionStatus.Versioned | VersionStatus.Conflicted;
versions.Add (new VersionInfo (repo.FromGitPath (file), "", false, fstatus, rev, fstatus == VersionStatus.Ignored ? VersionStatus.Unversioned : VersionStatus.Versioned, null));
}
}
开发者ID:powerumc,项目名称:monodevelop_korean,代码行数:27,代码来源:GitRepository.cs
示例5: GetDirectoryVersionInfo
VersionInfo[] GetDirectoryVersionInfo (FilePath localDirectory, string fileName, bool getRemoteStatus, bool recursive)
{
HashSet<FilePath> existingFiles = new HashSet<FilePath> ();
if (fileName != null) {
FilePath fp = localDirectory.Combine (fileName).CanonicalPath;
if (File.Exists (fp))
existingFiles.Add (fp);
} else
CollectFiles (existingFiles, localDirectory, recursive);
GitRevision rev;
var headCommit = GetHeadCommit ();
if (headCommit != null)
rev = new GitRevision (this, headCommit.Id.Name);
else
rev = null;
List<VersionInfo> versions = new List<VersionInfo> ();
FilePath p = fileName != null ? localDirectory.Combine (fileName) : localDirectory;
p = p.CanonicalPath;
RepositoryStatus status;
if (fileName != null)
status = GitUtil.GetFileStatus (repo, p);
else
status = GitUtil.GetDirectoryStatus (repo, localDirectory, recursive);
HashSet<string> added = new HashSet<string> ();
Action<IEnumerable<string>, VersionStatus> AddFiles = delegate(IEnumerable<string> files, VersionStatus fstatus) {
foreach (string file in files) {
if (!added.Add (file))
continue;
FilePath statFile = FromGitPath (file);
existingFiles.Remove (statFile.CanonicalPath);
VersionInfo vi = new VersionInfo (statFile, "", false, fstatus, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
};
AddFiles (status.Added, VersionStatus.Versioned | VersionStatus.ScheduledAdd);
AddFiles (status.Modified, VersionStatus.Versioned | VersionStatus.Modified);
AddFiles (status.Removed, VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.Missing, VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.MergeConflict, VersionStatus.Versioned | VersionStatus.Conflicted);
AddFiles (status.Untracked, VersionStatus.Unversioned);
/* else if (staged == 'R') {
// Renamed files are in reality files delete+added to a different location.
existingFiles.Remove (srcFile.CanonicalPath);
VersionInfo rvi = new VersionInfo (srcFile, "", false, VersionStatus.Versioned | VersionStatus.ScheduledDelete, rev, VersionStatus.Versioned, null);
versions.Add (rvi);
status = VersionStatus.Versioned | VersionStatus.ScheduledAdd;
}
else*/
// Files for which git did not report an status are supposed to be tracked
foreach (FilePath file in existingFiles) {
VersionInfo vi = new VersionInfo (file, "", false, VersionStatus.Versioned, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
return versions.ToArray ();
}
开发者ID:stewartwhaley,项目名称:monodevelop,代码行数:63,代码来源:GitRepository.cs
示例6: OnGetHistory
protected override Revision[] OnGetHistory (FilePath localFile, Revision since)
{
var repository = GetRepository (localFile);
var hc = GetHeadCommit (repository);
if (hc == null)
return new GitRevision [0];
var sinceRev = since != null ? ((GitRevision)since).Commit : null;
IEnumerable<Commit> commits = repository.Commits;
if (localFile.CanonicalPath != RootPath.CanonicalPath.ResolveLinks ()) {
var localPath = repository.ToGitPath (localFile);
commits = commits.Where (c => {
int count = c.Parents.Count ();
if (count > 1)
return false;
var localTreeEntry = c.Tree [localPath];
if (localTreeEntry == null)
return false;
if (count == 0)
return true;
var parentTreeEntry = c.Parents.Single ().Tree [localPath];
return parentTreeEntry == null || localTreeEntry.Target.Id != parentTreeEntry.Target.Id;
});
}
return commits.TakeWhile (c => c != sinceRev).Select (commit => {
var author = commit.Author;
var rev = new GitRevision (this, repository, commit, author.When.LocalDateTime, author.Name, commit.Message) {
Email = author.Email,
ShortMessage = commit.MessageShort,
FileForChanges = localFile,
};
return rev;
}).ToArray ();
}
开发者ID:powerumc,项目名称:monodevelop_korean,代码行数:38,代码来源:GitRepository.cs
示例7: GetVersionInfo
public override VersionInfo GetVersionInfo (FilePath localPath, bool getRemoteStatus)
{
if (Directory.Exists (localPath)) {
GitRevision rev = new GitRevision (this, "");
return new VersionInfo (localPath, "", true, VersionStatus.Versioned, rev, VersionStatus.Versioned, null);
}
else {
VersionInfo[] infos = GetDirectoryVersionInfo (localPath.ParentDirectory, localPath.FileName, getRemoteStatus, false);
if (infos.Length == 1)
return infos[0];
else
return null;
}
}
开发者ID:Tak,项目名称:monodevelop-novell,代码行数:14,代码来源:GitRepository.cs
示例8: GetDirectoryVersionInfoCore
void GetDirectoryVersionInfoCore (NGit.Repository repository, GitRevision rev, FilePath [] localPaths, HashSet<FilePath> existingFiles, HashSet<FilePath> nonVersionedMissingFiles, List<VersionInfo> versions)
{
var status = new FilteredStatus (repository, repository.ToGitPath (localPaths)).Call ();
HashSet<string> added = new HashSet<string> ();
Action<IEnumerable<string>, VersionStatus> AddFiles = delegate(IEnumerable<string> files, VersionStatus fstatus) {
foreach (string file in files) {
if (!added.Add (file))
continue;
FilePath statFile = repository.FromGitPath (file);
existingFiles.Remove (statFile.CanonicalPath);
nonVersionedMissingFiles.Remove (statFile.CanonicalPath);
versions.Add (new VersionInfo (statFile, "", false, fstatus, rev, VersionStatus.Versioned, null));
}
};
AddFiles (status.GetAdded (), VersionStatus.Versioned | VersionStatus.ScheduledAdd);
AddFiles (status.GetChanged (), VersionStatus.Versioned | VersionStatus.Modified);
AddFiles (status.GetModified (), VersionStatus.Versioned | VersionStatus.Modified);
AddFiles (status.GetRemoved (), VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.GetMissing (), VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.GetConflicting (), VersionStatus.Versioned | VersionStatus.Conflicted);
AddFiles (status.GetUntracked (), VersionStatus.Unversioned);
}
开发者ID:kthguru,项目名称:monodevelop,代码行数:24,代码来源:GitRepository.cs
示例9: GetDirectoryVersionInfoCore
static void GetDirectoryVersionInfoCore (LibGit2Sharp.Repository repo, GitRevision rev, FilePath directory, List<VersionInfo> versions, bool recursive)
{
var relativePath = repo.ToGitPath (directory);
var status = repo.RetrieveStatus (new StatusOptions {
PathSpec = relativePath != "." ? new [] { relativePath } : null,
IncludeUnaltered = true,
});
foreach (var statusEntry in status) {
AddStatus (repo, rev, statusEntry.FilePath, versions, statusEntry.State, recursive ? null : directory);
}
}
开发者ID:sushihangover,项目名称:monodevelop,代码行数:12,代码来源:GitRepository.cs
示例10: GetDirectoryVersionInfo
VersionInfo[] GetDirectoryVersionInfo (FilePath localDirectory, IEnumerable<FilePath> localFileNames, bool getRemoteStatus, bool recursive)
{
List<VersionInfo> versions = new List<VersionInfo> ();
HashSet<FilePath> existingFiles = new HashSet<FilePath> ();
HashSet<FilePath> nonVersionedMissingFiles = new HashSet<FilePath> ();
if (localFileNames != null) {
var localFiles = new List<FilePath> ();
var arev = new GitRevision (this, "");
foreach (var p in localFileNames) {
if (Directory.Exists (p)) {
if (recursive)
versions.AddRange (GetDirectoryVersionInfo (p, getRemoteStatus, true));
else
versions.Add (new VersionInfo (p, "", true, VersionStatus.Versioned, arev, VersionStatus.Versioned, null));
}
else {
localFiles.Add (p);
if (File.Exists (p))
existingFiles.Add (p.CanonicalPath);
else
nonVersionedMissingFiles.Add (p.CanonicalPath);
}
}
// No files to check, we are done
if (localFiles.Count == 0)
return versions.ToArray ();
localFileNames = localFiles;
} else {
CollectFiles (existingFiles, localDirectory, recursive);
}
GitRevision rev;
var headCommit = GetHeadCommit ();
if (headCommit != null)
rev = new GitRevision (this, headCommit.Id.Name);
else
rev = null;
IEnumerable<string> paths;
if (localFileNames == null) {
if (recursive)
paths = new [] { (string) localDirectory };
else
paths = Directory.GetFiles (localDirectory);
} else {
paths = localFileNames.Select (f => (string)f);
}
paths = paths.Select (f => ToGitPath (f));
var status = new FilteredStatus (repo, paths).Call ();
HashSet<string> added = new HashSet<string> ();
Action<IEnumerable<string>, VersionStatus> AddFiles = delegate(IEnumerable<string> files, VersionStatus fstatus) {
foreach (string file in files) {
if (!added.Add (file))
continue;
FilePath statFile = FromGitPath (file);
existingFiles.Remove (statFile.CanonicalPath);
nonVersionedMissingFiles.Remove (statFile.CanonicalPath);
versions.Add (new VersionInfo (statFile, "", false, fstatus, rev, VersionStatus.Versioned, null));
}
};
AddFiles (status.GetAdded (), VersionStatus.Versioned | VersionStatus.ScheduledAdd);
AddFiles (status.GetChanged (), VersionStatus.Versioned | VersionStatus.Modified);
AddFiles (status.GetModified (), VersionStatus.Versioned | VersionStatus.Modified);
AddFiles (status.GetRemoved (), VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.GetMissing (), VersionStatus.Versioned | VersionStatus.ScheduledDelete);
AddFiles (status.GetConflicting (), VersionStatus.Versioned | VersionStatus.Conflicted);
AddFiles (status.GetUntracked (), VersionStatus.Unversioned);
// Existing files for which git did not report an status are supposed to be tracked
foreach (FilePath file in existingFiles) {
VersionInfo vi = new VersionInfo (file, "", false, VersionStatus.Versioned, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
// Non existing files for which git did not report an status are unversioned
foreach (FilePath file in nonVersionedMissingFiles)
versions.Add (VersionInfo.CreateUnversioned (file, false));
return versions.ToArray ();
}
开发者ID:JamesChan,项目名称:monodevelop,代码行数:84,代码来源:GitRepository.cs
示例11: AddStatus
static void AddStatus (LibGit2Sharp.Repository repo, GitRevision rev, string file, List<VersionInfo> versions, FileStatus status, string directoryPath)
{
VersionStatus fstatus = VersionStatus.Versioned;
if (status != FileStatus.Unaltered) {
if ((status & FileStatus.NewInIndex) != 0)
fstatus |= VersionStatus.ScheduledAdd;
else if ((status & (FileStatus.DeletedFromIndex | FileStatus.DeletedFromWorkdir)) != 0)
fstatus |= VersionStatus.ScheduledDelete;
else if ((status & (FileStatus.TypeChangeInWorkdir | FileStatus.ModifiedInWorkdir)) != 0)
fstatus |= VersionStatus.Modified;
else if ((status & (FileStatus.RenamedInIndex | FileStatus.RenamedInWorkdir)) != 0)
fstatus |= VersionStatus.ScheduledReplace;
else if ((status & (FileStatus.Nonexistent | FileStatus.NewInWorkdir)) != 0)
fstatus = VersionStatus.Unversioned;
else if ((status & FileStatus.Ignored) != 0)
fstatus = VersionStatus.Ignored;
}
if (repo.Index.Conflicts [file] != null)
fstatus = VersionStatus.Versioned | VersionStatus.Conflicted;
var versionPath = repo.FromGitPath (file);
if (directoryPath != null && versionPath.ParentDirectory != directoryPath) {
return;
}
versions.Add (new VersionInfo (versionPath, "", false, fstatus, rev, fstatus == VersionStatus.Ignored ? VersionStatus.Unversioned : VersionStatus.Versioned, null));
}
开发者ID:sushihangover,项目名称:monodevelop,代码行数:29,代码来源:GitRepository.cs
示例12: GetFilesVersionInfoCore
static void GetFilesVersionInfoCore (LibGit2Sharp.Repository repo, GitRevision rev, List<FilePath> localPaths, List<VersionInfo> versions)
{
foreach (var file in repo.ToGitPath (localPaths)) {
var status = repo.RetrieveStatus (file);
AddStatus (repo, rev, file, versions, status, null);
}
}
开发者ID:sushihangover,项目名称:monodevelop,代码行数:7,代码来源:GitRepository.cs
示例13: OnGetHistory
protected override Revision[] OnGetHistory (FilePath localFile, Revision since)
{
var revs = new List<Revision> ();
var repository = GetRepository (localFile);
var hc = GetHeadCommit (repository);
if (hc == null)
return new GitRevision [0];
var sinceRev = since != null ? ((GitRevision)since).Commit : null;
IEnumerable<Commit> commits = repository.Commits;
if (localFile.CanonicalPath != RootPath.CanonicalPath.ResolveLinks ()) {
var localPath = repository.ToGitPath (localFile);
commits = commits.Where (c => c.Parents.Count () == 1 && c.Tree [localPath] != null &&
(c.Parents.FirstOrDefault ().Tree [localPath] == null ||
c.Tree [localPath].Target.Id != c.Parents.FirstOrDefault ().Tree [localPath].Target.Id));
}
foreach (var commit in commits.TakeWhile (c => c != sinceRev)) {
var author = commit.Author;
var rev = new GitRevision (this, repository, commit, author.When.LocalDateTime, author.Name, commit.Message) {
Email = author.Email,
ShortMessage = commit.MessageShort,
FileForChanges = localFile,
};
revs.Add (rev);
}
return revs.ToArray ();
}
开发者ID:antonfirsov,项目名称:monodevelop,代码行数:30,代码来源:GitRepository.cs
示例14: GetHistory
public override Revision[] GetHistory (FilePath localFile, Revision since)
{
List<Revision> revs = new List<Revision> ();
var repository = GetRepository (localFile);
var hc = GetHeadCommit (repository);
if (hc == null)
return new GitRevision [0];
RevWalk walk = new RevWalk (repository);
string path = repository.ToGitPath (localFile);
if (path != ".")
walk.SetTreeFilter (FollowFilter.Create (path));
walk.MarkStart (hc);
foreach (RevCommit commit in walk) {
PersonIdent author = commit.GetAuthorIdent ();
GitRevision rev = new GitRevision (this, repository, commit.Id.Name, author.GetWhen().ToLocalTime (), author.GetName (), commit.GetFullMessage ());
rev.Email = author.GetEmailAddress ();
rev.ShortMessage = commit.GetShortMessage ();
rev.Commit = commit;
rev.FileForChanges = localFile;
revs.Add (rev);
}
return revs.ToArray ();
}
开发者ID:kthguru,项目名称:monodevelop,代码行数:26,代码来源:GitRepository.cs
示例15: GetDirectoryVersionInfo
VersionInfo[] GetDirectoryVersionInfo (FilePath localDirectory, string fileName, bool getRemoteStatus, bool recursive)
{
StringReader sr = RunCommand ("log -1 --format=format:%H", true);
string strRev = sr.ReadLine ();
sr.Close ();
HashSet<FilePath> existingFiles = new HashSet<FilePath> ();
if (fileName != null) {
FilePath fp = localDirectory.Combine (fileName).CanonicalPath;
if (File.Exists (fp))
existingFiles.Add (fp);
} else
CollectFiles (existingFiles, localDirectory, recursive);
GitRevision rev = new GitRevision (this, strRev);
List<VersionInfo> versions = new List<VersionInfo> ();
FilePath p = fileName != null ? localDirectory.Combine (fileName) : localDirectory;
sr = RunCommand ("status -s " + ToCmdPath (p), true);
string line;
while ((line = sr.ReadLine ()) != null) {
char staged = line[0];
char nostaged = line[1];
string file = line.Substring (3);
FilePath srcFile = FilePath.Null;
int i = file.IndexOf ("->");
if (i != -1) {
srcFile = path.Combine (file.Substring (0, i - 1));
file = file.Substring (i + 3);
}
FilePath statFile = path.Combine (file);
if (statFile.ParentDirectory != localDirectory && (!statFile.IsChildPathOf (localDirectory) || !recursive))
continue;
VersionStatus status;
if (staged == 'M' || nostaged == 'M')
status = VersionStatus.Versioned | VersionStatus.Modified;
else if (staged == 'A')
status = VersionStatus.Versioned | VersionStatus.ScheduledAdd;
else if (staged == 'D' || nostaged == 'D')
status = VersionStatus.Versioned | VersionStatus.ScheduledDelete;
else if (staged == 'U' || nostaged == 'U')
status = VersionStatus.Versioned | VersionStatus.Conflicted;
else if (staged == 'R') {
// Renamed files are in reality files delete+added to a different location.
existingFiles.Remove (srcFile.CanonicalPath);
VersionInfo rvi = new VersionInfo (srcFile, "", false, VersionStatus.Versioned | VersionStatus.ScheduledDelete, rev, VersionStatus.Versioned, null);
versions.Add (rvi);
status = VersionStatus.Versioned | VersionStatus.ScheduledAdd;
}
else
status = VersionStatus.Unversioned;
existingFiles.Remove (statFile.CanonicalPath);
VersionInfo vi = new VersionInfo (statFile, "", false, status, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
// Files for which git did not report an status are supposed to be tracked
foreach (FilePath file in existingFiles) {
VersionInfo vi = new VersionInfo (file, "", false, VersionStatus.Versioned, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
return versions.ToArray ();
}
开发者ID:Tak,项目名称:monodevelop-novell,代码行数:64,代码来源:GitRepository.cs
示例16: GetDirectoryVersionInfo
VersionInfo[] GetDirectoryVersionInfo (FilePath localDirectory, IEnumerable<FilePath> localFileNames, bool getRemoteStatus, bool recursive)
{
List<VersionInfo> versions = new List<VersionInfo> ();
HashSet<FilePath> existingFiles = new HashSet<FilePath> ();
HashSet<FilePath> nonVersionedMissingFiles = new HashSet<FilePath> ();
if (localFileNames != null) {
var localFiles = new List<FilePath> ();
foreach (var group in GroupByRepository (localFileNames)) {
var repository = group.Key;
var arev = new GitRevision (this, repository, "");
foreach (var p in group) {
if (Directory.Exists (p)) {
if (recursive)
versions.AddRange (GetDirectoryVersionInfo (p, getRemoteStatus, true));
else
versions.Add (new VersionInfo (p, "", true, VersionStatus.Versioned, arev, VersionStatus.Versioned, null));
}
else {
localFiles.Add (p);
if (File.Exists (p))
existingFiles.Add (p.CanonicalPath);
else
nonVersionedMissingFiles.Add (p.CanonicalPath);
}
}
}
// No files to check, we are done
if (localFiles.Count == 0)
return versions.ToArray ();
localFileNames = localFiles;
} else {
CollectFiles (existingFiles, localDirectory, recursive);
}
IEnumerable<FilePath> paths;
if (localFileNames == null) {
if (recursive) {
paths = new [] { localDirectory };
} else {
paths = Directory.GetFiles (localDirectory).Select (f => (FilePath)f).ToArray ();
}
} else {
paths = localFileNames.Select (f => f).ToArray ();
}
foreach (var group in paths.GroupBy (p => GetRepository (p))) {
var repository = group.Key;
var files = group.ToArray ();
GitRevision rev;
var headCommit = GetHeadCommit (repository);
if (headCommit != null)
rev = new GitRevision (this, repository, headCommit.Id.Name);
else
rev = null;
GetDirectoryVersionInfoCore (repository, rev, files.ToArray (), existingFiles, nonVersionedMissingFiles, versions);
// Existing files for which git did not report an status are supposed to be tracked
foreach (FilePath file in existingFiles.Where (f => files.Contains (f))) {
VersionInfo vi = new VersionInfo (file, "", false, VersionStatus.Versioned, rev, VersionStatus.Versioned, null);
versions.Add (vi);
}
}
// Non existing files for which git did not report an status are unversioned
foreach (FilePath file in nonVersionedMissingFiles)
versions.Add (VersionInfo.CreateUnversioned (file, false));
return versions.ToArray ();
}
开发者ID:kthguru,项目名称:monodevelop,代码行数:74,代码来源:GitRepository.cs
示例17: GetPreviousRevisionFor
internal GitRevision GetPreviousRevisionFor (GitRevision revision)
{
StringReader sr = RunCommand ("log -1 --name-status --date=iso " + revision + "^", true);
string rev = ReadWithPrefix (sr, "commit ");
string author = ReadWithPrefix (sr, "Author: ");
string dateStr = ReadWithPrefix (sr, "Date: ");
DateTime date;
DateTime.TryParse (dateStr, out date);
List<RevisionPath> paths = new List<RevisionPath> ();
bool readingComment = true;
StringBuilder message = new StringBuilder ();
StringBuilder interline = new StringBuilder ();
string line;
while ((line = sr.ReadLine ()) != null) {
if (line.Length > 2 && ("ADM".IndexOf (line[0]) != -1) && line [1] == '\t') {
readingComment = false;
string file = line.Substring (2);
RevisionAction ra;
switch (line[0]) {
case 'A': ra = RevisionAction.Add; break;
case 'D': ra = RevisionAction.Delete; break;
default: ra = RevisionAction.Modify; break;
}
RevisionPath p = new RevisionPath (path.Combine (file), ra, null);
paths.Add (p);
}
else if (readingComment) {
if (IsEmptyLine (line))
interline.AppendLine (line);
else {
message.Append (interline);
message.AppendLine (line);
interline = new StringBuilder ();
}
}
else
break;
}
return new GitRevision (this, rev, date, author, message.ToString ().Trim ('\n','\r'), paths.ToArray ());
}
开发者ID:Tak,项目名称:monodevelop-novell,代码行数:43,代码来源:GitRepository.cs
示例18: GetHeadRevision
protected override Revision GetHeadRevision ()
{
GitRepository repo2 = (GitRepository)repo;
RevWalk rw = new RevWalk (repo2.RootRepository);
ObjectId headId = repo2.RootRepository.Resolve (Constants.HEAD);
if (headId == null)
return null;
RevCommit commit = rw.ParseCommit (headId);
GitRevision rev = new GitRevision (repo, repo2.RootRepository, commit.Id.Name);
rev.Commit = commit;
return rev;
}
开发者ID:jrhtcg,项目名称:monodevelop,代码行数:13,代码来源:BaseGitRepositoryTests.cs
示例19: GetHistory
public override Revision[] GetHistory (FilePath localFile, Revision since)
{
List<Revision> revs = new List<Revision> ();
RevWalk walk = new RevWalk (repo);
var hc = GetHeadCommit ();
if (hc == null)
return new GitRevision [0];
walk.MarkStart (hc);
foreach (RevCommit commit in walk) {
List<RevisionPath> paths = new List<RevisionPath> ();
foreach (Change change in GitUtil.GetCommitChanges (repo, commit)) {
FilePath cpath = FromGitPath (change.Path);
if (cpath != localFile && !cpath.IsChildPathOf (localFile))
continue;
RevisionAction ra;
switch (change.ChangeType) {
case ChangeType.Added:
ra = RevisionAction.Add;
break;
case ChangeType.Deleted:
ra = RevisionAction.Delete;
break;
default:
ra = RevisionAction.Modify;
break;
}
RevisionPath p = new RevisionPath (cpath, ra, null);
paths.Add (p);
}
if (paths.Count > 0) {
PersonIdent author = commit.GetAuthorIdent ();
GitRevision rev = new GitRevision (this, commit.Id.Name, author.GetWhen().ToLocalTime (), author.GetName (), commit.GetFullMessage (), paths.ToArray ());
rev.Email = author.GetEmailAddress ();
rev.ShortMessage = commit.GetShortMessage ();
revs.Add (rev);
}
}
return revs.ToArray ();
}
开发者ID:stewartwhaley,项目名称:monodevelop,代码行数:41,代码来源:GitRepository.cs
注:本文中的MonoDevelop.VersionControl.Git.GitRevision类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论