public void CreateObjectWhenProjectRootIsChildOfGitRootAndFileInGitRoot() { var repositoryPath = "/Source".ToSPath(); var unityProjectPath = repositoryPath.Combine("UnityProject"); SubstituteFactory.CreateProcessEnvironment(repositoryPath); var environment = SubstituteFactory.CreateEnvironment(new CreateEnvironmentOptions { RepositoryPath = repositoryPath, UnityProjectPath = unityProjectPath }); SPath.FileSystem = SubstituteFactory.CreateFileSystem(new CreateFileSystemOptions { CurrentDirectory = repositoryPath }); const string inputPath = "Something.sln"; const GitFileStatus inputStatus = GitFileStatus.Added; var expectedFullPath = repositoryPath.Combine(inputPath); var expectedProjectPath = expectedFullPath.RelativeTo(unityProjectPath); var expected = new GitStatusEntry(inputPath, expectedFullPath, expectedProjectPath, GitFileStatus.None, inputStatus); var gitStatusEntryFactory = new GitObjectFactory(environment); var result = gitStatusEntryFactory.CreateGitStatusEntry(inputPath, GitFileStatus.None, inputStatus); result.Should().Be(expected); }
private static void OnProjectWindowItemGUI(string guid, Rect itemRect) { if (!EnsureInitialized()) { return; } if (Event.current.type != EventType.Repaint || string.IsNullOrEmpty(guid)) { return; } var index = guids.IndexOf(guid); var indexLock = guidsLocks.IndexOf(guid); if (index < 0 && indexLock < 0) { return; } GitStatusEntry?gitStatusEntry = null; GitFileStatus status = GitFileStatus.None; if (index >= 0) { gitStatusEntry = entries[index]; status = gitStatusEntry.Value.Status; } var isLocked = indexLock >= 0; var texture = Styles.GetFileStatusIcon(status, isLocked); if (texture == null) { var path = gitStatusEntry.HasValue ? gitStatusEntry.Value.Path : string.Empty; Logger.Warning("Unable to retrieve texture for Guid:{0} EntryPath:{1} Status: {2} IsLocked:{3}", guid, path, status.ToString(), isLocked); return; } Rect rect; // End of row placement if (itemRect.width > itemRect.height) { rect = new Rect(itemRect.xMax - texture.width, itemRect.y, texture.width, Mathf.Min(texture.height, EditorGUIUtility.singleLineHeight)); } // Corner placement // TODO: Magic numbers that need reviewing. Make sure this works properly with long filenames and wordwrap. else { var scale = itemRect.height / 90f; var size = new Vector2(texture.width * scale, texture.height * scale); size = size / EditorGUIUtility.pixelsPerPoint; var offset = new Vector2(itemRect.width * Mathf.Min(.4f * scale, .2f), itemRect.height * Mathf.Min(.2f * scale, .2f)); rect = new Rect(itemRect.center.x - size.x * .5f + offset.x, itemRect.center.y - size.y * .5f + offset.y, size.x, size.y); } GUI.DrawTexture(rect, texture, ScaleMode.ScaleToFit); }
private static bool IsObjectUnlocked(Object selected) { if (selected == null) { return(false); } NPath assetPath = AssetDatabase.GetAssetPath(selected.GetInstanceID()).ToNPath(); NPath repositoryPath = manager.Environment.GetRepositoryPath(assetPath); var alreadyLocked = locks.Any(x => repositoryPath == x.Path); if (alreadyLocked) { return(false); } GitFileStatus status = GitFileStatus.None; if (entries != null) { status = entries.FirstOrDefault(x => repositoryPath == x.Path.ToNPath()).Status; } return(status != GitFileStatus.Untracked && status != GitFileStatus.Ignored); }
public static Texture2D GetFileStatusIcon(GitFileStatus status, bool isLocked) { if (isLocked) { switch (status) { case GitFileStatus.Modified: return(Utility.GetIcon("locked.png", "*****@*****.**")); default: return(Utility.GetIcon("locked-by-person.png", "*****@*****.**")); } } switch (status) { case GitFileStatus.Modified: return(Utility.GetIcon("modified.png", "*****@*****.**")); case GitFileStatus.Added: return(Utility.GetIcon("added.png", "*****@*****.**")); case GitFileStatus.Deleted: return(Utility.GetIcon("removed.png", "*****@*****.**")); case GitFileStatus.Renamed: return(Utility.GetIcon("renamed.png", "*****@*****.**")); case GitFileStatus.Untracked: return(Utility.GetIcon("untracked.png", "*****@*****.**")); } return(null); }
private static bool ContextMenu_CanLock() { if (isBusy) { return(false); } if (Repository == null || !Repository.CurrentRemote.HasValue) { return(false); } var selected = Selection.activeObject; if (selected == null) { return(false); } if (locks == null) { return(false); } NPath assetPath = AssetDatabase.GetAssetPath(selected.GetInstanceID()).ToNPath(); NPath repositoryPath = manager.Environment.GetRepositoryPath(assetPath); var alreadyLocked = locks.Any(x => repositoryPath == x.Path); GitFileStatus status = GitFileStatus.None; if (entries != null) { status = entries.FirstOrDefault(x => repositoryPath == x.Path.ToNPath()).Status; } return(!alreadyLocked && status != GitFileStatus.Untracked && status != GitFileStatus.Ignored); }
public GitStatusEntry CreateGitStatusEntry(string path, GitFileStatus status, string originalPath = null, bool staged = false) { var npath = new NPath(path).MakeAbsolute(); var relativePath = npath.RelativeTo(environment.RepositoryPath); var projectPath = npath.RelativeTo(environment.UnityProjectPath); return(new GitStatusEntry(relativePath, npath, projectPath, status, originalPath?.ToNPath(), staged)); }
public GitStatusEntry CreateGitStatusEntry(string path, GitFileStatus indexStatus, GitFileStatus workTreeStatus = GitFileStatus.None, string originalPath = null) { var absolutePath = new NPath(path).MakeAbsolute(); var relativePath = absolutePath.RelativeTo(environment.RepositoryPath); var projectPath = absolutePath.RelativeTo(environment.UnityProjectPath); return(new GitStatusEntry(relativePath, absolutePath, projectPath, indexStatus, workTreeStatus, originalPath?.ToNPath())); }
/// <summary> /// Called by solution explorer to provide tooltips for items. Returns a text describing the source control status of the item. /// </summary> public int GetGlyphTipText([InAttribute] IVsHierarchy phierHierarchy, [InAttribute] uint itemidNode, out string pbstrTooltipText) { pbstrTooltipText = ""; GitFileStatus status = GetFileStatus(phierHierarchy, itemidNode); pbstrTooltipText = status.ToString(); //TODO: use resources return(VSConstants.S_OK); }
/// <summary> /// Provide source control icons for the specified files and returns scc status of files /// </summary> /// <returns>The method returns S_OK if at least one of the files is controlled, S_FALSE if none of them are</returns> public int GetSccGlyph([InAttribute] int cFiles, [InAttribute] string[] rgpszFullPaths, [OutAttribute] VsStateIcon[] rgsiGlyphs, [OutAttribute] uint[] rgdwSccStatus) { Debug.Assert(cFiles == 1, "Only getting one file icon at a time is supported"); // Return the icons and the status. While the status is a combination a flags, we'll return just values // with one bit set, to make life easier for GetSccGlyphsFromStatus if (rgpszFullPaths[0] == null) { return(0); } GitFileStatus status = _active ? GetFileStatus(rgpszFullPaths[0]) : GitFileStatus.NotControlled; //Debug.WriteLine("==== GetSccGlyph {0} : {1}", rgpszFullPaths[0], status); if (rgdwSccStatus != null) { rgdwSccStatus[0] = (uint)__SccStatus.SCC_STATUS_CONTROLLED; } switch (status) { case GitFileStatus.Tracked: rgsiGlyphs[0] = GitSccOptions.Current.UseTGitIconSet ? (VsStateIcon)(this._customSccGlyphBaseIndex + (uint)CustomSccGlyphs.Tracked) : VsStateIcon.STATEICON_CHECKEDIN; break; case GitFileStatus.Modified: rgsiGlyphs[0] = GitSccOptions.Current.UseTGitIconSet ? (VsStateIcon)(this._customSccGlyphBaseIndex + (uint)CustomSccGlyphs.Modified): VsStateIcon.STATEICON_CHECKEDOUT; break; case GitFileStatus.New: rgsiGlyphs[0] = (VsStateIcon)(this._customSccGlyphBaseIndex + (uint)CustomSccGlyphs.Untracked); break; case GitFileStatus.Added: case GitFileStatus.Staged: rgsiGlyphs[0] = (VsStateIcon)(this._customSccGlyphBaseIndex + (uint)CustomSccGlyphs.Staged); break; case GitFileStatus.NotControlled: rgsiGlyphs[0] = VsStateIcon.STATEICON_BLANK; break; case GitFileStatus.Ignored: rgsiGlyphs[0] = VsStateIcon.STATEICON_EXCLUDEDFROMSCC; break; case GitFileStatus.Conflict: rgsiGlyphs[0] = VsStateIcon.STATEICON_DISABLED; break; } return(VSConstants.S_OK); }
private static bool IsChangedStatus(GitFileStatus status) { switch (status) { case GitFileStatus.NotControlled: return(false); case GitFileStatus.New: return(true); case GitFileStatus.Tracked: return(true); case GitFileStatus.Modified: return(true); case GitFileStatus.Staged: return(true); case GitFileStatus.Removed: return(true); case GitFileStatus.Added: return(true); case GitFileStatus.Deleted: return(true); case GitFileStatus.Conflict: return(true); case GitFileStatus.Merged: return(true); case GitFileStatus.Ignored: return(false); case GitFileStatus.Renamed: return(true); case GitFileStatus.Copied: return(true); case GitFileStatus.Nonexistent: return(false); case GitFileStatus.Unaltered: return(false); case GitFileStatus.Unreadable: return(false); default: return(false); } }
public GitFile( string workFolderPath, string filePath, string oldFilePath, GitFileStatus status) { FilePath = filePath; OldFilePath = oldFilePath; WorkFolderPath = workFolderPath; Status = status; }
public static GitFileStatus ParseStatusMarker(char changeFlag) { GitFileStatus status = GitFileStatus.None; switch (changeFlag) { case 'M': status = GitFileStatus.Modified; break; case 'A': status = GitFileStatus.Added; break; case 'D': status = GitFileStatus.Deleted; break; case 'R': status = GitFileStatus.Renamed; break; case 'C': status = GitFileStatus.Copied; break; case 'U': status = GitFileStatus.Unmerged; break; case 'T': status = GitFileStatus.TypeChange; break; case 'X': status = GitFileStatus.Unknown; break; case 'B': status = GitFileStatus.Broken; break; case '?': status = GitFileStatus.Untracked; break; case '!': status = GitFileStatus.Ignored; break; default: break; } return(status); }
public GitStatusEntry(string path, string fullPath, string projectPath, GitFileStatus status, string originalPath = null, bool staged = false) { Path = path; Status = status; FullPath = fullPath; ProjectPath = projectPath; OriginalPath = originalPath; Staged = staged; }
internal void CompareFile(string fileName) { GitFileStatus status = GetFileStatus(fileName); if (status == GitFileStatus.Modified || status == GitFileStatus.Staged) { string tempFile = Path.GetFileName(fileName); tempFile = Path.Combine(Path.GetTempPath(), tempFile); CurrentTracker.SaveFileFromRepository(fileName, tempFile); _sccProvider.RunDiffCommand(tempFile, fileName); } }
/// <summary> /// Called by solution explorer to provide tooltips for items. Returns a text describing the source control status of the item. /// </summary> public int GetGlyphTipText([In] IVsHierarchy phierHierarchy, [InAttribute] uint itemidNode, out string pbstrTooltipText) { pbstrTooltipText = ""; GitFileStatus status = ThreadHelper.JoinableTaskFactory.Run(async delegate { GitFileStatus fileStatus = await GetFileStatus(phierHierarchy, itemidNode); return(fileStatus); }); pbstrTooltipText = status.ToString(); //TODO: use resources return(VSConstants.S_OK); }
public GitStatusEntry(string path, string fullPath, string projectPath, GitFileStatus status, string originalPath = null, bool staged = false) { Guard.ArgumentNotNullOrWhiteSpace(path, "path"); Guard.ArgumentNotNullOrWhiteSpace(fullPath, "fullPath"); this.path = path; this.status = status; this.fullPath = fullPath; this.projectPath = projectPath; this.originalPath = originalPath; this.staged = staged; }
public GitStatusEntry(string path, string fullPath, string projectPath, GitFileStatus indexStatus, GitFileStatus workTreeStatus, string originalPath = null) { Guard.ArgumentNotNullOrWhiteSpace(path, "path"); Guard.ArgumentNotNullOrWhiteSpace(fullPath, "fullPath"); this.path = path; this.indexStatus = indexStatus; this.workTreeStatus = workTreeStatus; this.fullPath = fullPath; this.projectPath = projectPath; this.originalPath = originalPath; }
private void menuCompare_Click(object sender, RoutedEventArgs e) { GetSelectedFileName(fileName => { GitFileStatus status = this.tracker.GetFileStatus(fileName); if (status == GitFileStatus.Modified || status == GitFileStatus.Staged) { string tempFile = Path.GetFileName(fileName); tempFile = Path.Combine(Path.GetTempPath(), tempFile); this.tracker.SaveFileFromLastCommit(fileName, tempFile); fileName = Path.Combine(this.tracker.WorkingDirectory, fileName); toolWindow.DiffService.OpenComparisonWindow(tempFile, fileName); } }); }
public GitConflictFile( string workfolderPath, string filePath, string baseId, string localId, string remoteId, GitFileStatus status) { FilePath = filePath; BaseId = baseId; LocalId = localId; RemoteId = remoteId; WorkfolderPath = workfolderPath; Status = status; }
public void setStatusFromFileStatus(FileStatus status) { switch (status) { case FileStatus.Nonexistent: State = GitFileStatus.Nonexistent; break; case FileStatus.Unaltered: State = GitFileStatus.Unaltered; break; case FileStatus.NewInIndex: case FileStatus.NewInWorkdir: State = GitFileStatus.Added; break; case FileStatus.DeletedFromIndex: case FileStatus.DeletedFromWorkdir: State = GitFileStatus.Removed; break; case FileStatus.RenamedInIndex: case FileStatus.RenamedInWorkdir: State = GitFileStatus.Renamed; break; case FileStatus.TypeChangeInIndex: case FileStatus.TypeChangeInWorkdir: case FileStatus.ModifiedInIndex: case FileStatus.ModifiedInWorkdir: State = GitFileStatus.Modified; break; case FileStatus.Unreadable: State = GitFileStatus.Unreadable; break; case FileStatus.Ignored: State = GitFileStatus.Ignored; break; case FileStatus.Conflicted: State = GitFileStatus.Conflicted; break; } }
private IReadOnlyList <GitFile> ParseFiles(CmdResult2 result) { List <GitFile> files = new List <GitFile>(); foreach (string line in result.OutputLines) { string filePath = line.Substring(2).Trim(); GitFileStatus status = GitFileStatus.Modified; if (line.StartsWith("DD ") || line.StartsWith("AU ") || line.StartsWith("UA ")) { // How to do reproduce this ??? status = GitFileStatus.Conflict; } else if (line.StartsWith("UU ")) { status = GitFileStatus.Conflict | GitFileStatus.ConflictMM; } else if (line.StartsWith("AA ")) { status = GitFileStatus.Conflict | GitFileStatus.ConflictAA; } else if (line.StartsWith("UD ")) { status = GitFileStatus.Conflict | GitFileStatus.ConflictMD; } else if (line.StartsWith("DU ")) { status = GitFileStatus.Conflict | GitFileStatus.ConflictDM; } else if (line.StartsWith("?? ") || line.StartsWith(" A ")) { status = GitFileStatus.Added; } else if (line.StartsWith(" D ") || line.StartsWith("D")) { status = GitFileStatus.Deleted; } files.Add(new GitFile(result.WorkingDirectory, filePath, null, status)); } return(files); }
private GitConflicts ParseConflicts(CmdResult2 result) { List <GitConflictFile> files = new List <GitConflictFile>(); string filePath = null; string baseId = null; string localId = null; string remoteId = null; // Parsing lines, where there are 1,2 or 3 lines for one file before the next file lines foreach (string line in result.OutputLines) { string[] parts1 = line.Split("\t".ToCharArray()); string[] parts2 = parts1[0].Split(" ".ToCharArray()); string path = parts1[1].Trim(); if (path != filePath && filePath != null) { // Next file, store previous file GitFileStatus status = GetConflictStatus(baseId, localId, remoteId); if (status.HasFlag(GitFileStatus.Conflict)) { files.Add(new GitConflictFile(result.WorkingDirectory, filePath, baseId, localId, remoteId, status)); } baseId = null; localId = null; remoteId = null; } filePath = path; SetIds(parts2, ref baseId, ref localId, ref remoteId); } if (filePath != null) { // Add last file GitFileStatus status = GetConflictStatus(baseId, localId, remoteId); if (status.HasFlag(GitFileStatus.Conflict)) { files.Add(new GitConflictFile(result.WorkingDirectory, filePath, baseId, localId, remoteId, status)); } } return(new GitConflicts(files)); }
private void menuUndo_Click(object sender, RoutedEventArgs e) { GetSelectedFileFullName(fileName => { GitFileStatus status = tracker.GetFileStatus(fileName); if (status == GitFileStatus.Modified || status == GitFileStatus.Staged || status == GitFileStatus.Deleted || status == GitFileStatus.Removed) { if (MessageBox.Show("Are you sure you want to undo changes for " + Path.GetFileName(fileName) + " and restore a version from the last commit? ", "Undo Changes", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { tracker.CheckOutFile(fileName); } } }, false); // file must exists check flag is false }
/// <summary> /// Send filename and status, and returns true if file status is different than last known status /// </summary> /// <param name="filename"></param> /// <param name="status"></param> /// <returns></returns> public bool StatusChanged(string filename, GitFileStatus status) { var file = filename.ToLower(); ChangesetFileStatus fileStatus; if (_fileStatus.TryGetValue(file, out fileStatus)) { if (!fileStatus.IsStale && fileStatus.Status == status) { return(false); } _fileStatus[file] = new ChangesetFileStatus(status); return(true); } _fileStatus.TryAdd(file, new ChangesetFileStatus(status)); return(true); }
/// <summary> /// Send filename and status, and returns true if file status is different than last known status /// </summary> /// <param name="filename"></param> /// <param name="status"></param> /// <returns></returns> public bool StatusChanged(string filename, GitFileStatus status) { var file = filename.ToLower(); var fileStatus = GitFileStatus.NotControlled; if (_fileStatus.TryGetValue(file, out fileStatus)) { if (fileStatus == status) { return(false); } _fileStatus[file] = status; return(true); } _fileStatus.TryAdd(file, status); return(true); }
public IEnumerable <HunkRangeInfo> GetGitDiffFor(ITextDocument textDocument, ITextSnapshot snapshot) { string fileName = textDocument.FilePath; GitFileStatusTracker tracker = new GitFileStatusTracker(Path.GetDirectoryName(fileName)); if (!tracker.IsGit) { yield break; } GitFileStatus status = tracker.GetFileStatus(fileName); if (status == GitFileStatus.New || status == GitFileStatus.Added) { yield break; } HistogramDiff diff = new HistogramDiff(); diff.SetFallbackAlgorithm(null); string currentText = snapshot.GetText(); byte[] preamble = textDocument.Encoding.GetPreamble(); byte[] content = textDocument.Encoding.GetBytes(currentText); if (preamble.Length > 0) { byte[] completeContent = new byte[preamble.Length + content.Length]; Buffer.BlockCopy(preamble, 0, completeContent, 0, preamble.Length); Buffer.BlockCopy(content, 0, completeContent, preamble.Length, content.Length); content = completeContent; } byte[] previousContent = null; //GetPreviousRevision(tracker, fileName); RawText b = new RawText(content); RawText a = new RawText(previousContent ?? new byte[0]); EditList edits = diff.Diff(RawTextComparator.DEFAULT, a, b); foreach (Edit edit in edits) { yield return(new HunkRangeInfo(snapshot, edit, a, b)); } }
//public void Clear() //{ // _currentChangeset = new List<GitFile>(); // _fileStatus = new ConcurrentDictionary<string, GitFileStatus>(); //} //public GitFileStatus GetFileStatus(string fileName) //{ // try // { // fileName = Path.GetFullPath(fileName).ToLower(); // var file = _currentChangeset.FirstOrDefault(f => string.Equals(f.FilePath, fileName, StringComparison.OrdinalIgnoreCase)); // if (file != null) return file.Status; // if (FileExistsInRepo(fileName)) return GitFileStatus.Tracked; // // did not check if the file is ignored for performance reason // return GitFileStatus.NotControlled; // } // catch (Exception ex) // { // Debug.WriteLine("Error In File System Changed Event: " + ex.Message); // return GitFileStatus.NotControlled; // } //} //private bool FileExistsInRepo(string fileName) //{ // return File.Exists(Path.Combine(_repostory.WorkingDirectory, fileName)); //} /// <summary> /// Send filename and status, and returns true if file status is different than last known status /// </summary> /// <param name="filename"></param> /// <param name="status"></param> /// <returns></returns> public bool StatusChanged(string filename, GitFileStatus status) { var file = filename.ToLower(); var fileStatus = GitFileStatus.NotControlled; if (_fileStatus.TryGetValue(file, out fileStatus)) { if (fileStatus == status) { return false; } _fileStatus[file] = status; return true; } _fileStatus.TryAdd(file, status); return true; }
public static bool IsChangedStatus(GitFileStatus status) { switch (status) { case GitFileStatus.NotControlled: return false; case GitFileStatus.New: return true; case GitFileStatus.Tracked: return false; case GitFileStatus.Modified: return true; case GitFileStatus.Staged: return true; case GitFileStatus.Removed: return true; case GitFileStatus.Added: return true; case GitFileStatus.Deleted: return true; case GitFileStatus.Conflict: return true; case GitFileStatus.Merged: return true; case GitFileStatus.Ignored: return false; case GitFileStatus.Renamed: return true; case GitFileStatus.Copied: return true; case GitFileStatus.Nonexistent: return false; case GitFileStatus.Unaltered: return false; case GitFileStatus.Unreadable: return false; default: return false; } }
private static bool ContextMenu_CanLock() { if (isBusy) { Logger.Trace("is busy can't lock"); return(false); } if (repository == null || !repository.CurrentRemote.HasValue) { Logger.Trace("can't lock, repository is null or there's not remote"); return(false); } var selected = Selection.activeObject; if (selected == null) { Logger.Trace("can't lock, selected is null"); return(false); } if (locks == null) { Logger.Trace("can't lock, locks is null"); return(false); } NPath assetPath = AssetDatabase.GetAssetPath(selected.GetInstanceID()).ToNPath(); NPath repositoryPath = EntryPoint.Environment.GetRepositoryPath(assetPath); var alreadyLocked = locks.Any(x => { return(repositoryPath == x.Path.ToNPath()); }); GitFileStatus status = GitFileStatus.None; if (entries != null) { status = entries.FirstOrDefault(x => repositoryPath == x.Path.ToNPath()).Status; } Logger.Trace("checking if can lock, already locked? {0}, status {1}", alreadyLocked, status); return(!alreadyLocked && status != GitFileStatus.Untracked && status != GitFileStatus.Ignored); }
public void RefreshPending(List <string> porcelains) { if (_gitRepository.TryGetTarget(out IGitRepository gitRepository) == false) { return; } var modified_backup = new SelectionRecover(ModifiedList); var staged_backup = new SelectionRecover(StagedList); var collecting_staged = new ObservableCollection <FileStatus>(); var collecting_modified = new ObservableCollection <FileStatus>(); foreach (var porcelain in porcelains) { GitFileStatus status = GitPorcelainParser.ParseFileStatus(porcelain); if (status.Staged != null) { AddStagedList(status.Staged, staged_backup, collecting_staged); } if (status.Unmerged != null) { AddModifiedList(status.Unmerged, modified_backup, collecting_modified); } if (status.Modified != null) { AddModifiedList(status.Modified, modified_backup, collecting_modified); } } StagedList = collecting_staged; ModifiedList = collecting_modified; NotifyPropertyChanged("StagedList"); NotifyPropertyChanged("ModifiedList"); if (ModifiedList.Count == 0 && StagedList.Count == 0) { gitRepository.AddLog("Nothing changed"); } }
public void CheckOutFile(string fileName) { if (!this.HasGitRepository || this.head == null) { return; } string fileNameRel = GetRelativeFileName(fileName); if (GitBash.Exists) { GitBash.Run(string.Format("checkout -- \"{0}\"", fileNameRel), this.GitWorkingDirectory); } else { GitFileStatus status = GetFileStatus(fileName); SaveFileFromRepository(fileName, fileName); if (status == GitFileStatus.Staged || status == GitFileStatus.Removed) { UnStageFile(fileName); } } }
public void SetStatus(string filename, GitFileStatus status) { if (!String.IsNullOrWhiteSpace(filename)) { var fileKey = filename.ToLower(); var changeStatus = GitFile.IsChangedStatus(status) ? status : GitFileStatus.Unaltered; if (_fileStatus.ContainsKey(fileKey)) { if (changeStatus == GitFileStatus.Unaltered) { ChangesetFileStatus dStatus; _fileStatus.TryRemove(fileKey, out dStatus); } else { _fileStatus.AddOrUpdate(fileKey, new ChangesetFileStatus(changeStatus), (key, val) => new ChangesetFileStatus(changeStatus)); } } else if (changeStatus != GitFileStatus.Unaltered) { _fileStatus.AddOrUpdate(fileKey, new ChangesetFileStatus(changeStatus), (key, val) => new ChangesetFileStatus(changeStatus)); } } }