--- Jakub Narebski <jnareb@xxxxxxxxx> wrote: > git diff output for files specified by revision is somewhat unexpected. > > $ git diff <revision_1>:<file> <revision_2>:<file> > > outputs the following diff metainfo > > diff --git a/<revision_2>:<file> b/<revision_2>:<file> > index 5eabe06..2e87de4 100644 > --- a/<revision_2>:<file> > +++ b/<revision_2>:<file> > > Is it intended, or is it a bug? Looks like a bug to me... I guess the revision should not be there. Here is a patch to remove it. <matled> is there a name for 'revision:path' to specify a file at a certain revision? <jdl> "That weird syntax, you know." <matled> get_path_out_of_the_weird_syntax(const char *s) <matled> you know :) <jdl> That should do it! Could someone please come up with a nice name for the function? Without knowing a name for the '<revision>:<path>' syntax I can only think of get_path or similar names and this is much too generic imo. --- cache.h | 1 + revision.c | 2 ++ sha1_name.c | 12 ++++++++++++ 3 files changed, 15 insertions(+), 0 deletions(-) diff --git a/cache.h b/cache.h index d433d46..7da1c5c 100644 --- a/cache.h +++ b/cache.h @@ -249,6 +249,7 @@ #define DEFAULT_ABBREV 7 extern int get_sha1(const char *str, unsigned char *sha1); extern int get_sha1_hex(const char *hex, unsigned char *sha1); +extern char *get_path_out_of_the_weird_syntax(const char *str); extern char *sha1_to_hex(const unsigned char *sha1); /* static buffer result! */ extern int read_ref(const char *filename, unsigned char *sha1); extern const char *resolve_ref(const char *path, unsigned char *sha1, int); diff --git a/revision.c b/revision.c index 874e349..fbd1458 100644 --- a/revision.c +++ b/revision.c @@ -908,6 +908,8 @@ int setup_revisions(int argc, const char if (!seen_dashdash) verify_non_filename(revs->prefix, arg); object = get_reference(revs, arg, sha1, flags ^ local_flags); + if (object->type == OBJ_BLOB || object->type == OBJ_TREE) + arg = get_path_out_of_the_weird_syntax(arg); add_pending_object(revs, object, arg); } if (show_merge) diff --git a/sha1_name.c b/sha1_name.c index 5fe8e5d..718ce1b 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -543,3 +543,15 @@ int get_sha1(const char *name, unsigned } return ret; } + +/* get the path from sha1:path, :path and :[0-3]:path */ +char *get_path_out_of_the_weird_syntax(const char *str) +{ + if (strlen(str) >= 3 && + str[0] == ':' && str[2] == ':' && + str[1] >= '0' && str[2] <= '3') + return((char*)(str+3)); + if (index(str, ':')) + return index(str, ':')+1; + return str; +} -- 1.4.1.ga3e6 - : send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html