* Git without morning coffee @ 2011-09-07 7:48 Michael J Gruber 2011-09-07 16:46 ` Junio C Hamano 0 siblings, 1 reply; 8+ messages in thread From: Michael J Gruber @ 2011-09-07 7:48 UTC (permalink / raw) To: Git Mailing List Is this my lack of morning coffee, or git's: git rev-parse origin/next origin/pu 7931f38a2fd882b0f75a4d6f0eb60c3b1b094178 edf014b39ded8ee8a67f2a0cd8d7926b33f3d578 # OK git checkout origin/next HEAD is now at 7931f38... Merge branch 'master' into next # OK git log --oneline --no-walk ":/Merge branch 'jk/generation-numbers' into pu" 0ac76f9 Merge branch 'jk/generation-numbers' into pu # Sure it is. git merge ":/Merge branch 'jk/generation-numbers' into pu" fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point to a commit # Huh? git rev-parse ":/Merge branch 'jk/generation-numbers' into pu" 0ac76f96a94a46bce7ec9dcc6c67abcf9d36adac # It does point to a commit! git merge $(git rev-parse ":/Merge branch 'jk/generation-numbers' into pu") error: addinfo_cache failed for path 't/t7810-grep.sh' Performing inexact rename detection: 100% (91476/91476), done. error: addinfo_cache failed for path 't/t7810-grep.sh' error: addinfo_cache failed for path 'gitweb/static/gitweb.js' error: addinfo_cache failed for path 'gitweb/static/gitweb.css' ## hundreds more error: addinfo_cache failed for path 't/t7810-grep.sh' error: addinfo_cache failed for path 'gitweb/static/js/blame_incremental.js' Auto-merging cache.h Merge made by the 'recursive' strategy. Double Huh? Finally, the merge succeeds, despite thy myriad of errors. I mean, I'm merging a commit from origin/pu to origin/next when the latter is basically contained in the former (except for some merge commits). And what are these addinfo_cache errors? git --version git version 1.7.7.rc0.328.g9d6c7 which is last week's next with a few additions which I've been carrying along for weeks. Stumped. Michael ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Git without morning coffee 2011-09-07 7:48 Git without morning coffee Michael J Gruber @ 2011-09-07 16:46 ` Junio C Hamano 2011-09-07 17:23 ` Michael Witten 2011-09-07 17:35 ` Junio C Hamano 0 siblings, 2 replies; 8+ messages in thread From: Junio C Hamano @ 2011-09-07 16:46 UTC (permalink / raw) To: Michael J Gruber; +Cc: Git Mailing List Michael J Gruber <git@drmicha.warpmail.net> writes: > git merge ":/Merge branch 'jk/generation-numbers' into pu" > fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point > to a commit > # Huh? Interesting. > git merge $(git rev-parse ":/Merge branch 'jk/generation-numbers' into pu") > error: addinfo_cache failed for path 't/t7810-grep.sh' > Performing inexact rename detection: 100% (91476/91476), done. > error: addinfo_cache failed for path 't/t7810-grep.sh' Smells like another case where merge-recursive is looking at the work tree when it shouldn't inside an inner merge or something. > I mean, I'm merging a commit from origin/pu to origin/next when the > latter is basically contained in the former (except for some merge > commits). This falls into the "side note" category, but these days 'next' and 'pu' do not share any history beyond the tip of 'master'. Every time I update the 'pu' branch, it is rebuilt directly on top of 'master' from scratch by merging the topics in 'next' (and at this point I make sure its tree matches that of 'next') and then merging remaining topics on top of the result. A topic often goes through multiple iterations of fix-ups while in 'next', and these fix-ups result in multiple incremental merges of the same topic into 'next'; I do not want to see an incorrect merge when such a topic is merged in a single-step into 'master', and it is one way to ensure the health of the merge fixup machinery (including the rerere database) to attempt from-scratch-the-whole-topic-at-once merges and verify the result. The merge you attempted will have a lot of "the history leading to the current commit added/modified in a certain way and the history being merged did the same modification independently" kind of conflicts that should resolve to no-op. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Git without morning coffee 2011-09-07 16:46 ` Junio C Hamano @ 2011-09-07 17:23 ` Michael Witten 2011-09-07 17:49 ` Junio C Hamano 2011-09-07 17:35 ` Junio C Hamano 1 sibling, 1 reply; 8+ messages in thread From: Michael Witten @ 2011-09-07 17:23 UTC (permalink / raw) To: Junio C Hamano; +Cc: Michael J Gruber, Git Mailing List [Sorry for the repeat, Junio] On Wed, Sep 7, 2011 at 16:46, Junio C Hamano <gitster@pobox.com> wrote: > Michael J Gruber <git@drmicha.warpmail.net> writes: > >> git merge ":/Merge branch 'jk/generation-numbers' into pu" >> fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point >> to a commit >> # Huh? > > Interesting. > >> git merge $(git rev-parse ":/Merge branch 'jk/generation-numbers' into pu") >> error: addinfo_cache failed for path 't/t7810-grep.sh' >> Performing inexact rename detection: 100% (91476/91476), done. >> error: addinfo_cache failed for path 't/t7810-grep.sh' > > Smells like another case where merge-recursive is looking at the work tree > when it shouldn't inside an inner merge or something. > >> I mean, I'm merging a commit from origin/pu to origin/next when the >> latter is basically contained in the former (except for some merge >> commits). > > This falls into the "side note" category, but these days 'next' and 'pu' > do not share any history beyond the tip of 'master'. Every time I update > the 'pu' branch, it is rebuilt directly on top of 'master' from scratch by > merging the topics in 'next' (and at this point I make sure its tree > matches that of 'next') and then merging remaining topics on top of the > result. A topic often goes through multiple iterations of fix-ups while in > 'next', and these fix-ups result in multiple incremental merges of the > same topic into 'next'; I do not want to see an incorrect merge when such > a topic is merged in a single-step into 'master', and it is one way to > ensure the health of the merge fixup machinery (including the rerere > database) to attempt from-scratch-the-whole-topic-at-once merges and > verify the result. > > The merge you attempted will have a lot of "the history leading to the > current commit added/modified in a certain way and the history being > merged did the same modification independently" kind of conflicts that > should resolve to no-op. > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > I think it would be great if at some point you could write a detailed tutorial of how you maintain git (using example topics, example patch series and pull requests, and follow-along command sequences, etc.). Most importantly, it would be nice to see an explicit description of the maintenance properties you are trying to achieve with your workflow. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Git without morning coffee 2011-09-07 17:23 ` Michael Witten @ 2011-09-07 17:49 ` Junio C Hamano 2011-09-07 20:59 ` Michael Witten 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2011-09-07 17:49 UTC (permalink / raw) To: Michael Witten; +Cc: Michael J Gruber, Git Mailing List Michael Witten <mfwitten@gmail.com> writes: > I think it would be great if at some point you could write a detailed > tutorial of how you maintain git... Is MaintNotes[*1*] taken together with Documentation/howto/maintain-git.txt insufficient? [Reference] *1* http://git-blame.blogspot.com/p/note-from-maintainer.html ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Git without morning coffee 2011-09-07 17:49 ` Junio C Hamano @ 2011-09-07 20:59 ` Michael Witten 0 siblings, 0 replies; 8+ messages in thread From: Michael Witten @ 2011-09-07 20:59 UTC (permalink / raw) To: Junio C Hamano; +Cc: Michael J Gruber, Git Mailing List On Wed, Sep 7, 2011 at 17:49, Junio C Hamano <gitster@pobox.com> wrote: > Michael Witten <mfwitten@gmail.com> writes: > >> I think it would be great if at some point you could write a detailed >> tutorial of how you maintain git... > > Is MaintNotes[*1*] taken together with Documentation/howto/maintain-git.txt > insufficient? > > [Reference] > *1* http://git-blame.blogspot.com/p/note-from-maintainer.html I was unaware of the `howto'; I look forward to reading it. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Git without morning coffee 2011-09-07 16:46 ` Junio C Hamano 2011-09-07 17:23 ` Michael Witten @ 2011-09-07 17:35 ` Junio C Hamano 2011-09-07 18:16 ` Re* " Junio C Hamano 1 sibling, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2011-09-07 17:35 UTC (permalink / raw) To: Michael J Gruber; +Cc: Git Mailing List Junio C Hamano <gitster@pobox.com> writes: > Michael J Gruber <git@drmicha.warpmail.net> writes: > >> git merge ":/Merge branch 'jk/generation-numbers' into pu" >> fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point >> to a commit >> # Huh? > > Interesting. This is because 1c7b76b (Build in merge, 2008-07-07) grabs the name of the commit to be merged using peel_to_type(), which was defined in 8177631 (expose a helper function peel_to_type()., 2007-12-24) in terms of get_sha1_1(). It understands $commit~$n, $commit^$n and $ref@{$nth}, but does not understand :/$str, $treeish:$path, and :$stage:$path. ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re* Git without morning coffee 2011-09-07 17:35 ` Junio C Hamano @ 2011-09-07 18:16 ` Junio C Hamano 2011-09-07 18:25 ` Michael J Gruber 0 siblings, 1 reply; 8+ messages in thread From: Junio C Hamano @ 2011-09-07 18:16 UTC (permalink / raw) To: Michael J Gruber; +Cc: Git Mailing List Junio C Hamano <gitster@pobox.com> writes: > Junio C Hamano <gitster@pobox.com> writes: > >> Michael J Gruber <git@drmicha.warpmail.net> writes: >> >>> git merge ":/Merge branch 'jk/generation-numbers' into pu" >>> fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point >>> to a commit >>> # Huh? >> >> Interesting. > > This is because 1c7b76b (Build in merge, 2008-07-07) grabs the name of the > commit to be merged using peel_to_type(), which was defined in 8177631 > (expose a helper function peel_to_type()., 2007-12-24) in terms of > get_sha1_1(). It understands $commit~$n, $commit^$n and $ref@{$nth}, but > does not understand :/$str, $treeish:$path, and :$stage:$path. -- >8 -- Subject: Allow git merge ":/<pattern>" It probably is not such a good idea to use ":/<pattern>" to specify which commit to merge, as ":/<pattern>" can often hit unexpected commits, but somebody tried it and got a nonsense error message: fatal: ':/Foo bar' does not point to a commit So here is a for-the-sake-of-consistency update that is fairly useless that allows users to carefully try not shooting in the foot. Signed-off-by: Junio C Hamano <gitster@pobox.com> --- builtin/merge.c | 19 ++++++++++++++----- sha1_name.c | 6 ------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/builtin/merge.c b/builtin/merge.c index ab4077f..ee56974 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -403,6 +403,16 @@ static void finish(const unsigned char *new_head, const char *msg) strbuf_release(&reflog_message); } +static struct object *want_commit(const char *name) +{ + struct object *obj; + unsigned char sha1[20]; + if (get_sha1(name, sha1)) + return NULL; + obj = parse_object(sha1); + return peel_to_type(name, 0, obj, OBJ_COMMIT); +} + /* Get the name for the merge commit's message. */ static void merge_name(const char *remote, struct strbuf *msg) { @@ -418,7 +428,7 @@ static void merge_name(const char *remote, struct strbuf *msg) remote = bname.buf; memset(branch_head, 0, sizeof(branch_head)); - remote_head = peel_to_type(remote, 0, NULL, OBJ_COMMIT); + remote_head = want_commit(remote); if (!remote_head) die(_("'%s' does not point to a commit"), remote); @@ -1124,7 +1134,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (!allow_fast_forward) die(_("Non-fast-forward commit does not make sense into " "an empty head")); - remote_head = peel_to_type(argv[0], 0, NULL, OBJ_COMMIT); + remote_head = want_commit(argv[0]); if (!remote_head) die(_("%s - not something we can merge"), argv[0]); read_empty(remote_head->sha1, 0); @@ -1170,7 +1180,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) struct object *o; struct commit *commit; - o = peel_to_type(argv[i], 0, NULL, OBJ_COMMIT); + o = want_commit(argv[i]); if (!o) die(_("%s - not something we can merge"), argv[i]); commit = lookup_commit(o->sha1); @@ -1238,8 +1248,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (have_message) strbuf_addstr(&msg, " (no commit created; -m option ignored)"); - o = peel_to_type(sha1_to_hex(remoteheads->item->object.sha1), - 0, NULL, OBJ_COMMIT); + o = want_commit(sha1_to_hex(remoteheads->item->object.sha1)); if (!o) return 1; diff --git a/sha1_name.c b/sha1_name.c index ff5992a..653b065 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -501,12 +501,6 @@ struct object *peel_to_type(const char *name, int namelen, { if (name && !namelen) namelen = strlen(name); - if (!o) { - unsigned char sha1[20]; - if (get_sha1_1(name, namelen, sha1)) - return NULL; - o = parse_object(sha1); - } while (1) { if (!o || (!o->parsed && !parse_object(o->sha1))) return NULL; ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: Re* Git without morning coffee 2011-09-07 18:16 ` Re* " Junio C Hamano @ 2011-09-07 18:25 ` Michael J Gruber 0 siblings, 0 replies; 8+ messages in thread From: Michael J Gruber @ 2011-09-07 18:25 UTC (permalink / raw) To: Junio C Hamano; +Cc: Git Mailing List Junio C Hamano venit, vidit, dixit 07.09.2011 20:16: > Junio C Hamano <gitster@pobox.com> writes: > >> Junio C Hamano <gitster@pobox.com> writes: >> >>> Michael J Gruber <git@drmicha.warpmail.net> writes: >>> >>>> git merge ":/Merge branch 'jk/generation-numbers' into pu" >>>> fatal: ':/Merge branch 'jk/generation-numbers' into pu' does not point >>>> to a commit >>>> # Huh? >>> >>> Interesting. >> >> This is because 1c7b76b (Build in merge, 2008-07-07) grabs the name of the >> commit to be merged using peel_to_type(), which was defined in 8177631 >> (expose a helper function peel_to_type()., 2007-12-24) in terms of >> get_sha1_1(). It understands $commit~$n, $commit^$n and $ref@{$nth}, but >> does not understand :/$str, $treeish:$path, and :$stage:$path. > > -- >8 -- > Subject: Allow git merge ":/<pattern>" > > It probably is not such a good idea to use ":/<pattern>" to specify which > commit to merge, as ":/<pattern>" can often hit unexpected commits, but > somebody tried it and got a nonsense error message: > > fatal: ':/Foo bar' does not point to a commit > > So here is a for-the-sake-of-consistency update that is fairly useless > that allows users to carefully try not shooting in the foot. Shooting in the foot can be a good thing, depending on the feet... My concern is: If a command expects a commit(tish), a user expects to be able to specify it in any way which git rev-parse can parse. I had no idea we distinguish even further then what the command itself requires ("branch" needs a branch refname, diff-tree a treeish etc.). So, for systematic reasons I think the below is an improvement. > Signed-off-by: Junio C Hamano <gitster@pobox.com> > --- > builtin/merge.c | 19 ++++++++++++++----- > sha1_name.c | 6 ------ > 2 files changed, 14 insertions(+), 11 deletions(-) > > diff --git a/builtin/merge.c b/builtin/merge.c > index ab4077f..ee56974 100644 > --- a/builtin/merge.c > +++ b/builtin/merge.c > @@ -403,6 +403,16 @@ static void finish(const unsigned char *new_head, const char *msg) > strbuf_release(&reflog_message); > } > > +static struct object *want_commit(const char *name) > +{ > + struct object *obj; > + unsigned char sha1[20]; > + if (get_sha1(name, sha1)) > + return NULL; > + obj = parse_object(sha1); > + return peel_to_type(name, 0, obj, OBJ_COMMIT); > +} > + > /* Get the name for the merge commit's message. */ > static void merge_name(const char *remote, struct strbuf *msg) > { > @@ -418,7 +428,7 @@ static void merge_name(const char *remote, struct strbuf *msg) > remote = bname.buf; > > memset(branch_head, 0, sizeof(branch_head)); > - remote_head = peel_to_type(remote, 0, NULL, OBJ_COMMIT); > + remote_head = want_commit(remote); > if (!remote_head) > die(_("'%s' does not point to a commit"), remote); > > @@ -1124,7 +1134,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) > if (!allow_fast_forward) > die(_("Non-fast-forward commit does not make sense into " > "an empty head")); > - remote_head = peel_to_type(argv[0], 0, NULL, OBJ_COMMIT); > + remote_head = want_commit(argv[0]); > if (!remote_head) > die(_("%s - not something we can merge"), argv[0]); > read_empty(remote_head->sha1, 0); > @@ -1170,7 +1180,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) > struct object *o; > struct commit *commit; > > - o = peel_to_type(argv[i], 0, NULL, OBJ_COMMIT); > + o = want_commit(argv[i]); > if (!o) > die(_("%s - not something we can merge"), argv[i]); > commit = lookup_commit(o->sha1); > @@ -1238,8 +1248,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) > if (have_message) > strbuf_addstr(&msg, > " (no commit created; -m option ignored)"); > - o = peel_to_type(sha1_to_hex(remoteheads->item->object.sha1), > - 0, NULL, OBJ_COMMIT); > + o = want_commit(sha1_to_hex(remoteheads->item->object.sha1)); > if (!o) > return 1; > > diff --git a/sha1_name.c b/sha1_name.c > index ff5992a..653b065 100644 > --- a/sha1_name.c > +++ b/sha1_name.c > @@ -501,12 +501,6 @@ struct object *peel_to_type(const char *name, int namelen, > { > if (name && !namelen) > namelen = strlen(name); > - if (!o) { > - unsigned char sha1[20]; > - if (get_sha1_1(name, namelen, sha1)) > - return NULL; > - o = parse_object(sha1); > - } > while (1) { > if (!o || (!o->parsed && !parse_object(o->sha1))) > return NULL; ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2011-09-07 20:59 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-09-07 7:48 Git without morning coffee Michael J Gruber 2011-09-07 16:46 ` Junio C Hamano 2011-09-07 17:23 ` Michael Witten 2011-09-07 17:49 ` Junio C Hamano 2011-09-07 20:59 ` Michael Witten 2011-09-07 17:35 ` Junio C Hamano 2011-09-07 18:16 ` Re* " Junio C Hamano 2011-09-07 18:25 ` Michael J Gruber
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 NNTP newsgroup(s).