]> git.ipfire.org Git - thirdparty/git.git/log
thirdparty/git.git
12 years agodo_for_each_reflog(): return early on error
Michael Haggerty [Tue, 24 Apr 2012 22:45:13 +0000 (00:45 +0200)] 
do_for_each_reflog(): return early on error

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoget_ref_dir(): take the containing directory as argument
Michael Haggerty [Tue, 24 Apr 2012 22:45:12 +0000 (00:45 +0200)] 
get_ref_dir(): take the containing directory as argument

Previously, the "dir" argument to get_ref_dir() was a pointer to the
top-level ref_dir.  Change the function to expect a pointer to the
ref_dir corresponding to dirname.  This allows entries to be added
directly to dir, without having to recurse through the reference trie
each time (i.e., we can use add_entry_to_dir() instead of add_ref()).

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs.c: extract function search_for_subdir()
Michael Haggerty [Tue, 24 Apr 2012 22:45:11 +0000 (00:45 +0200)] 
refs.c: extract function search_for_subdir()

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoget_ref_dir(): require that the dirname argument ends in '/'
Michael Haggerty [Tue, 24 Apr 2012 22:45:10 +0000 (00:45 +0200)] 
get_ref_dir(): require that the dirname argument ends in '/'

This removes some conditional code and makes it consistent with the
way that direntry names are stored.  Please note that this function is
never used on the top-level .git directory; it is always called for
directories at level .git/refs or deeper.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoget_ref_dir(): rename "base" parameter to "dirname"
Michael Haggerty [Tue, 24 Apr 2012 22:45:09 +0000 (00:45 +0200)] 
get_ref_dir(): rename "base" parameter to "dirname"

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoget_ref_dir(): use a strbuf to hold refname
Michael Haggerty [Tue, 24 Apr 2012 22:45:08 +0000 (00:45 +0200)] 
get_ref_dir(): use a strbuf to hold refname

This simplifies the bookkeeping and allows an (artificial) restriction
on refname component length to be removed.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoget_ref_dir(): return early if directory cannot be read
Michael Haggerty [Tue, 24 Apr 2012 22:45:07 +0000 (00:45 +0200)] 
get_ref_dir(): return early if directory cannot be read

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'mh/ref-api'
Junio C Hamano [Tue, 24 Apr 2012 21:40:28 +0000 (14:40 -0700)] 
Merge branch 'mh/ref-api'

