Commit Graph

28703 Commits (27b5587c7610515832cf39cd0c3792e7655bdd9a)

Author SHA1 Message Date
Michael Haggerty 27b5587c76 free_ref_entry(): do not trigger reading of loose refs
Do not call get_ref_dir() from within free_ref_entry(), because that
triggers the reading of loose refs, only for them to be freed
immediately.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-20 15:10:49 -07:00
Junio C Hamano 663c1295d8 refs: fix find_containing_dir() regression
The function used to return NULL when asked to find the containing
directory for a ref that does not exist, allowing the caller to
omit iteration altogether. But a misconversion in an earlier change
"refs.c: extract function search_for_subdir()" started returning the
top-level directory entry, forcing callers to walk everything.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-04 09:17:50 -07:00
Michael Haggerty 28e6a34e25 refs: read loose references lazily
Instead of reading the whole directory of loose references the first
time any are needed, only read them on demand, one directory at a
time.

Use a new ref_entry flag bit REF_INCOMPLETE to indicate that the entry
represents a REF_DIR that hasn't been read yet.  Whenever any entries
from such a directory are needed, read all of the loose references
from that directory.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty 423a1afc0b read_loose_refs(): eliminate ref_cache argument
The ref_cache can now be read from the ref_dir.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty f006c42a11 struct ref_dir: store a reference to the enclosing ref_cache
This means that a directory ref_entry contains all of the information
needed by read_loose_refs().

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty 3f3aa1bc62 search_for_subdir(): return (ref_dir *) instead of (ref_entry *)
That is what all the callers want, so give it to them.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty d7826d5427 get_ref_dir(): add function for getting a ref_dir from a ref_entry
Convert all accesses of a ref_dir within a ref_entry to use this
function.  This function will later be responsible for reading loose
references from disk on demand.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty 1900b976a4 read_loose_refs(): rename function from get_ref_dir()
The new name better describes the function's purpose, and also makes
the old name available for a more suitable purpose.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:36 -07:00
Michael Haggerty d12229f532 refs: wrap top-level ref_dirs in ref_entries
Make it turtles all the way down.  This affects the loose and packed
fields of ref_cache instances.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:35 -07:00
Michael Haggerty 5fa0441844 find_containing_dir(): use strbuf in implementation of this function
Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:35 -07:00
Michael Haggerty 144e709004 bisect: copy filename string obtained from git_path()
Prevent the string from being overwritten by other callers of
git_path() and friends before we are done using it.

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-05-03 13:15:35 -07:00
Michael Haggerty 989c0e5d02 do_for_each_reflog(): use a strbuf to hold logfile name
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>
2012-05-03 13:15:35 -07:00
Michael Haggerty 93c603fcb7 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty 9f2fb4a373 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty f348ac923c 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty abc390989f 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty 66a3d20b8f 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty 72b64b44e7 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>
2012-05-03 13:15:09 -07:00
Michael Haggerty d5fdae6737 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>
2012-04-25 10:43:20 -07:00
Junio C Hamano 5e69491bf2 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
2012-04-24 14:40:28 -07:00
Junio C Hamano 419f2ecf78 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
2012-04-24 14:40:20 -07:00
Roman Kagan 8c3a534c50 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>
2012-04-24 09:42:08 +00:00
Roman Kagan 6ade9bdada 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>
2012-04-24 09:42:08 +00:00
Roman Kagan 037a98cd3f 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>
2012-04-24 09:42:08 +00:00
Junio C Hamano aa39b858a3 RelNotes: the fourth batch of topics graduated to 'master'
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-04-23 13:30:22 -07:00
Junio C Hamano e22a81ca54 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
2012-04-23 13:02:15 -07:00
Junio C Hamano 8ea07808c1 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
2012-04-23 13:01:49 -07:00
Junio C Hamano d07764959e 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
2012-04-23 13:01:46 -07:00
Junio C Hamano e7779c2eca Merge branch 'rj/mingw-isguid'
By Ramsay Jones
* rj/mingw-isguid:
  compat/mingw.h: Set S_ISUID to prevent a fast-import test failure
2012-04-23 13:01:42 -07:00
Junio C Hamano b5d681ba81 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
2012-04-23 13:01:32 -07:00
Junio C Hamano eb9756bd35 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
2012-04-23 13:01:29 -07:00
Junio C Hamano 987dbb86ec 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
2012-04-23 12:58:28 -07:00
Junio C Hamano 9d76db4e67 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
2012-04-23 12:58:23 -07:00
Junio C Hamano 31a199a76e 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
2012-04-23 12:57:21 -07:00
Junio C Hamano ba8e6326f1 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
2012-04-23 12:52:55 -07:00
Junio C Hamano 58bbace89d 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
2012-04-23 12:52:18 -07:00
Junio C Hamano b6195198fe 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
2012-04-23 12:43:10 -07:00
Junio C Hamano 2347982d1a 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
2012-04-23 12:41:15 -07:00
Junio C Hamano bca57eeac1 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
2012-04-23 12:40:08 -07:00
Junio C Hamano 4c9d7bc4a6 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
2012-04-23 12:40:03 -07:00
Junio C Hamano 29a03fa562 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
2012-04-23 12:39:18 -07:00
Junio C Hamano 1f64344659 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
2012-04-23 12:39:05 -07:00
Junio C Hamano d1ca788fcd RelNotes: the third batch
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-04-20 15:58:40 -07:00
Junio C Hamano 8cc5223495 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
2012-04-20 15:51:18 -07:00
Junio C Hamano c5da24a73a 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
2012-04-20 15:50:37 -07:00
Junio C Hamano af78c31720 Merge branch 'bw/submodule-sed-solaris'
By Ben Walton
* bw/submodule-sed-solaris:
  Avoid bug in Solaris xpg4/sed as used in submodule
2012-04-20 15:50:14 -07:00
Junio C Hamano bd6f71d1fc 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
2012-04-20 15:50:03 -07:00
Junio C Hamano 27da1cf65b 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
2012-04-20 15:49:51 -07:00
Junio C Hamano bb52e7f600 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
2012-04-20 15:49:37 -07:00
Junio C Hamano 334dde8532 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
2012-04-20 15:49:16 -07:00