[PATCH STABLE] patch: Always ensure valid git diffs in case source/destination file is missing (issue4046)

Johan Björk jbjoerk at gmail.com
Mon Oct 21 19:12:58 CDT 2013


argh, ignore this, will resend.


On Mon, Oct 21, 2013 at 8:11 PM, Johan Bjork <jbjoerk at gmail.com> wrote:

> # HG changeset patch
> # User Johan Bjork <jbjoerk at gmail.com>
> # Date 1381667910 14400
> #      Sun Oct 13 08:38:30 2013 -0400
> # Branch stable
> # Node ID 5c1c1bfada42fccd41fe4a3a4236be3ddadc1d72
> # Parent  2c886dedd9021598b6290d95ea0f068731ea4e2b
> patch: Always ensure valid git diffs in case source/destination file is
> missing (issue4046)
>
> This is arguably a workaround, a better fix may be in the repo to ensure
> that it won't list a file 'modified' unless
> there is a file context for the previous version.
>
> diff -r 2c886dedd902 -r 5c1c1bfada42 mercurial/patch.py
> --- a/mercurial/patch.py        Mon Oct 21 10:50:58 2013 -0700
> +++ b/mercurial/patch.py        Sun Oct 13 08:38:30 2013 -0400
> @@ -1693,6 +1693,7 @@
>          revs = None
>
>      for f in sorted(modified + added + removed):
> +        #print f
>          to = None
>          tn = None
>          dodiff = True
> @@ -1703,7 +1704,9 @@
>              tn = getfilectx(f, ctx2).data()
>          a, b = f, f
>          if opts.git or losedatafn:
> -            if f in added:
> +            if f in added or (f in modified and not to):
> +                #print "added: " + str(f in added)
> +                #print "removed: " + str(f in removed)
>                  mode = gitmode[ctx2.flags(f)]
>                  if f in copy or f in copyto:
>                      if opts.git:
> @@ -1720,7 +1723,8 @@
>                              op = 'copy'
>                          header.append('%s from %s\n' % (op, join(a)))
>                          header.append('%s to %s\n' % (op, join(f)))
> -                        to = getfilectx(a, ctx1).data()
> +                        if a in man1:
> +                            to = getfilectx(a, ctx1).data()
>                      else:
>                          losedatafn(f)
>                  else:
> @@ -1739,7 +1743,7 @@
>                  if not opts.git and not tn:
>                      # regular diffs cannot represent new empty file
>                      losedatafn(f)
> -            elif f in removed:
> +            elif f in removed or (f in modified and not tn):
>                  if opts.git:
>                      # have we already reported a copy above?
>                      if ((f in copy and copy[f] in added
> diff -r 2c886dedd902 -r 5c1c1bfada42 tests/test-git-export.t
> --- a/tests/test-git-export.t   Mon Oct 21 10:50:58 2013 -0700
> +++ b/tests/test-git-export.t   Sun Oct 13 08:38:30 2013 -0400
> @@ -360,3 +360,23 @@
>    +foo
>    $ hg ci -m 'add filename with spaces'
>
> +Additions should be properly marked even in the middle of a merge
> +
> +  $ hg up -r -2
> +  0 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ echo "New File" >> inmerge
> +  $ hg add inmerge
> +  $ hg ci -m "file in merge"
> +  created new head
> +  $ hg up 23
> +  1 files updated, 0 files merged, 1 files removed, 0 files unresolved
> +  $ hg merge
> +  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
> +  (branch merge, don't forget to commit)
> +  $ hg diff -g
> +  diff --git a/inmerge b/inmerge
> +  new file mode 100644
> +  --- /dev/null
> +  +++ b/inmerge
> +  @@ -0,0 +1,1 @@
> +  +New File
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://selenic.com/pipermail/mercurial-devel/attachments/20131021/07c111d5/attachment.html>


More information about the Mercurial-devel mailing list