Allows walking only a sub-hierarchy in refs/*.

By Michael Haggerty
* mh/ref-api:
  do_for_each_ref(): only iterate over the subtree that was requested
  refs: store references hierarchically
  sort_ref_dir(): simplify logic
  refs.c: rename ref_array -> ref_dir
  struct ref_entry: nest the value part in a union
  check_refname_component(): return 0 for zero-length components
  free_ref_entry(): new function
  names_conflict(): simplify implementation
  repack_without_ref(): reimplement using do_for_each_ref_in_array()
  do_for_each_ref_in_arrays(): new function
  do_for_each_ref_in_array(): new function
  refs: manage current_ref within do_one_ref()
  refs.c: reorder definitions more logically

12 years agoMerge branch 'hv/submodule-recurse-push'
Junio C Hamano [Tue, 24 Apr 2012 21:40:20 +0000 (14:40 -0700)] 
Merge branch 'hv/submodule-recurse-push'

"git push --recurse-submodules" learns to optionally look into the
histories of submodules bound to the superproject and push them out.

By Heiko Voigt
* hv/submodule-recurse-push:
  push: teach --recurse-submodules the on-demand option
  Refactor submodule push check to use string list instead of integer
  Teach revision walking machinery to walk multiple times sequencially

12 years agogit-svn: drop redundant blocking of SIGPIPE
Roman Kagan [Mon, 23 Apr 2012 16:26:56 +0000 (20:26 +0400)] 
git-svn: drop redundant blocking of SIGPIPE

Now that SIGPIPE is ignored there's no point blocking it.

Signed-off-by: Roman Kagan <rkagan@mail.ru>
Acked-by: Eric Wong <normalperson@yhbt.net>
12 years agogit-svn: ignore SIGPIPE
Roman Kagan [Mon, 2 Apr 2012 13:52:34 +0000 (17:52 +0400)] 
git-svn: ignore SIGPIPE

In HTTP with keep-alive it's not uncommon for the client to notice that
the server decided to stop maintaining the current connection only when
sending a new request.  This naturally results in -EPIPE and possibly
SIGPIPE.

The subversion library itself makes no provision for SIGPIPE.  Some
combinations of the underlying libraries do (typically SIG_IGN-ing it),
some don't.

Presumably for that reason all subversion commands set SIGPIPE to
SIG_IGN early in their main()-s.

So should we.

This, together with the previous patch, fixes the notorious "git-svn
died of signal 13" problem (see e.g.
http://thread.gmane.org/gmane.comp.version-control.git/134936).

Signed-off-by: Roman Kagan <rkagan@mail.ru>
Acked-by: Eric Wong <normalperson@yhbt.net>
12 years agogit-svn: use POSIX::sigprocmask to block signals
Roman Kagan [Mon, 2 Apr 2012 13:29:32 +0000 (17:29 +0400)] 
git-svn: use POSIX::sigprocmask to block signals

In order to maintain consistency of the database mapping svn revision
numbers to git commit ids, rev_map_set() defers signal processing until
it's finished with an append transaction.[*]

The conventional way to achieve this is through sigprocmask(), which is
available in perl in the standard POSIX module.

This is implemented by this patch.  One important consequence of it is
that the signal handlers won't be unconditionally set to SIG_DFL anymore
upon the first invocation of rev_map_set() as they used to.  As a
result, the signals ignored by git-svn parent will remain ignored;
otherwise the behavior remains the same.

This patch paves the way to ignoring SIGPIPE throughout git-svn which
will be done in the followup patch.

[*] Deferring signals is not enough to ensure the database consistency:
the program may die on SIGKILL or power loss, run out of disk space,
etc.  However that's a separate issue that this patch doesn't address.

Signed-off-by: Roman Kagan <rkagan@mail.ru>
Acked-by: Eric Wong <normalperson@yhbt.net>
12 years agoRelNotes: the fourth batch of topics graduated to 'master'
Junio C Hamano [Mon, 23 Apr 2012 20:30:22 +0000 (13:30 -0700)] 
RelNotes: the fourth batch of topics graduated to 'master'

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'bw/test-fix-grep-gnuism'
Junio C Hamano [Mon, 23 Apr 2012 20:02:15 +0000 (13:02 -0700)] 
Merge branch 'bw/test-fix-grep-gnuism'

Fix two places that were the only place in the test suite that gave "a\+"
to platform grep and expected it to mean one or more "a", which is a
blatant GNUism.

* bw/test-fix-grep-gnuism:
  t9400: fix gnuism in grep

12 years agoMerge branch 'rj/submodule-mswin-path'
Junio C Hamano [Mon, 23 Apr 2012 20:01:49 +0000 (13:01 -0700)] 
Merge branch 'rj/submodule-mswin-path'

By Ramsay Jones
* rj/submodule-mswin-path:
  git-submodule.sh: Don't use $path variable in eval_gettext string

12 years agoMerge branch 'rj/sh-setup-mswin-pwd'
Junio C Hamano [Mon, 23 Apr 2012 20:01:46 +0000 (13:01 -0700)] 
Merge branch 'rj/sh-setup-mswin-pwd'

By Ramsay Jones
* rj/sh-setup-mswin-pwd:
  git-sh-setup.sh: Add an pwd() function for MinGW

12 years agoMerge branch 'rj/mingw-isguid'
Junio C Hamano [Mon, 23 Apr 2012 20:01:42 +0000 (13:01 -0700)] 
Merge branch 'rj/mingw-isguid'

By Ramsay Jones
* rj/mingw-isguid:
  compat/mingw.h: Set S_ISUID to prevent a fast-import test failure

12 years agoMerge branch 'jn/fast-import-doc'
Junio C Hamano [Mon, 23 Apr 2012 20:01:32 +0000 (13:01 -0700)] 
Merge branch 'jn/fast-import-doc'

By Jonathan Nieder
* jn/fast-import-doc:
  fast-import doc: cat-blob and ls responses need to be consumed quickly

12 years agoMerge branch 'jn/more-i18ncmp'
Junio C Hamano [Mon, 23 Apr 2012 20:01:28 +0000 (13:01 -0700)] 
Merge branch 'jn/more-i18ncmp'

By Jonathan Nieder
* jn/more-i18ncmp:
  test: am of empty patch should not succeed
  test: use test_i18ncmp for "Patch format detection failed" message
  test: do not rely on US English tracking-info messages

12 years agoMerge branch 'jl/maint-submodule-recurse-fetch'
Junio C Hamano [Mon, 23 Apr 2012 19:58:28 +0000 (12:58 -0700)] 
Merge branch 'jl/maint-submodule-recurse-fetch'

"git fetch" that recurses into submodules on demand did not check if
it needs to go into submodules when non branches (most notably, tags)
are fetched.

By Jens Lehmann
* jl/maint-submodule-recurse-fetch:
  submodules: recursive fetch also checks new tags for submodule commits

12 years agoMerge branch 'jc/maint-blame-minimal'
Junio C Hamano [Mon, 23 Apr 2012 19:58:22 +0000 (12:58 -0700)] 
Merge branch 'jc/maint-blame-minimal'

"git blame" started missing quite a few changes from the origin since we
stopped using the diff minimalization by default in v1.7.2 era.

* jc/maint-blame-minimal:
  blame: accept --need-minimal

12 years agoMerge branch 'lp/maint-diff-three-dash-with-graph'
Junio C Hamano [Mon, 23 Apr 2012 19:57:20 +0000 (12:57 -0700)] 
Merge branch 'lp/maint-diff-three-dash-with-graph'

"log -p --graph" used with "--stat" had a few formatting error.

By Lucian Poston
* lp/maint-diff-three-dash-with-graph:
  t4202: add test for "log --graph --stat -p" separator lines
  log --graph: fix break in graph lines
  log --graph --stat: three-dash separator should come after graph lines

12 years agoMerge branch 'rs/commit-list-sort-in-batch'
Junio C Hamano [Mon, 23 Apr 2012 19:52:54 +0000 (12:52 -0700)] 
Merge branch 'rs/commit-list-sort-in-batch'

Setting up a revision traversal with many starting points was inefficient
as these were placed in a date-order priority queue one-by-one.

By René Scharfe (3) and Junio C Hamano (1)
* rs/commit-list-sort-in-batch:
  mergesort: rename it to llist_mergesort()
  revision: insert unsorted, then sort in prepare_revision_walk()
  commit: use mergesort() in commit_list_sort_by_date()
  add mergesort() for linked lists

12 years agoMerge branch 'jh/apply-free-patch'
Junio C Hamano [Mon, 23 Apr 2012 19:52:18 +0000 (12:52 -0700)] 
Merge branch 'jh/apply-free-patch'

Valgrind reports quite a lot of discarded memory inside apply.
Fix them, audit and document the buffer ownership rules.

By Junio C Hamano (8) and Jared Hance (1)
* jh/apply-free-patch:
  apply: document buffer ownership rules across functions
  apply: tighten constness of line buffer
  apply: drop unused macro
  apply: free unused fragments for submodule patch
  apply: free patch->result
  apply: release memory for fn_table
  apply: free patch->{def,old,new}_name fields
  apply: rename free_patch() to free_patch_list()
  apply: do not leak patches and fragments

12 years agoMerge branch 'sl/test-wc-l-line-count'
Junio C Hamano [Mon, 23 Apr 2012 19:43:10 +0000 (12:43 -0700)] 
Merge branch 'sl/test-wc-l-line-count'

By Stefano Lattarini
* sl/test-wc-l-line-count:
  tests: modernise style: more uses of test_line_count

12 years agoMerge branch 'jn/debian-customizes-default-editor'
Junio C Hamano [Mon, 23 Apr 2012 19:41:15 +0000 (12:41 -0700)] 
Merge branch 'jn/debian-customizes-default-editor'

Make it easier for distros to document custom pager and editor they
used when building their binary releases in "git var" documentation.

By Jonathan Nieder
* jn/debian-customizes-default-editor:
  var doc: advertise current DEFAULT_PAGER and DEFAULT_EDITOR settings
  var doc: default editor and pager are configurable at build time

12 years agoMerge branch 'rl/show-empty-prefix'
Junio C Hamano [Mon, 23 Apr 2012 19:40:08 +0000 (12:40 -0700)] 
Merge branch 'rl/show-empty-prefix'

"git rev-parse --show-prefix" emitted nothing when run at the
top-level of the working tree, while "git rev-parse --show-cdup" gave
an empty line.  Make them consistent.

By Ross Lagerwall
* rl/show-empty-prefix:
  rev-parse --show-prefix: add in trailing newline

12 years agoMerge branch 'pw/git-p4'
Junio C Hamano [Mon, 23 Apr 2012 19:40:02 +0000 (12:40 -0700)] 
Merge branch 'pw/git-p4'

By Pete Wyckoff
* pw/git-p4:
  git p4: use "git p4" directly in tests
  git p4: update name in script
  git-p4: move to toplevel

12 years agoMerge branch 'ms/remote-usage-string'
Junio C Hamano [Mon, 23 Apr 2012 19:39:17 +0000 (12:39 -0700)] 
Merge branch 'ms/remote-usage-string'

Adds some subcommands that were not listed in "git remote --help"
usage strings.

As an independent follow-up, we may want to rethink how the overall
usage string and subcommand usage strings are maintained.

By Michael Schubert
* ms/remote-usage-string:
  remote: update builtin usage

12 years agoMerge branch 'jk/rebase-i-submodule-conflict-only'
Junio C Hamano [Mon, 23 Apr 2012 19:39:04 +0000 (12:39 -0700)] 
Merge branch 'jk/rebase-i-submodule-conflict-only'

Giving "--continue" to a conflicted "rebase -i" session skipped a commit
that only results in changes to submodules.

By John Keeping
* jk/rebase-i-submodule-conflict-only:
  rebase -i continue: don't skip commits that only change submodules

12 years agoRelNotes: the third batch
Junio C Hamano [Fri, 20 Apr 2012 22:58:40 +0000 (15:58 -0700)] 
RelNotes: the third batch

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'js/spawn-via-shell-path-fix'
Junio C Hamano [Fri, 20 Apr 2012 22:51:18 +0000 (15:51 -0700)] 
Merge branch 'js/spawn-via-shell-path-fix'

Mops up an unfortunate fallout from bw/spawn-via-shell-path topic.

By Johannes Sixt
* js/spawn-via-shell-path-fix:
  Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows

12 years agoMerge branch 'ct/advise-push-default'
Junio C Hamano [Fri, 20 Apr 2012 22:50:37 +0000 (15:50 -0700)] 
Merge branch 'ct/advise-push-default'

Break down the cases in which "git push" fails due to non-ff into
three categories, and give separate advise messages for each case.

By Christopher Tiwald (2) and Jeff King (1)
* ct/advise-push-default:
  Fix httpd tests that broke when non-ff push advice changed
  clean up struct ref's nonfastforward field
  push: Provide situational hints for non-fast-forward errors

12 years agoMerge branch 'bw/submodule-sed-solaris'
Junio C Hamano [Fri, 20 Apr 2012 22:50:13 +0000 (15:50 -0700)] 
Merge branch 'bw/submodule-sed-solaris'

By Ben Walton
* bw/submodule-sed-solaris:
  Avoid bug in Solaris xpg4/sed as used in submodule

12 years agoMerge branch 'jk/run-command-eacces'
Junio C Hamano [Fri, 20 Apr 2012 22:50:03 +0000 (15:50 -0700)] 
Merge branch 'jk/run-command-eacces'

When PATH contains an unreadable directory, alias expansion code did not
kick in, and failed with an error that said "git-subcmd" was not found.

By Jeff King (1) and Ramsay Jones (1)
* jk/run-command-eacces:
  run-command: treat inaccessible directories as ENOENT
  compat/mingw.[ch]: Change return type of exec functions to int

12 years agoMerge branch 'jc/push-upstream-sanity'
Junio C Hamano [Fri, 20 Apr 2012 22:49:51 +0000 (15:49 -0700)] 
Merge branch 'jc/push-upstream-sanity'

Fix broken 'push to upstream' implementation.  "git push $there" without
refspec, when the current branch is set to push to a remote different from
$there, used to push to $there using the upstream information to a remote
unreleated to $there.

* jc/push-upstream-sanity:
  push: error out when the "upstream" semantics does not make sense

12 years agoMerge branch 'jc/am-report-3way'
Junio C Hamano [Fri, 20 Apr 2012 22:49:37 +0000 (15:49 -0700)] 
Merge branch 'jc/am-report-3way'

When "git am -3" needs to fall back to an application to a synthesized
preimage followed by a 3-way merge, the paths that needed such treatment
are now reported to the end user, so that the result in them can be
eyeballed with extra care.

* jc/am-report-3way:
  am -3: list the paths that needed 3-way fallback

12 years agoMerge branch 'jb/am-include'
Junio C Hamano [Fri, 20 Apr 2012 22:49:15 +0000 (15:49 -0700)] 
Merge branch 'jb/am-include'

"git am" learned the "--include" option, which is an opposite of existing
the "--exclude" option.

By Johannes Berg
* jb/am-include:
  am: support --include option

12 years agoMerge branch 'jc/fmt-merge-msg-people'
Junio C Hamano [Fri, 20 Apr 2012 22:48:33 +0000 (15:48 -0700)] 
Merge branch 'jc/fmt-merge-msg-people'

The "fmt-merge-msg" command learns to list the primary contributors
involved in the side topic you are merging.

* jc/fmt-merge-msg-people:
  fmt-merge-msg: show those involved in a merged series

12 years agot9400: fix gnuism in grep
Junio C Hamano [Thu, 19 Apr 2012 20:05:26 +0000 (13:05 -0700)] 
t9400: fix gnuism in grep

Using "\+" in "grep" and expecting that it means one or more
is a GNUism.  Spell it in a dumb and portable way.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogit-sh-setup.sh: Add an pwd() function for MinGW
Ramsay Jones [Tue, 17 Apr 2012 18:48:39 +0000 (19:48 +0100)] 
git-sh-setup.sh: Add an pwd() function for MinGW

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Acked-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogit-submodule.sh: Don't use $path variable in eval_gettext string
Ramsay Jones [Tue, 17 Apr 2012 18:00:58 +0000 (19:00 +0100)] 
git-submodule.sh: Don't use $path variable in eval_gettext string

The eval_gettext (and eval_gettextln) i18n shell functions call
git-sh-i18n--envsubst to process the variable references in the
string parameter. Unfortunately, environment variables are case
insensitive on windows, which leads to failure on cygwin when
eval_gettext exports $path.

Commit df599e9 (Windows: teach getenv to do a case-sensitive search,
06-06-2011) attempts to solve this problem on MinGW by overriding
the system getenv() function to allow git-sh-i18n--envsubst to read
$path rather than $PATH from the environment. However, this commit
does not address cygwin at all and, furthermore, does not fix all
problems on MinGW.

In particular, when executing test #38 in t7400-submodule-basic.sh,
an 'git-sh-i18n-envsubst.exe - Unable To Locate Component' dialog
pops up saying that the application "failed to start because
libiconv2.dll was not found." After studying the voluminous trace
output from the process monitor, it is clear that the system is
attempting to use $path, rather than $PATH, to search for the DLL
file. (Note that, after dismissing the dialog, the test passes
anyway!)

As an alternative, we finesse the problem by renaming the $path
variable to $sm_path (submodule path). This fixes the problem on
MinGW along with all test failures on cygwin (t7400.{7,32,34},
t7406.3 and t7407.{2,6}). We note that the foreach subcommand
provides $path to user scripts (ie it is part of the API), so we
can't simply rename it to $sm_path.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Acked-by: Jens Lehmann <Jens.Lehmann@web.de>
Tested-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocompat/mingw.h: Set S_ISUID to prevent a fast-import test failure
Ramsay Jones [Tue, 17 Apr 2012 18:00:04 +0000 (19:00 +0100)] 
compat/mingw.h: Set S_ISUID to prevent a fast-import test failure

The current t9300-fast-import.sh test number 62 ("L: nested tree
copy does not corrupt deltas") was introduced in commit 9a0edb79
("fast-import: add a test for tree delta base corruption",
15-08-2011). A fix for the demonstrated problem was introduced
by commit 8fb3ad76 ("fast-import: prevent producing bad delta",
15-08-2011). However, this fix didn't work on MinGW and so this
test has always failed on MinGW.

Part of the solution in commit 8fb3ad76 was to add an NO_DELTA
preprocessor constant which was defined as follows:

  +/*
  + * We abuse the setuid bit on directories to mean "do not delta".
  + */
  +#define NO_DELTA S_ISUID
  +

