1. 16 10月, 2005 1 次提交
    • J
      Introduce notation "ref^{type}". · 5385f52d
      Junio C Hamano 提交于
      Existing "tagname^0" notation means "dereference tag zero or more
      times until you cannot dereference it anymore, and make sure it is a
      commit -- otherwise barf".  But tags do not necessarily reference
      commit objects.
      
      This commit introduces a bit more generalized notation, "ref^{type}".
      Existing "ref^0" is a shorthand for "ref^{commit}".  If the type
      is empty, it just dereferences tags until it hits a non-tag object.
      
      With this, "git-rev-parse --verify 'junio-gpg-pub^{}'" shows the blob
      object name -- there is no need to manually read the tag object and
      find out the object name anymore.
      
      "git-rev-parse --verify 'HEAD^{tree}'" can be used to find out the
      tree object name of the HEAD commit.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      5385f52d
  2. 12 10月, 2005 1 次提交
  3. 04 10月, 2005 1 次提交
  4. 03 10月, 2005 2 次提交
  5. 02 10月, 2005 1 次提交
    • L
      [PATCH] Allow reading "symbolic refs" that point to other refs · ca8db142
      Linus Torvalds 提交于
      This extends the ref reading to understand a "symbolic ref": a ref file
      that starts with "ref: " and points to another ref file, and thus
      introduces the notion of ref aliases.
      
      This is in preparation of allowing HEAD to eventually not be a symlink,
      but one of these symbolic refs instead.
      
      [jc: Linus originally required the prefix to be "ref: " five bytes
       and nothing else, but I changed it to allow and strip any number of
       leading whitespaces to match what update-ref.c does.]
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      ca8db142
  6. 21 9月, 2005 1 次提交
  7. 23 8月, 2005 1 次提交
    • J
      [PATCH] Add a new extended SHA1 syntax <name>~<num> · 4f7599ac
      Junio C Hamano 提交于
      The new notation is a short-hand for <name> followed by <num>
      caret ('^') characters.  E.g. "master~4" is the fourth
      generation ancestor of the current "master" branch head,
      following the first parents; same as "master^^^^" but a bit
      more readable.
      
      This will be used in the updated "git show-branch" command.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      4f7599ac
  8. 21 8月, 2005 1 次提交
    • J
      [PATCH] sha1_name: do not accept .git/refs/snap/. · 1dfcfbce
      Junio C Hamano 提交于
      I think Linus did a cut & paste from an early JIT code while
      developing the current extended SHA1 notation, and left it there as a
      courtesy, but the directory does not deserve to be treated any more
      specially than, say, .git/refs/bisect.
      
      If the subdirectories under .git/refs proliferate, we may want to
      switch to scanning that hierarchy at runtime, instead of the current
      hard-coded set, although I think that would be overkill.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      From nobody Mon Sep 17 00:00:00 2001
      Subject: [PATCH] Add a new extended SHA1 syntax <name>:<num>
      From: Junio C Hamano <junkio@cox.net>
      Date: 1124617434 -0700
      
      The new notation is a short-hand for <name> followed by <num>
      caret ('^') characters.  E.g. "master:4" is the fourth
      generation ancestor of the current "master" branch head,
      following the first parents; same as "master^^^^" but a bit more
      readable.
      
      This will be used in the updated "git show-branch" command.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      
      ---
      
       sha1_name.c |   41 +++++++++++++++++++++++++++++++++++++++++
       1 files changed, 41 insertions(+), 0 deletions(-)
      
      d5098ce769da46df6d45dc8f41b06dd758fdaea7
      diff --git a/sha1_name.c b/sha1_name.c
      --- a/sha1_name.c
      +++ b/sha1_name.c
      @@ -191,9 +191,29 @@ static int get_parent(const char *name, 
       	return -1;
       }
       
      +static int get_nth_ancestor(const char *name, int len,
      +			    unsigned char *result, int generation)
      +{
      +	unsigned char sha1[20];
      +	int ret = get_sha1_1(name, len, sha1);
      +	if (ret)
      +		return ret;
      +
      +	while (generation--) {
      +		struct commit *commit = lookup_commit_reference(sha1);
      +
      +		if (!commit || parse_commit(commit) || !commit->parents)
      +			return -1;
      +		memcpy(sha1, commit->parents->item->object.sha1, 20);
      +	}
      +	memcpy(result, sha1, 20);
      +	return 0;
      +}
      +
       static int get_sha1_1(const char *name, int len, unsigned char *sha1)
       {
       	int parent, ret;
      +	const char *cp;
       
       	/* foo^[0-9] or foo^ (== foo^1); we do not do more than 9 parents. */
       	if (len > 2 && name[len-2] == '^' &&
      @@ -210,6 +230,27 @@ static int get_sha1_1(const char *name, 
       	if (parent >= 0)
       		return get_parent(name, len, sha1, parent);
       
      +	/* name:3 is name^^^,
      +	 * name:12 is name^^^^^^^^^^^^, and
      +	 * name: is name
      +	 */
      +	parent = 0;
      +	for (cp = name + len - 1; name <= cp; cp--) {
      +		int ch = *cp;
      +		if ('0' <= ch && ch <= '9')
      +			continue;
      +		if (ch != ':')
      +			parent = -1;
      +		break;
      +	}
      +	if (!parent && *cp == ':') {
      +		int len1 = cp - name;
      +		cp++;
      +		while (cp < name + len)
      +			parent = parent * 10 + *cp++ - '0';
      +		return get_nth_ancestor(name, len1, sha1, parent);
      +	}
      +
       	ret = get_sha1_basic(name, len, sha1);
       	if (!ret)
       		return 0;
      1dfcfbce
  9. 14 8月, 2005 2 次提交
  10. 11 8月, 2005 1 次提交
  11. 05 8月, 2005 1 次提交
    • J
      Update get_sha1() to grok extended format. · 9938af6a
      Junio C Hamano 提交于
      Everybody envies rev-parse, who is the only one that can grok
      the extended sha1 format.  Move the get_extended_sha1() out of
      rev-parse, rename it to get_sha1() and make it available to
      everybody else.
      
      The one I posted earlier to the list had one bug where it did
      not handle a name that ends with a digit correctly (it
      incorrectly tried the "Nth parent" path).  This commit fixes it.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      9938af6a