示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
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);
        }
示例#4
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);
        }
示例#6
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);
        }
示例#8
0
        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
            });
        }
示例#9
0
        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);
        }