Unfortunately, the S_ISUID constant on MinGW is defined as zero.

In order to fix the problem, we simply alter the definition of
S_ISUID in the mingw header file to a more appropriate value.
Also, we take the opportunity to similarly define S_ISGID and
S_ISVTX.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agomergesort: rename it to llist_mergesort()
Junio C Hamano [Tue, 17 Apr 2012 18:07:01 +0000 (11:07 -0700)] 
mergesort: rename it to llist_mergesort()

Even though the function is generic enough, <anything>sort() inherits
connotations from the standard function qsort() that sorts an array.
Rename it to llist_mergesort() and describe the external interface in
its header file.

This incidentally avoids name clashes with mergesort() some platforms
declare in, and contaminate user namespace with, their <stdlib.h>.

Reported-by: Brian Gernhardt
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoDo not use SHELL_PATH from build system in prepare_shell_cmd on Windows
Johannes Sixt [Tue, 17 Apr 2012 07:03:21 +0000 (09:03 +0200)] 
Do not use SHELL_PATH from build system in prepare_shell_cmd on Windows

The recent change to use SHELL_PATH instead of "sh" to spawn shell commands
is not suited for Windows:

- The default setting, "/bin/sh", does not work when git has to run the
  shell because it is a POSIX style path, but not a proper Windows style
  path.

