git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] merge-recursive: leave unmerged entries in the index.

From
Fredrik Kuivinen <freku045@student.liu.se>
Date
Dec 11, 2005, 09:25 UTC
Message-ID
<20051211092531.GA4919@c165.ib.student.liu.se>
In-Reply-To
<7vek4ktai1.fsf@assigned-by-dhcp.cox.net>
On Sat, Dec 10, 2005 at 10:26:30PM -0800, Junio C Hamano wrote:
Show 25 quoted lines
> This does two things.
> 
>  - When one branch renamed and the other branch did not, the
>    resulting half-merged file in the working tree used to swap
>    branches around and showed as if renaming side was "ours".
>    This was confusing and inconsistent (even though the conflict
>    markers were marked with branch names, it was not a good
>    enough excuse).  This changes the order of arguments to
>    mergeFile in such a case to make sure we always see "our"
>    change between <<< and ===, and "their" change between ===
>    and >>>.
> 
>  - When both branches renamed to the same path, and when one
>    branch renamed and the other branch did not, we attempt
>    mergeFile.  When this automerge conflicted, we used to
>    collapse the index.  Now we use update-index --index-info
>    to inject higher stage entries to leave the index in unmerged
>    state for these two cases.
> 
> What this still does _not_ do is to inject unmerged state into
> the index when the structural changes conflict.  I have not
> thought things through what to do in each case yet, but the
> cases this commit cover are the most common ones, so this would
> be a good start.
> 
Good work! I have one comment, see below.
Show 25 quoted lines
> e5c23ede9ccc6ddd5f2cf13154f977bb1b687051
> diff --git a/git-merge-recursive.py b/git-merge-recursive.py
> index b7fb096..767b13c 100755
> --- a/git-merge-recursive.py
> +++ b/git-merge-recursive.py
> @@ -280,6 +280,22 @@ def updateFileExt(sha, mode, path, updat
>          runProgram(['git-update-index', '--add', '--cacheinfo',
>                      '0%o' % mode, sha, path])
>  
> +def setIndexStages(path,
> +                   oSHA1, oMode,
> +                   aSHA1, aMode,
> +                   bSHA1, bMode):
> +    prog = ['git-update-index', '-z', '--index-info']
> +    proc = subprocess.Popen(prog, stdin=subprocess.PIPE)
> +    pipe = proc.stdin
> +    # Clear stages first.
> +    pipe.write("0 " + ("0" * 40) + "\t" + path + "\0")
> +    # Set stages
> +    pipe.write("%o %s %d\t%s\0" % (oMode, oSHA1, 1, path))
> +    pipe.write("%o %s %d\t%s\0" % (aMode, aSHA1, 2, path))
> +    pipe.write("%o %s %d\t%s\0" % (bMode, bSHA1, 3, path))
> +    pipe.close()
> +    proc.wait()
> +
It might be cleaner to use
runProgram(['git-update-index', '-z', '--index-info'],
           input="0 " + ("0" * 40) + "\t" + path + "\0" + \
                 "%o %s %d\t%s\0" % (oMode, oSHA1, 1, path) + \
                 "%o %s %d\t%s\0" % (aMode, aSHA1, 2, path) + \
                 "%o %s %d\t%s\0" % (bMode, bSHA1, 3, path))

here instead. With this code we will get an exception if git-update-index exits with an error code. It is also consistent with the rest of the code.

- Fredrik
Previous: Junio C HamanoNext: Junio C Hamano
Message 2 of 3 in “merge-recursive: leave unmerged entries in the index.”
  1. merge-recursive: leave unmerged entries in the index.Junio C Hamano, Dec 11, 2005
  2. Fredrik KuivinenDec 11, 2005
  3. Junio C HamanoDec 11, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.