From: Christopher Li <git@chrisli.org>
To: Junio C Hamano <junkio@cox.net>
Cc: Petr Baudis <pasky@ucw.cz>, Linus Torvalds <torvalds@osdl.org>,
git@vger.kernel.org
Subject: Re: Merge with git-pasky II.
Date: Thu, 14 Apr 2005 14:51:22 -0400 [thread overview]
Message-ID: <20050414185122.GA25468@64m.dyndns.org> (raw)
In-Reply-To: <7vll7lqlbg.fsf@assigned-by-dhcp.cox.net>
On Thu, Apr 14, 2005 at 11:12:35AM -0700, Junio C Hamano wrote:
> >>>>> "PB" == Petr Baudis <pasky@ucw.cz> writes:
>
> At this moment in the script, we have run "read-tree" the
> ancestor so the dircache has the original. %tree0 and %tree1
> both did not touch the path ($_ here) so it is the same as
> ancestor. When '-f' is specified we are populating the output
> working tree with the merge result so that is what that
> 'checkout-cache' is about. "O - $path" means "we took the
> original".
>
> The idea is to populate the dircache of merge-temp with the
> merge result and leave uncertain stuff as in the common ancestor
> state, so that the user can fix them starting from there.
>
> Maybe it is a good time for me to summarize the output somewhere
> in a document.
>
> O - $path Tree-A and tree-B did not touch this; the result
> is taken from the ancestor (O for original).
>
> A D $path Only tree-A (or tree-B) deleted this and the other
> B D $path branch did not touch this; the result is to delete.
>
> A M $path Only tree-A (or tree-B) modified this and the other
> B M $path branch did not touch this; the result is to use one
> from tree-A (or tree-B). This includes file
> creation case.
>
> *DD $path Both tree-A and tree-B deleted this; the result
> is to delete.
>
> *DM $path Tree-A deleted while tree-B modified this (or
> *MD $path vice versa), and manual conflict resolution is
> needed; dircache is left as in the ancestor, and
> the modified file is saved as $path~A~ in the
> working directory. The user can rename it to $path
> and run show-diff to see what Tree-A wanted to do
> and decide before running update-cache.
>
> *MM $path Tree-A and tree-B did the exact same
> modification; the result is to use that.
>
> MRG $path Tree-A and tree-B have different modifications;
> run "merge" and the merge result is left as
> $path in the working directory.
>
> In cases other than *DM, *MD, and MRG, the result is trivial and
I believe there is simpler way to do it as in my demo python script.
I start it easier but you bits me in time. It is a demo script, it
only print the action instead of actually going out to do it.
change that to corresponding os.system("") call leaves to the reader.
Again, this is a demo how it can be done. Not python vs perl thing
I did not chose perl only because I am not good at it.
#!/usr/bin/env python
import re
import sys
import os
from pprint import pprint
def get_tree(commit):
data = os.popen("cat-file commit %s"%commit).read()
return re.findall(r"(?m)^tree (\w+)", data)[0]
PREFIX = 0
PATH = -1
SHA = -2
ORIGSHA = -3
def get_difftree(old, new):
lines = os.popen("diff-tree %s %s"%(old, new)).read().split("\x00")
patterns = (r"(\*)(\d+)->(\d+)\s(\w+)\s(\w+)->(\w+)\s(.*)",
r"([+-])(\d+)\s(\w+)\s(\w+)\s(.*)")
res = {}
for l in lines:
if not l: continue
for p in patterns:
m = re.findall(p, l)
if m:
m = m[0]
res[m[-1]] = m
break
else:
raise "difftree: unknow line", l
return res
def analyze(diff1, diff2):
diff1only = [ diff1[k] for k in diff1 if k not in diff2 ]
diff2only = [ diff2[k] for k in diff2 if k not in diff1 ]
both = [ (diff1[k],diff2[k]) for k in diff2 if k in diff1 ]
action(diff1only)
action(diff2only)
action_two(both)
def action(diffs):
for act in diffs:
if act[PREFIX] == "*":
print "modify", act[PATH], act[SHA]
elif act[PREFIX] == '-':
print "remove", act[PATH], act[SHA]
elif act[PREFIX] == '+':
print "add", "remove", act[PATH], act[SHA]
else:
raise "unknow action"
def action_two(diffs):
for act1, act2 in diffs:
if len(act1) == len(act2): # same kind type
if act1[PREFIX] == act2[PREFIX]:
if act1[SHA] == act2[SHA] or act1[PREFIX] == '-':
return action(act1)
if act1[PREFIX]=='*':
print "3way-merge", act1[PATH], act1[ORIGSHA], act1[SHA], act2[SHA]
return
print "unable to handle", act[PATH]
print "one side wants", act1[PREFIX]
print "the other side wants", act2[PREFIX]
args = sys.argv[1:]
trees = map(get_tree, args)
print "check out tree", trees[0]
diff1 = get_difftree(trees[0], trees[1])
diff2 = get_difftree(trees[0], trees[2])
analyze(diff1, diff2)
next prev parent reply other threads:[~2005-04-14 21:58 UTC|newest]
Thread overview: 148+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-14 0:29 Merge with git-pasky II Petr Baudis
2005-04-13 21:25 ` Christopher Li
2005-04-14 0:45 ` Petr Baudis
2005-04-13 22:00 ` Christopher Li
2005-04-14 3:51 ` Linus Torvalds
2005-04-14 1:23 ` Christopher Li
2005-04-14 5:03 ` Paul Jackson
2005-04-14 2:16 ` Christopher Li
2005-04-14 6:16 ` Paul Jackson
2005-04-14 7:05 ` Junio C Hamano
2005-04-14 8:06 ` Linus Torvalds
2005-04-14 8:39 ` Junio C Hamano
2005-04-14 9:10 ` Linus Torvalds
2005-04-14 11:14 ` Junio C Hamano
2005-04-14 12:16 ` Petr Baudis
2005-04-14 18:12 ` Junio C Hamano
2005-04-14 18:36 ` Linus Torvalds
2005-04-14 19:59 ` Junio C Hamano
2005-04-14 20:20 ` Petr Baudis
2005-04-15 0:42 ` Linus Torvalds
2005-04-15 2:33 ` Barry Silverman
2005-04-15 10:02 ` David Woodhouse
2005-04-15 15:32 ` Linus Torvalds
2005-04-15 16:01 ` David Woodhouse
2005-04-15 16:31 ` C. Scott Ananian
2005-04-15 17:11 ` Linus Torvalds
2005-04-16 15:33 ` Johannes Schindelin
2005-04-17 13:14 ` David Woodhouse
2005-04-15 19:20 ` Paul Jackson
2005-04-16 1:44 ` Simon Fowler
2005-04-16 12:19 ` David Lang
2005-04-16 15:55 ` Simon Fowler
2005-04-16 16:03 ` Petr Baudis
2005-04-16 16:26 ` Simon Fowler
2005-04-16 16:26 ` Linus Torvalds
2005-04-16 23:02 ` David Lang
2005-04-17 14:52 ` Ingo Molnar
2005-04-17 15:08 ` Brad Roberts
2005-04-17 15:18 ` Ingo Molnar
2005-04-17 15:28 ` Ingo Molnar
2005-04-17 17:34 ` Linus Torvalds
2005-04-17 22:12 ` Herbert Xu
2005-04-17 22:35 ` Linus Torvalds
2005-04-17 23:29 ` Herbert Xu
2005-04-17 23:34 ` Petr Baudis
2005-04-17 23:53 ` Kenneth Johansson
2005-04-18 0:49 ` Herbert Xu
2005-04-18 0:55 ` Petr Baudis
2005-04-17 23:50 ` Linus Torvalds
2005-04-18 4:16 ` Sanjoy Mahajan
2005-04-18 7:42 ` Ingo Molnar
2005-04-16 20:29 ` Sanjoy Mahajan
2005-04-16 20:41 ` Linus Torvalds
2005-04-15 2:21 ` [Patch] ls-tree enhancements Junio C Hamano
2005-04-15 16:13 ` Petr Baudis
2005-04-15 18:25 ` Junio C Hamano
2005-04-15 9:14 ` Merge with git-pasky II David Woodhouse
2005-04-15 9:36 ` Ingo Molnar
2005-04-15 10:05 ` David Woodhouse
2005-04-15 14:53 ` Ingo Molnar
2005-04-15 15:09 ` David Woodhouse
2005-04-15 12:03 ` Johannes Schindelin
2005-04-15 10:22 ` Theodore Ts'o
2005-04-15 14:53 ` Linus Torvalds
2005-04-15 15:29 ` David Woodhouse
2005-04-15 15:51 ` Linus Torvalds
2005-04-15 15:54 ` Paul Jackson
2005-04-15 16:30 ` C. Scott Ananian
2005-04-15 18:29 ` Paul Jackson
2005-04-14 18:51 ` Christopher Li [this message]
2005-04-14 19:35 ` Petr Baudis
2005-04-14 20:01 ` Live Merging from remote repositories Barry Silverman
2005-04-14 23:22 ` Junio C Hamano
2005-04-15 1:07 ` Question about git process model Barry Silverman
2005-04-14 20:23 ` Re: Merge with git-pasky II Erik van Konijnenburg
2005-04-14 20:24 ` Petr Baudis
2005-04-14 23:12 ` Junio C Hamano
2005-04-14 20:24 ` Christopher Li
2005-04-14 23:31 ` Petr Baudis
2005-04-14 20:30 ` Christopher Li
2005-04-14 20:37 ` Christopher Li
2005-04-14 20:50 ` Christopher Li
2005-04-15 0:58 ` Junio C Hamano
2005-04-14 22:30 ` Christopher Li
2005-04-15 7:43 ` Junio C Hamano
2005-04-15 6:28 ` Christopher Li
2005-04-15 11:11 ` Junio C Hamano
[not found] ` <7vaco0i3t9.fsf_-_@assigned-by-dhcp.cox.net>
2005-04-15 18:44 ` write-tree is pasky-0.4 Linus Torvalds
2005-04-15 18:56 ` Petr Baudis
2005-04-15 20:13 ` Linus Torvalds
2005-04-15 22:36 ` Petr Baudis
2005-04-16 0:22 ` Linus Torvalds
2005-04-16 1:13 ` Daniel Barkalow
2005-04-16 2:18 ` Linus Torvalds
2005-04-16 2:49 ` Daniel Barkalow
2005-04-16 3:13 ` Linus Torvalds
2005-04-16 3:56 ` Daniel Barkalow
2005-04-16 6:59 ` Paul Jackson
2005-04-16 15:34 ` Re: Re: " Petr Baudis
2005-04-15 20:10 ` Junio C Hamano
2005-04-15 20:58 ` C. Scott Ananian
2005-04-15 21:22 ` Petr Baudis
2005-04-15 23:16 ` Junio C Hamano
2005-04-15 21:48 ` [PATCH 1/2] merge-trees script for Linus git Junio C Hamano
2005-04-15 21:54 ` [PATCH 2/2] " Junio C Hamano
2005-04-15 23:33 ` [PATCH 3/2] " Junio C Hamano
2005-04-16 1:02 ` Linus Torvalds
2005-04-16 4:10 ` Junio C Hamano
2005-04-16 5:02 ` Linus Torvalds
2005-04-16 6:26 ` Linus Torvalds
2005-04-16 8:12 ` Junio C Hamano
2005-04-16 9:27 ` [PATCH] Byteorder fix for read-tree, new -m semantics version Junio C Hamano
2005-04-16 10:35 ` [PATCH 1/2] Add --stage to show-files for new stage dircache Junio C Hamano
2005-04-16 10:42 ` [PATCH 2/2] " Junio C Hamano
2005-04-16 14:03 ` Issues with higher-order stages in dircache Junio C Hamano
2005-04-17 5:11 ` Junio C Hamano
2005-04-17 5:31 ` Linus Torvalds
2005-04-17 6:01 ` Junio C Hamano
2005-04-17 10:00 ` Summary of "read-tree -m O A B" mechanism Junio C Hamano
2005-04-16 15:28 ` [PATCH 3/2] merge-trees script for Linus git Linus Torvalds
2005-04-16 16:36 ` Linus Torvalds
2005-04-16 17:14 ` Junio C Hamano
2005-04-15 19:54 ` Re: Merge with git-pasky II Petr Baudis
2005-04-15 10:22 ` Junio C Hamano
2005-04-15 20:40 ` Petr Baudis
2005-04-15 22:41 ` Junio C Hamano
2005-04-15 19:57 ` Junio C Hamano
2005-04-15 20:45 ` Linus Torvalds
2005-04-14 0:30 ` Petr Baudis
2005-04-14 22:11 ` git merge Petr Baudis
[not found] <000d01c541ed$32241fd0$6400a8c0@gandalf>
2005-04-15 20:31 ` Merge with git-pasky II Linus Torvalds
2005-04-15 23:00 ` Barry Silverman
2005-04-16 0:32 ` Linus Torvalds
-- strict thread matches above, loose matches on Subject: below --
2005-04-26 18:55 Bram Cohen
2005-04-26 19:58 ` Linus Torvalds
2005-04-26 20:30 ` Tom Lord
2005-04-26 20:31 ` Bram Cohen
2005-04-26 20:39 ` Tom Lord
2005-04-26 20:58 ` Linus Torvalds
2005-04-26 21:25 ` Linus Torvalds
2005-04-26 21:28 ` Bram Cohen
2005-04-26 21:36 ` Fabian Franz
2005-04-26 22:30 ` Linus Torvalds
2005-04-26 22:25 ` Linus Torvalds
2005-04-28 0:42 ` Petr Baudis
2005-04-26 21:26 ` Diego Calleja
2005-04-26 20:31 ` Daniel Barkalow
2005-04-26 20:44 ` Tom Lord
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050414185122.GA25468@64m.dyndns.org \
--to=git@chrisli.org \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
--cc=pasky@ucw.cz \
--cc=torvalds@osdl.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).