- If it worked, it would hard-code a position in the files system where
  the shell is expected, making git (more precisely, the POSIX toolset that
  is needed alongside git) non-relocatable. But we cannot sacrifice
  relocatability on Windows.

- Apart from that, even though the Makefile leaves SHELL_PATH set to
  "/bin/sh" for the Windows builds, the build system passes a mangled path
  to the compiler, and something like "D:/Src/msysgit/bin/sh" is used,
  which is doubly bad because it points to where /bin/sh resolves to on
  the system where git was built.

- Finally, the system's CreateProcess() function that is used under
  mingw.c's hood does not work with forward slashes and cannot find the
  shell.

Undo the earlier change on Windows.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoRelNotes: the second batch of topics graduated to 'master'
Junio C Hamano [Mon, 16 Apr 2012 19:55:11 +0000 (12:55 -0700)] 
RelNotes: the second batch of topics graduated to 'master'

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jk/add-p-skip-conflicts'
Junio C Hamano [Mon, 16 Apr 2012 19:43:36 +0000 (12:43 -0700)] 
Merge branch 'jk/add-p-skip-conflicts'

Excludes conflicted paths from "add -p" processing, as it is not prepared
to handle them.

By Jeff King
* jk/add-p-skip-conflicts:
  add--interactive: ignore unmerged entries in patch mode

12 years agoMerge branch 'jc/commit-unedited-template'
Junio C Hamano [Mon, 16 Apr 2012 19:43:07 +0000 (12:43 -0700)] 
Merge branch 'jc/commit-unedited-template'

When "git commit --template F" errors out because the user did not touch
the message, it claimed that it aborts due to "empty message", which was
utterly wrong.

By Junio C Hamano (4) and Adam Monsen (1)
* jc/commit-unedited-template:
  Documentation/git-commit: rephrase the "initial-ness" of templates
  git-commit.txt: clarify -t requires editing message
  commit: rephrase the error when user did not touch templated log message
  commit: do not trigger bogus "has templated message edited" check
  t7501: test the right kind of breakage

12 years agoMerge branch 'bw/spawn-via-shell-path'
Junio C Hamano [Mon, 16 Apr 2012 19:42:54 +0000 (12:42 -0700)] 
Merge branch 'bw/spawn-via-shell-path'

"sh" on the user's PATH may be utterly broken on some systems;
consistently use SHELL_PATH even from inside run-command API.

By Ben Walton
* bw/spawn-via-shell-path:
  Use SHELL_PATH from build system in run_command.c:prepare_shell_cmd

12 years agoMerge branch 'wk/gitweb-snapshot-use-if-modified-since'
Junio C Hamano [Mon, 16 Apr 2012 19:42:48 +0000 (12:42 -0700)] 
Merge branch 'wk/gitweb-snapshot-use-if-modified-since'

Makes 'snapshot' request to "gitweb" honor If-Modified-Since: header,
based on the commit date.

By W. Trevor King
* wk/gitweb-snapshot-use-if-modified-since:
  gitweb: add If-Modified-Since handling to git_snapshot().
  gitweb: refactor If-Modified-Since handling
  gitweb: add `status` headers to git_feed() responses.

