private TreeEntryChanges AddFileChange(GitDiffDelta delta, GitDiffLineOrigin lineorigin) { var newFilePath = FilePathMarshaler.FromNative(delta.NewFile.Path); if (lineorigin != GitDiffLineOrigin.GIT_DIFF_LINE_FILE_HDR) { return(this[newFilePath]); } var oldFilePath = FilePathMarshaler.FromNative(delta.OldFile.Path); var newMode = (Mode)delta.NewFile.Mode; var oldMode = (Mode)delta.OldFile.Mode; var newOid = delta.NewFile.Oid; var oldOid = delta.OldFile.Oid; if (delta.Status == ChangeKind.Untracked) { delta.Status = ChangeKind.Added; } var diffFile = new TreeEntryChanges(newFilePath, newMode, newOid, delta.Status, oldFilePath, oldMode, oldOid, delta.IsBinary()); fileDispatcher[delta.Status](this, diffFile); changes.Add(newFilePath, diffFile); return(diffFile); }
private int DataCallback(GitDiffDelta delta, GitDiffRange range, GitDiffLineOrigin lineOrigin, IntPtr content, UIntPtr contentLen, IntPtr payload) { var filePath = FilePathMarshaler.FromNative(delta.NewFile.Path); AddLineChange(this[filePath], lineOrigin); return(0); }
private int PrintCallBack(GitDiffDelta delta, GitDiffRange range, GitDiffLineOrigin lineorigin, IntPtr content, UIntPtr contentlen, IntPtr payload) { string formattedoutput = Utf8Marshaler.FromNative(content, (int)contentlen); var filePath = FilePathMarshaler.FromNative(delta.NewFile.Path); fullPatchBuilder.Append(formattedoutput); this[filePath].AppendToPatch(formattedoutput); return(0); }
private void ReplaceIndexEntryWith(TreeEntryChanges treeEntryChanges) { var indexEntry = new GitIndexEntry { Mode = (uint)treeEntryChanges.OldMode, oid = treeEntryChanges.OldOid.Oid, Path = FilePathMarshaler.FromManaged(treeEntryChanges.OldPath), }; Proxy.git_index_add(handle, indexEntry); Marshal.FreeHGlobal(indexEntry.Path); }
/// <summary> /// The delegate with a signature that matches the native diff git_diff_notify_cb function's signature. /// </summary> /// <param name="diffListSoFar">The diff list so far, before the delta is inserted.</param> /// <param name="deltaToAdd">The delta that is being diffed</param> /// <param name="matchedPathspec">The pathsec that matched the path of the diffed files.</param> /// <param name="payload">Payload object.</param> internal int OnGitDiffNotify(IntPtr diffListSoFar, IntPtr deltaToAdd, IntPtr matchedPathspec, IntPtr payload) { // Convert null strings into empty strings. var path = (matchedPathspec != IntPtr.Zero) ? FilePathMarshaler.FromNative(matchedPathspec) : FilePath.Empty; if (matchedPaths.Contains(path)) { return(0); } matchedPaths.Add(path); return(0); }
private StatusEntry StateChanged(IntPtr filePathPtr, uint state) { var filePath = FilePathMarshaler.FromNative(filePathPtr); var gitStatus = (FileStatus)state; foreach (KeyValuePair <FileStatus, Action <RepositoryStatus, string> > kvp in dispatcher) { if (!gitStatus.HasFlag(kvp.Key)) { continue; } kvp.Value(this, filePath.Native); } return(new StatusEntry(filePath.Native, gitStatus)); }
private int OnGitCheckoutNotify( CheckoutNotifyFlags why, IntPtr pathPtr, IntPtr baselinePtr, IntPtr targetPtr, IntPtr workdirPtr, IntPtr payloadPtr) { int result = 0; if (this.onCheckoutNotify != null) { string path = (pathPtr != IntPtr.Zero) ? FilePathMarshaler.FromNative(pathPtr).Native : string.Empty; result = onCheckoutNotify(path, why) ? 0 : 1; } return(result); }
internal static IndexEntry BuildFromPtr(Repository repo, IndexEntrySafeHandle handle) { if (handle == null || handle.IsZero) { return(null); } GitIndexEntry entry = handle.MarshalAsGitIndexEntry(); var path = FilePathMarshaler.FromNative(entry.Path); return(new IndexEntry { Path = path.Native, Id = entry.oid, StageLevel = Proxy.git_index_entry_stage(handle), Mode = (Mode)entry.Mode }); }
private void AddFileChange(GitDiffDelta delta) { var newFilePath = FilePathMarshaler.FromNative(delta.NewFile.Path); var oldFilePath = FilePathMarshaler.FromNative(delta.OldFile.Path); var newMode = (Mode)delta.NewFile.Mode; var oldMode = (Mode)delta.OldFile.Mode; var newOid = delta.NewFile.Oid; var oldOid = delta.OldFile.Oid; if (delta.Status == ChangeKind.Untracked || delta.Status == ChangeKind.Ignored) { delta.Status = ChangeKind.Added; } var diffFile = new TreeEntryChanges(newFilePath, newMode, newOid, delta.Status, oldFilePath, oldMode, oldOid, delta.IsBinary()); fileDispatcher[delta.Status](this, diffFile); changes.Add(newFilePath, diffFile); }