1. 23 8月, 2005 5 次提交
    • J
      Clean-up output from "git show-branch" and document it. · f5e375c9
      Junio C Hamano 提交于
      When showing only one branch a lot of default output becomes redundant,
      so clean it up a bit, and document what is shown.  Retire the earlier
      implementation "git-show-branches-script".
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f5e375c9
    • J
      [PATCH] Add 'git show-branch'. · f76412ed
      Junio C Hamano 提交于
      The 'git show-branches' command turns out to be reasonably useful,
      but painfully slow.  So rewrite it in C, using ideas from merge-base
      while enhancing it a bit more.
      
       - Unlike show-branches, it can take --heads (show me all my
         heads), --tags (show me all my tags), or --all (both).
      
       - It can take --more=<number> to show beyond the merge-base.
      
       - It shows the short name for each commit in the extended SHA1
         syntax.
      
       - It can find merge-base for more than two heads.
      
      Examples:
      
          $ git show-branch --more=6 HEAD
      
          is almost the same as "git log --pretty=oneline --max-count=6".
      
          $ git show-branch --merge-base master mhf misc
      
          finds the merge base of the three given heads.
      
          $ git show-branch master mhf misc
      
          shows logs from the top of these three branch heads, up to their
          common ancestor commit is shown.
      
          $ git show-branch --all --more=10
      
          is poor-man's gitk, showing all the tags and heads, and
          going back 10 commits beyond the merge base of those refs.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f76412ed
    • 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
    • J
      Fix "git-diff-script A B" · 792fe559
      Junio C Hamano 提交于
      When "git-diff-script A..B" notation was introduced, it ended up breaking
      the traditional two revisions notation.
      
      [jc: there are other issues with the current "git diff" I would like to
       address, but they would be left to later rounds.  For example, -M and -p flags
       should not be hardcoded default, and it shouldn't be too hard to rewrite
       the script without using shell arrays.]
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      792fe559
    • L
      [PATCH] git-ls-files: generalized pathspecs · 56fc5108
      Linus Torvalds 提交于
      This generalizes the git "glob" string to be a lot more like the
      git-diff-* pathspecs (but there are still differences: the diff family
      doesn't do any globbing, and because the diff family always generates the
      full native pathname, it doesn't have the issue with "..").
      
      It does three things:
      
       - it allows multiple matching strings, ie you can do things like
      
      	git-ls-files arch/i386/ include/asm-i386/ | xargs grep pattern
      
       - the "matching" criteria is a combination of "exact path component
         match" (the same as the git-diff-* family), and "fnmatch()". However,
         you should be careful with the confusion between the git-ls-files
         internal globbing and the standard shell globbing, ie
      
      	git-ls-files fs/*.c
      
         does globbing in the shell, and does something totally different from
      
      	git-ls-files 'fs/*.c'
      
         which does the globbing inside git-ls-files.
      
         The latter has _one_ pathspec with a wildcard, and will match any .c
         file anywhere under the fs/ directory, while the former has been
         expanded by the shell into having _lots_ of pathspec entries, all of
         which are just in the top-level fs/ subdirectory. They will happily
         be matched exactly, but we will thus miss all the subdirectories under
         fs/.
      
         As a result, the first one will (on the current kernel) match 55 files,
         while the second one will match 664 files!
      
       - it uses the generic path prefixing, so that ".." and friends at the
         beginning of the path spec work automatically
      
         NOTE! When generating relative pathname output (the default), a
         pathspec that causes the base to be outside the current working
         directory will be rejected with an error message like:
      
      	fatal: git-ls-files: cannot generate relative filenames containing '..'
      
         because we do not actually generate ".." in the output. However, the
         ".." format works fine for the --full-name case:
      
      	cd arch/i386/kernel
      	git-ls-files --full-name ../mm/
      
         results in
      
      	arch/i386/mm/Makefile
      	arch/i386/mm/boot_ioremap.c
      	arch/i386/mm/discontig.c
      	arch/i386/mm/extable.c
      	arch/i386/mm/fault.c
      	arch/i386/mm/highmem.c
      	arch/i386/mm/hugetlbpage.c
      	arch/i386/mm/init.c
      	arch/i386/mm/ioremap.c
      	arch/i386/mm/mmap.c
      	arch/i386/mm/pageattr.c
      	arch/i386/mm/pgtable.c
      
         Perhaps more commonly, the generic path prefixing means that "." and
         "./" automatically get simplified and work properly.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      56fc5108
  2. 22 8月, 2005 1 次提交
    • L
      [PATCH] Make "git-ls-files" work in subdirectories · 5be4efbe
      Linus Torvalds 提交于
      This makes git-ls-files work inside a relative directory, and also adds
      some rudimentary filename globbing support. For example, in the kernel you
      can now do
      
      	cd arch/i386
      	git-ls-files
      
      and it will show all files under that subdirectory (and it will have
      removed the "arch/i386/" prefix unless you give it the "--full-name"
      option, so that you can feed the result to "xargs grep" or similar).
      
      The filename globbing is kind of strange: it does _not_ follow normal
      globbing rules, although it does look "almost" like a normal file glob
      (and it uses the POSIX.2 "fnmatch()" function).
      
      The glob pattern (there can be only one) is always split into a "directory
      part" and a "glob part", where the directory part is defined as any full
      directory path without any '*' or '?' characters. The "glob" part is
      whatever is left over.
      
      For example, when doing
      
      	git-ls-files 'arch/i386/p*/*.c'
      
      the "directory part" is is "arch/i386/", and the "glob part" is "p*/*.c".
      The directory part will be added to the prefix, and handled efficiently
      (ie we will not be searching outside of that subdirectory), while the glob
      part (if anything is left over) will be used to trigger "fnmatch()"
      matches.
      
      This is efficient and very useful, but can result in somewhat
      non-intuitive behaviour.
      
      For example:
      
      	git-ls-files 'arch/i386/*.[ch]'
      
      will find all .c and .h files under arch/i386/, _including_ things in
      lower subdirectories (ie it will match "arch/i386/kernel/process.c",
      because "kernel/process.c" will match the "*.c" specifier).
      
      Also, while
      
      	git-ls-files arch/i386/
      
      will show all files under that subdirectory, doing the same without the
      final slash would try to show the file "i386" under the "arch/"
      subdirectory, and since there is no such file (even if there is such a
      _directory_) it will not match anything at all.
      
      These semantics may not seem intuitive, but they are actually very
      practical. In particular, it makes it very simple to do
      
      	git-ls-files fs/*.c | xargs grep some_pattern
      
      and it does what you want.
      Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      5be4efbe
  3. 21 8月, 2005 4 次提交
    • 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
    • Y
      [PATCH] possible memory leak in diff.c::diff_free_filepair() · 90a734dc
      Yasushi SHOJI 提交于
      Here is a patch to fix the problem in the simplest way.
      90a734dc
    • J
      Create objects/info/ directory in init-db. · d57306c7
      Junio C Hamano 提交于
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      d57306c7
    • M
      [PATCH] Fix git-commit-script to output on stderr when -v fails · b909a15e
      Marco Costalba 提交于
      When git-commit-script is called with -v option and
      verify test fails result is print on stdout
      instead of stderr.
      
      [jc: The original patch from Marco updated git-commit-script that
      still had the piece of code in question, which has been moved to
      an example hook script on its own, so I transplanted the patch to
      that new file instead.]
      Signed-off-by: NMarco Costalba <mcostalba@yahoo.it>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      b909a15e
  4. 20 8月, 2005 9 次提交
  5. 19 8月, 2005 14 次提交
  6. 18 8月, 2005 7 次提交
    • P
      Use the --parents flag to git-rev-list. · e5ea701b
      Paul Mackerras 提交于
      With --parents, git-rev-list gives us the list of parents on the
      first line of each commit.  We use that rather than looking for
      the parent: lines in the commit body, since this way we get to
      know about the grafts for free.
      e5ea701b
    • J
      Merge with gitk · 379955c6
      Junio C Hamano 提交于
      379955c6
    • J
      [PATCH] Assorted changes to glossary · f1671ecb
      Johannes Schindelin 提交于
      Based on the discussion on the git list, here are some important changes
      to the glossary. (There is no cache, but an index. Use "object name"
      rather than "SHA1". Reorder. Clarify.)
      Signed-off-by: NJohannes Schindelin <Johannes.Schindelin@gmx.de>
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      f1671ecb
    • P
      Allow graph lines to jump through hyperspace. · f6075eba
      Paul Mackerras 提交于
      When the graph gets too wide (as defined by the maxwidth variable,
      which can be set in ~/.gitk), we can now terminate graph lines with
      an arrow pointing downwards, and reintroduce them later with an
      arrow pointing upwards when we need them.  This makes the graph much
      less cluttered on large repositories such as the linux kernel.
      
      Unfortunately this has made it slower; it takes about 10 seconds
      user time on the linux-2.6 repository on my machine now, compared
      to 6 seconds before.  I'll have to work on optimizing that.  Also
      on the todo list are making the arrow heads active (so if you click
      on them you jump to the other end) and improving the placement of
      the null entry.
      f6075eba
    • J
      Make rebase script saner. · 99a92f92
      Junio C Hamano 提交于
      It did not check to see if the working tree was clean and matched
      the commit we were starting out as, resulting in the initial rebased
      commit including whatever dirty state the working tree has had.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      99a92f92
    • J
      Make sure alternates are carried over from the original repository. · 0f87f893
      Junio C Hamano 提交于
      When we create a cheap local clone by pointing at the object databse
      of the original repository, we forgot to take the alternates the original
      repository might have had into account.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      0f87f893
    • J
      Fix git-commit without paths. · 6a0049c0
      Junio C Hamano 提交于
      The earlier one to grab output from diff-files --name-only has a grave
      bug that when no paths are given it ended up doing the equivalent of
      "git-commit --all", which was not what I intended.
      Signed-off-by: NJunio C Hamano <junkio@cox.net>
      6a0049c0