12 years agoMerge branch 'jk/http-backend-keep-committer-ident-env'
Junio C Hamano [Mon, 16 Apr 2012 19:42:40 +0000 (12:42 -0700)] 
Merge branch 'jk/http-backend-keep-committer-ident-env'

The smart-http backend used to always override GIT_COMMITTER_* variables
with REMOTE_USER and REMOTE_ADDR.

By Jeff King
* jk/http-backend-keep-committer-ident-env:
  http-backend: respect existing GIT_COMMITTER_* variables

12 years agoMerge branch 'sl/autoconf'
Junio C Hamano [Mon, 16 Apr 2012 19:42:29 +0000 (12:42 -0700)] 
Merge branch 'sl/autoconf'

Updates our configure.ac to follow a better "autoconf" style.

By Stefano Lattarini
* sl/autoconf:
  configure: be more idiomatic
  configure: avoid some code repetitions thanks to m4_{push,pop}def
  configure: move definitions of private m4 macros before AC_INIT invocation

12 years agoMerge branch 'jk/branch-quiet'
Junio C Hamano [Mon, 16 Apr 2012 19:42:22 +0000 (12:42 -0700)] 
Merge branch 'jk/branch-quiet'

Even with "-q"uiet option, "checkout" used to report setting up tracking.
Also "branch" learns "-q"uiet option to squelch informational message.

By Jeff King
* jk/branch-quiet:
  teach "git branch" a --quiet option
  checkout: suppress tracking message with "-q"

12 years agoMerge branch 'rs/combine-diff-zero-context-at-the-beginning'
Junio C Hamano [Mon, 16 Apr 2012 19:41:59 +0000 (12:41 -0700)] 
Merge branch 'rs/combine-diff-zero-context-at-the-beginning'

Fixes an age old corner case bug in combine diff (only triggered with -U0
and the hunk at the beginning of the file needs to be shown).

By René Scharfe
* rs/combine-diff-zero-context-at-the-beginning:
  combine-diff: fix loop index underflow

12 years agoMerge branch 'jk/diff-no-rename-empty'
Junio C Hamano [Mon, 16 Apr 2012 19:41:49 +0000 (12:41 -0700)] 
Merge branch 'jk/diff-no-rename-empty'

Forbids rename detection logic from matching two empty files as renames
during merge-recursive to prevent mismerges.

By Jeff King
* jk/diff-no-rename-empty:
  merge-recursive: don't detect renames of empty files
  teach diffcore-rename to optionally ignore empty content
  make is_empty_blob_sha1 available everywhere
  drop casts from users EMPTY_TREE_SHA1_BIN

12 years agoMerge branch 'jc/maint-clean-nested-worktree-in-subdir'
Junio C Hamano [Mon, 16 Apr 2012 19:40:22 +0000 (12:40 -0700)] 
Merge branch 'jc/maint-clean-nested-worktree-in-subdir'

"git clean -d -f" (not "-d -f -f") is supposed to protect nested working
trees of independent git repositories that exist in the current project
working tree from getting removed, but the protection applied only to such
working trees that are at the top-level of the current project by mistake.

* jc/maint-clean-nested-worktree-in-subdir:
  clean: preserve nested git worktree in subdirectories

12 years agoMerge branch 'rs/unpack-trees-leakfix'
Junio C Hamano [Mon, 16 Apr 2012 19:39:58 +0000 (12:39 -0700)] 
Merge branch 'rs/unpack-trees-leakfix'

By René Scharfe
* rs/unpack-trees-leakfix:
  unpack-trees: plug minor memory leak
  unpack-trees: don't perform any index operation if we're not merging

12 years agoMerge branch 'nl/rebase-i-cheat-sheet'
Junio C Hamano [Mon, 16 Apr 2012 19:39:41 +0000 (12:39 -0700)] 
Merge branch 'nl/rebase-i-cheat-sheet'

* nl/rebase-i-cheat-sheet:
  rebase -i: remind that the lines are top-to-bottom

12 years agoRelNotes: the first batch of topics graduated to 'master'
Junio C Hamano [Mon, 16 Apr 2012 05:59:31 +0000 (22:59 -0700)] 
RelNotes: the first batch of topics graduated to 'master'

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'da/difftool-test'
Junio C Hamano [Mon, 16 Apr 2012 05:52:04 +0000 (22:52 -0700)] 
Merge branch 'da/difftool-test'

Makes sure "difftool" options can be given in any order.

By David Aguilar
* da/difftool-test:
  t7800: Test difftool passing arguments to diff

12 years agoMerge branch 'zj/test-cred-helper-nicer-prove'
Junio C Hamano [Mon, 16 Apr 2012 05:51:56 +0000 (22:51 -0700)] 
Merge branch 'zj/test-cred-helper-nicer-prove'

Minor improvement to t0303.

By Zbigniew Jędrzejewski-Szmek
* zj/test-cred-helper-nicer-prove:
  t0303: resurrect commit message as test documentation
  t0303: immediately bail out w/o GIT_TEST_CREDENTIAL_HELPER

12 years agoMerge branch 'jh/notes-merge-in-git-dir-worktree'
Junio C Hamano [Mon, 16 Apr 2012 05:51:44 +0000 (22:51 -0700)] 
Merge branch 'jh/notes-merge-in-git-dir-worktree'

Running "notes merge --commit" failed to perform correctly when run
from any directory inside $GIT_DIR/.  When "notes merge" stops with
conflicts, $GIT_DIR/NOTES_MERGE_WORKTREE is the place a user edits
to resolve it.

By Johan Herland (3) and Junio C Hamano (1)
* jh/notes-merge-in-git-dir-worktree:
  notes-merge: Don't remove .git/NOTES_MERGE_WORKTREE; it may be the user's cwd
  notes-merge: use opendir/readdir instead of using read_directory()
  t3310: illustrate failure to "notes merge --commit" inside $GIT_DIR/
  remove_dir_recursively(): Add flag for skipping removal of toplevel dir

12 years agoMerge branch 'tr/maint-word-diff-regex-sticky'
Junio C Hamano [Mon, 16 Apr 2012 05:51:34 +0000 (22:51 -0700)] 
Merge branch 'tr/maint-word-diff-regex-sticky'

The regexp configured with wordregex was incorrectly reused across files.

By Thomas Rast (2) and Johannes Sixt (1)
* tr/maint-word-diff-regex-sticky:
  diff: tweak a _copy_ of diff_options with word-diff
  diff: refactor the word-diff setup from builtin_diff_cmd
  t4034: diff.*.wordregex should not be "sticky" in --word-diff

12 years agoMerge branch 'jn/diffstat-tests'
Junio C Hamano [Mon, 16 Apr 2012 05:51:24 +0000 (22:51 -0700)] 
Merge branch 'jn/diffstat-tests'

Some tests checked the "diff --stat" output when they do not have to,
which unnecessarily made things harder to verify under GETTEXT_POISON.

By Jonathan Nieder
* jn/diffstat-tests:
  diffstat summary line varies by locale: miscellany
  test: use numstat instead of diffstat in binary-diff test
  test: use --numstat instead of --stat in "git stash show" tests
  test: test cherry-pick functionality and output separately
  test: modernize funny-names test style
  test: use numstat instead of diffstat in funny-names test
  test: use test_i18ncmp when checking --stat output

12 years agoMerge branch 'jc/diff-algo-cleanup'
Junio C Hamano [Mon, 16 Apr 2012 05:51:14 +0000 (22:51 -0700)] 
Merge branch 'jc/diff-algo-cleanup'

Resurrects the preparatory clean-up patches from another topic that was
discarded, as this would give a saner foundation to build on diff.algo
configuration option series.

* jc/diff-algo-cleanup:
  xdiff: PATIENCE/HISTOGRAM are not independent option bits
  xdiff: remove XDL_PATCH_* macros

12 years agoMerge branch 'jc/commit-hook-authorship'
Junio C Hamano [Mon, 16 Apr 2012 05:51:01 +0000 (22:51 -0700)] 
Merge branch 'jc/commit-hook-authorship'

"git commit --author=$name" did not tell the name that was being recorded
in the resulting commit to hooks, even though it does do so when the end
user overrode the authorship via the "GIT_AUTHOR_NAME" environment
variable.

* jc/commit-hook-authorship:
  commit: pass author/committer info to hooks
  t7503: does pre-commit-hook learn authorship?
  ident.c: add split_ident_line() to parse formatted ident line

12 years agoMerge branch 'nd/stream-more'
Junio C Hamano [Mon, 16 Apr 2012 05:50:38 +0000 (22:50 -0700)] 
Merge branch 'nd/stream-more'

Use API to read blob data in smaller chunks in more places to reduce the
memory footprint.

By Nguyễn Thái Ngọc Duy (6) and Junio C Hamano (1)
* nd/stream-more:
  update-server-info: respect core.bigfilethreshold
  fsck: use streaming API for writing lost-found blobs
  show: use streaming API for showing blobs
  parse_object: avoid putting whole blob in core
  cat-file: use streaming API to print blobs
  Add more large blob test cases
  streaming: make streaming-write-entry to be more reusable

12 years agomerge overwrites unstaged changes in renamed file
Clemens Buchacher [Sat, 14 Apr 2012 23:15:17 +0000 (01:15 +0200)] 
merge overwrites unstaged changes in renamed file

Signed-off-by: Clemens Buchacher <drizzd@aon.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agofast-import doc: cat-blob and ls responses need to be consumed quickly
Jonathan Nieder [Wed, 11 Apr 2012 21:25:01 +0000 (16:25 -0500)] 
fast-import doc: cat-blob and ls responses need to be consumed quickly

If fast-import's command pipe and the frontend's cat-blob/ls response
pipe are both filled, there can be a deadlock.  Luckily all existing
frontends consume any pending cat-blob/ls responses completely before
writing the next command.

Document the requirements so future frontend authors and users can be
spared from the problem, too.  It is not always easy to catch that
kind of bug by testing.

To set the scene, add some words of explanation to help the novice
understand that "cat-blob" and "ls" output are meant for consumption
by the frontend.

Reported-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agosubmodules: recursive fetch also checks new tags for submodule commits
Jens Lehmann [Fri, 13 Apr 2012 16:25:16 +0000 (18:25 +0200)] 
submodules: recursive fetch also checks new tags for submodule commits

Since 88a21979c (fetch/pull: recurse into submodules when necessary) all
fetched commits are examined if they contain submodule changes (unless
configuration or command line options inhibit that). If a newly recorded
submodule commit is not present in the submodule, a fetch is run inside
it to download that commit.

Checking new refs was done in an else branch where it wasn't executed for
tags. This normally isn't a problem because tags are only fetched with
the branches they live on, then checking the new commits in the fetched
branches for submodule commits will also process all tags. But when a
specific tag is fetched (or the refspec contains refs/tags/) commits only
reachable by tags won't be searched for submodule commits, which is a bug.

Fix that by moving the code outside the if/else construct to handle new
tags just like any other ref. The performance impact of adding tags that
most of the time lie on a branch which is checked anyway for new submodule
commit should be minimal, as since 6859de4 (fetch: avoid quadratic loop
checking for updated submodules) all ref-tips are collected first and then
fed to a single rev-list.

Spotted-by: Jeff King <peff@peff.net>
Signed-off-by: Jens Lehmann <Jens.Lehmann@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest: am of empty patch should not succeed
Jonathan Nieder [Sat, 14 Apr 2012 04:48:13 +0000 (23:48 -0500)] 
test: am of empty patch should not succeed

The "git am empty" test uses the construct

git am empty-file && false || :

which unconditionally returns true.  Use test_must_fail instead, which
also has the benefit of noticing if "git am" has segfaulted.

While at it, tighten the test to check that the diagnostic appears on
stderr and not stdout.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest: use test_i18ncmp for "Patch format detection failed" message
Jonathan Nieder [Sat, 14 Apr 2012 04:46:18 +0000 (23:46 -0500)] 
test: use test_i18ncmp for "Patch format detection failed" message

v1.7.8.5~2 (am: don't infloop for an empty input file, 2012-02-25)
added a check for the human-readable message "Patch format detection
failed." but we forgot to suppress that check when running tests with
git configured to write output in another language.

Noticed by running tests with GETTEXT_POISON=YesPlease.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotest: do not rely on US English tracking-info messages
Jonathan Nieder [Sat, 14 Apr 2012 04:45:31 +0000 (23:45 -0500)] 
test: do not rely on US English tracking-info messages

When v1.7.9.2~28^2 (2012-02-02) marked "Your branch is behind" and
friends for translation, it forgot to adjust tests not to check those
messages when tests are being run with git configured to write its
output in another language.

With this patch applied, t2020 and t6040 pass again with
GETTEXT_POISON=YesPlease.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Explained-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoFix httpd tests that broke when non-ff push advice changed
Christopher Tiwald [Thu, 12 Apr 2012 17:56:28 +0000 (13:56 -0400)] 
Fix httpd tests that broke when non-ff push advice changed

Signed-off-by: Christopher Tiwald <christiwald@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoapply: document buffer ownership rules across functions
Junio C Hamano [Wed, 11 Apr 2012 21:43:48 +0000 (14:43 -0700)] 
apply: document buffer ownership rules across functions

In general, the private functions in this file were not very
much documented; even though what each of them do is reasonably
self explanatory, the ownership rules for various buffers and
data structures were not very obvious.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoapply: tighten constness of line buffer
Junio C Hamano [Wed, 11 Apr 2012 21:41:42 +0000 (14:41 -0700)] 
apply: tighten constness of line buffer

These point into a single line in the patch text we read from
the input, and they are not used to modify it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoapply: drop unused macro
Junio C Hamano [Wed, 11 Apr 2012 21:38:31 +0000 (14:38 -0700)] 
apply: drop unused macro

CHUNKSIZE is no longer used.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoblame: accept --need-minimal
Junio C Hamano [Wed, 11 Apr 2012 20:08:08 +0000 (13:08 -0700)] 
blame: accept --need-minimal

Between v1.7.1 and v1.7.2, 582aa00bdffb switched the default "diff"
invocation not to use XDF_NEED_MINIMAL, but this breaks "git blame"
rather badly.

Allow the command line option to ask for an extra careful matching.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoKick off post 1.7.10 cycle
Junio C Hamano [Wed, 11 Apr 2012 19:17:17 +0000 (12:17 -0700)] 
Kick off post 1.7.10 cycle

I tentatively named the release notes "1.7.11" but this may have to
be renamed to "1.8" or some other name later.  Let's see how well
we would do during this cycle.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogitweb: Fix unintended "--no-merges" for regular Atom feed
Sebastian Pipping [Wed, 4 Apr 2012 12:25:44 +0000 (14:25 +0200)] 
gitweb: Fix unintended "--no-merges" for regular Atom feed

The print_feed_meta() subroutine generates links for feeds with and
without merges, in RSS and Atom formats.  However because %href_params
was not properly reset, it generated links with "--no-merges" for all
except the very first link.

Before:
<link rel="alternate" title="[..] - Atom feed" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />
<link rel="alternate" title="[..] - Atom feed (no merges)" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />

After:
<link rel="alternate" title="[..] - Atom feed" href="/?p=.git;a=atom" type="application/atom+xml" />
<link rel="alternate" title="[..] - Atom feed (no merges)" href="/?p=.git;a=atom;opt=--no-merges" type="application/atom+xml" />

Signed-off-by: Sebastian Pipping <sebastian@pipping.org>
Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotests: modernise style: more uses of test_line_count
Stefano Lattarini [Wed, 11 Apr 2012 11:24:01 +0000 (13:24 +0200)] 
tests: modernise style: more uses of test_line_count

Prefer:

  test_line_count <OP> COUNT FILE

over:

  test $(wc -l <FILE) <OP> COUNT

(or similar usages) in several tests.

Signed-off-by: Stefano Lattarini <stefano.lattarini@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorevision: insert unsorted, then sort in prepare_revision_walk()
René Scharfe [Sat, 31 Mar 2012 22:11:01 +0000 (00:11 +0200)] 
revision: insert unsorted, then sort in prepare_revision_walk()

Speed up prepare_revision_walk() by adding commits without sorting
to the commit_list and at the end sort the list in one go.  Thanks
to mergesort() working behind the scenes, this is a lot faster for
large numbers of commits than the current insert sort.

Also introduce and use commit_list_reverse(), to keep the ordering
of commits sharing the same commit date unchanged.  That's because
commit_list_insert_by_date() sorts commits with descending date,
but adds later entries with the same date entries last, while
commit_list_insert() always inserts entries at the top.  The
following commit_list_sort_by_date() keeps the order of entries
sharing the same date.

Jeff's test case, in a repo with lots of refs, was to run:

  # make a new commit on top of HEAD, but not yet referenced
  sha1=`git commit-tree HEAD^{tree} -p HEAD </dev/null`

  # now do the same "connected" test that receive-pack would do
  git rev-list --objects $sha1 --not --all

With a git.git with a ref for each revision, master needs (best of
five):

real 0m2.210s
user 0m2.188s
sys 0m0.016s

And with this patch:

real 0m0.480s
user 0m0.456s
sys 0m0.020s

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocommit: use mergesort() in commit_list_sort_by_date()
René Scharfe [Sat, 31 Mar 2012 22:10:39 +0000 (00:10 +0200)] 
commit: use mergesort() in commit_list_sort_by_date()

Replace the insertion sort in commit_list_sort_by_date() with a
call to the generic mergesort function.  This sets the stage for
using commit_list_sort_by_date() for larger lists, as shown in
the next patch.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoadd mergesort() for linked lists
René Scharfe [Sat, 31 Mar 2012 22:10:11 +0000 (00:10 +0200)] 
add mergesort() for linked lists

This adds a generic bottom-up mergesort implementation for singly linked
lists.  It was inspired by Simon Tatham's webpage on the topic[1], but
not so much by his implementation -- for no good reason, really, just a
case of NIH.

[1] http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agounpack-trees: plug minor memory leak
René Scharfe [Tue, 6 Mar 2012 19:37:23 +0000 (20:37 +0100)] 
unpack-trees: plug minor memory leak

The allocations made by unpack_nondirectories() using create_ce_entry()
are never freed.

In the non-merge case, we duplicate them using add_entry() and later
only look at the first allocated element (src[0]), perhaps even only
by mistake.  Split out the actual addition from add_entry() into the
new helper do_add_entry() and call this non-duplicating function
instead of add_entry() to avoid the leak.

Valgrind reports this for the command "git archive v1.7.9" without
the patch:

  ==13372== LEAK SUMMARY:
  ==13372==    definitely lost: 230,986 bytes in 2,325 blocks
  ==13372==    indirectly lost: 0 bytes in 0 blocks
  ==13372==      possibly lost: 98 bytes in 1 blocks
  ==13372==    still reachable: 2,259,198 bytes in 3,243 blocks
  ==13372==         suppressed: 0 bytes in 0 blocks

And with the patch applied:

  ==13375== LEAK SUMMARY:
  ==13375==    definitely lost: 65 bytes in 1 blocks
  ==13375==    indirectly lost: 0 bytes in 0 blocks
  ==13375==      possibly lost: 0 bytes in 0 blocks
  ==13375==    still reachable: 2,364,417 bytes in 3,245 blocks
  ==13375==         suppressed: 0 bytes in 0 blocks

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agounpack-trees: don't perform any index operation if we're not merging
René Scharfe [Tue, 10 Apr 2012 18:55:58 +0000 (20:55 +0200)] 
unpack-trees: don't perform any index operation if we're not merging

src[0] points to the index entry in the merge case and to the first
tree to unpack in the non-merge case.  We only want to mark the index
entry, so check first if we're merging.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agodo_for_each_ref(): only iterate over the subtree that was requested
Michael Haggerty [Tue, 10 Apr 2012 05:30:27 +0000 (07:30 +0200)] 
do_for_each_ref(): only iterate over the subtree that was requested

If the base argument has a "/" chararacter, then only iterate over the
reference subdir whose name is the part up to the last "/".

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs: store references hierarchically
Michael Haggerty [Tue, 10 Apr 2012 05:30:26 +0000 (07:30 +0200)] 
refs: store references hierarchically

Store references hierarchically in a tree that matches the
pseudo-directory structure of the reference names.  Add a new kind of
ref_entry (with flag REF_DIR) to represent a whole subdirectory of
references.  Sort ref_dirs one subdirectory at a time.

NOTE: the dirs can now be sorted as a side-effect of other function
calls.  Therefore, it would be problematic to do something from a
each_ref_fn callback that could provoke the sorting of a directory
that is currently being iterated over (i.e., the directory containing
the entry that is being processed or any of its parents).

This is a bit far-fetched, because a directory is always sorted just
before being iterated over.  Therefore, read-only accesses cannot
trigger the sorting of a directory whose iteration has already
started.  But if a callback function would add a reference to a parent
directory of the reference in the iteration, then try to resolve a
reference under that directory, a re-sort could be triggered and cause
the iteration to work incorrectly.

Nevertheless...add a comment in refs.h warning against modifications
during iteration.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agosort_ref_dir(): simplify logic
Michael Haggerty [Tue, 10 Apr 2012 05:30:25 +0000 (07:30 +0200)] 
sort_ref_dir(): simplify logic

Use the more usual indexing idiom for clarity.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs.c: rename ref_array -> ref_dir
Michael Haggerty [Tue, 10 Apr 2012 05:30:24 +0000 (07:30 +0200)] 
refs.c: rename ref_array -> ref_dir

This purely textual change is in preparation for storing references
hierarchically, when the old ref_array structure will represent one
"directory" of references.  Rename functions that deal with this
structure analogously, and also rename the structure's "refs" member
to "entries".

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agostruct ref_entry: nest the value part in a union
Michael Haggerty [Tue, 10 Apr 2012 05:30:23 +0000 (07:30 +0200)] 
struct ref_entry: nest the value part in a union

This change is obviously silly by itself, but it is a step towards
adding a second member to the union.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocheck_refname_component(): return 0 for zero-length components
Michael Haggerty [Tue, 10 Apr 2012 05:30:22 +0000 (07:30 +0200)] 
check_refname_component(): return 0 for zero-length components

Return 0 (instead of -1) for zero-length components.  Move the
interpretation of zero-length components as illegal to
check_refname_format().

This will make it easier to extend check_refname_format() to also
check whether directory names are valid.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agofree_ref_entry(): new function
Michael Haggerty [Tue, 10 Apr 2012 05:30:21 +0000 (07:30 +0200)] 
free_ref_entry(): new function

Add a function free_ref_entry().  This function will become nontrivial
when ref_entry (soon) becomes polymorphic.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agonames_conflict(): simplify implementation
Michael Haggerty [Tue, 10 Apr 2012 05:30:19 +0000 (07:30 +0200)] 
names_conflict(): simplify implementation

Save a bunch of lines of code and a couple of strlen() calls.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorepack_without_ref(): reimplement using do_for_each_ref_in_array()
Michael Haggerty [Tue, 10 Apr 2012 05:30:17 +0000 (07:30 +0200)] 
repack_without_ref(): reimplement using do_for_each_ref_in_array()

It costs a bit of boilerplate, but it means that the function can be
ignorant of how cached refs are stored.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agodo_for_each_ref_in_arrays(): new function
Michael Haggerty [Tue, 10 Apr 2012 05:30:16 +0000 (07:30 +0200)] 
do_for_each_ref_in_arrays(): new function

Extract function do_for_each_ref_in_arrays() from do_for_each_ref().
The new function will be a useful building block for storing refs
hierarchically.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agodo_for_each_ref_in_array(): new function
Michael Haggerty [Tue, 10 Apr 2012 05:30:15 +0000 (07:30 +0200)] 
do_for_each_ref_in_array(): new function

Extract function do_for_each_ref_in_array() from do_for_each_ref().
The new function will be a useful building block for storing refs
hierarchically.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs: manage current_ref within do_one_ref()
Michael Haggerty [Tue, 10 Apr 2012 05:30:14 +0000 (07:30 +0200)] 
refs: manage current_ref within do_one_ref()

Set and clear current_ref within do_one_ref() instead of setting it
here and leaving it to somebody else to clear it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs.c: reorder definitions more logically
Michael Haggerty [Tue, 10 Apr 2012 05:30:13 +0000 (07:30 +0200)] 
refs.c: reorder definitions more logically

Reorder definitions in file: first check_refname_format() and helper
functions, then the functions for managing the ref_entry and ref_array
data structures, then ref_cache, then the more "business-logicky"
stuff.  No code is changed.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agovar doc: advertise current DEFAULT_PAGER and DEFAULT_EDITOR settings
Jonathan Nieder [Sat, 31 Mar 2012 08:44:53 +0000 (03:44 -0500)] 
var doc: advertise current DEFAULT_PAGER and DEFAULT_EDITOR settings

Document the default pager and editor chosen at compile time in the
git-var(1) manpage so users curious about what command _this_ copy of
git will fall back to when EDITOR, VISUAL, and PAGER are unset can
find the answer quickly.

In builds leaving those settings uncustomized, this patch makes the
manpage continue to say "usually vi" and "usually less" so the
formatted documentation is usable for a wide audience including users
of custom builds that change those settings.  If you would like your
copy of the docs to be less noncommittal, you will need to set
DEFAULT_PAGER=less and DEFAULT_EDITOR=vi explicitly.

Suggested-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>