git.git
11 years agocompletion: split __git_ps1 into a separate script
Felipe Contreras [Tue, 22 May 2012 20:46:40 +0000 (22 22:46 +0200)]
completion: split __git_ps1 into a separate script

bash-completion 1.90 shipped with support to load completions
dynamically[1], which means the git completion script wouldn't be loaded
until the user types 'git <tab>'--this creates a problem to people using
__git_ps1(); that function won't be available when the shell is first
created.

For now distributions have workarounded this issue by moving the git
completion to the "compatdir"[2]; this of course is not ideal.

The solution, proposed by Kerrick Staley[3], is to split the git script
in two; the part that deals with __git_ps1() in one (i.e.
git-prompt.sh), and everything else in another (i.e.
git-completion.bash).

Another benefit of this is that zsh user that are not interested in the
bash completion can use it for their prompts, which has been tried
before[4].

The only slight issue is that __gitdir() would be duplicated, but this
is probably not a big deal.

So let's go ahead and move __git_ps1() to a new file.

While at this, I took the liberty to reformat the help text in the new
file.

 [1] http://anonscm.debian.org/gitweb/?p=bash-completion/bash-completion.git;a=commitdiff;h=99c4f7f25f50a7cb2fce86055bddfe389effa559
 [2] http://projects.archlinux.org/svntogit/packages.git/commit/trunk?h=packages/git&id=974380fabb8f9f412990b17063bf578d98c44a82
 [3] http://mid.gmane.org/CANaWP3w9KDu57aHquRRYt8td_haSWTBKs7zUHy-xu0B61gmr9A@mail.gmail.com
 [4] http://mid.gmane.org/1303824288-15591-1-git-send-email-mstormo@gmail.com

Cc: Kerrick Staley <mail@kerrickstaley.com>
Cc: Marius Storm-Olsen <mstormo@gmail.com>
Cc: Ville Skyttä <ville.skytta@iki.fi>
Cc: Dan McGee <dan@archlinux.org>
Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agocompletion: remove executable mode
Felipe Contreras [Tue, 22 May 2012 20:46:39 +0000 (22 22:46 +0200)]
completion: remove executable mode

No reason to have it executable. Every way this script is intended to be
used includes the 'source' command.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
11 years agoMerge branch 'fc/git-complete-helper' into fc/git-prompt-script
Junio C Hamano [Tue, 22 May 2012 22:34:46 +0000 (22 15:34 -0700)]
Merge branch 'fc/git-complete-helper' into fc/git-prompt-script

By Michael Haggerty (17) and others
via Junio C Hamano (36) and Jeff King (1)
* fc/git-complete-helper: (54 commits)
  completion: add new __git_complete helper
  Update draft release notes to 1.7.11 (11th batch)
  Git 1.7.10.2
  document submdule.$name.update=none option for gitmodules
  The tenth batch of topics
  Update draft release notes to 1.7.10.2
  checkout: do not corrupt HEAD on empty repo
  apply: remove lego in i18n string in gitdiff_verify_name
  dir: convert to strbuf
  status: refactor colopts handling
  status: respect "-b" for porcelain format
  status: fix null termination with "-b"
  status: refactor null_termination option
  commit: refactor option parsing
  Documentation/git-config: describe and clarify "--local <file>" option
  reflog-walk: tell explicit --date=default from not having --date at all
  clone: fix progress-regression
  grep.c: remove redundant line of code
  checkout (detached): truncate list of orphaned commits at the new HEAD
  t2020-checkout-detach: check for the number of orphaned commits
  ...

11 years agocompletion: add new __git_complete helper
Felipe Contreras [Mon, 14 May 2012 15:35:18 +0000 (14 17:35 +0200)]
completion: add new __git_complete helper

This simplifies the completions, and would make it easier to define
aliases in the future.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoUpdate draft release notes to 1.7.11 (11th batch)
Junio C Hamano [Fri, 11 May 2012 18:40:43 +0000 (11 11:40 -0700)]
Update draft release notes to 1.7.11 (11th batch)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'ef/checkout-empty'
Junio C Hamano [Fri, 11 May 2012 18:34:16 +0000 (11 11:34 -0700)]
Merge branch 'ef/checkout-empty'

Running "git checkout" on an unborn branch used to corrupt HEAD
(regression in 1.7.10); this makes it error out.

By Erik Faye-Lund
* ef/checkout-empty:
  checkout: do not corrupt HEAD on empty repo

12 years agoMerge branch 'jk/maint-reflog-walk-count-vs-time'
Junio C Hamano [Fri, 11 May 2012 18:30:07 +0000 (11 11:30 -0700)]
Merge branch 'jk/maint-reflog-walk-count-vs-time'

Gives a better DWIM behaviour for --pretty=format:%gd, "stash list", and
"log -g", depending on how the starting point ("master" vs "master@{0}" vs
"master@{now}") and date formatting options (e.g. "--date=iso") are given
on the command line.

By Jeff King (4) and Junio C Hamano (1)
* jk/maint-reflog-walk-count-vs-time:
  reflog-walk: tell explicit --date=default from not having --date at all
  reflog-walk: always make HEAD@{0} show indexed selectors
  reflog-walk: clean up "flag" field of commit_reflog struct
  log: respect date_mode_explicit with --format:%gd
  t1411: add more selector index/date tests

12 years agoMerge branch 'nd/i18n-branch-lego'
Junio C Hamano [Fri, 11 May 2012 18:29:45 +0000 (11 11:29 -0700)]
Merge branch 'nd/i18n-branch-lego'

Fix yet another message construction by concatenating pieces of sentenes,
which is unfriendly to i18n.

By Nguyễn Thái Ngọc Duy
* nd/i18n-branch-lego:
  branch: remove lego in i18n tracking info strings

12 years agoSync with 1.7.10.2
Junio C Hamano [Fri, 11 May 2012 18:29:02 +0000 (11 11:29 -0700)]
Sync with 1.7.10.2

12 years agoGit 1.7.10.2v1.7.10.2
Junio C Hamano [Fri, 11 May 2012 18:25:28 +0000 (11 11:25 -0700)]
Git 1.7.10.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jc/diff-algo-cleanup' into maint
Junio C Hamano [Fri, 11 May 2012 18:19:27 +0000 (11 11:19 -0700)]
Merge branch 'jc/diff-algo-cleanup' into maint

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

12 years agoMerge branch 'ct/advise-push-default' into maint
Junio C Hamano [Fri, 11 May 2012 18:18:43 +0000 (11 11:18 -0700)]
Merge branch 'ct/advise-push-default' into maint

The cases "git push" fails due to non-ff can be broken into three
categories; each case is given a separate advise message.

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 'js/fast-import-test-9300' into maint
Junio C Hamano [Fri, 11 May 2012 18:17:49 +0000 (11 11:17 -0700)]
Merge branch 'js/fast-import-test-9300' into maint

By Johannes Sixt
* js/fast-import-test-9300:
  t9300-fast-import: avoid 'exit' in test_expect_success snippets

12 years agoMerge branch 'jk/repack-no-explode-objects-from-old-pack' into maint
Junio C Hamano [Fri, 11 May 2012 18:16:45 +0000 (11 11:16 -0700)]
Merge branch 'jk/repack-no-explode-objects-from-old-pack' into maint

"git repack" used to write out unreachable objects as loose objects
when repacking, even if such loose objects will immediately pruned
due to its age.

By Jeff King
* jk/repack-no-explode-objects-from-old-pack:
  gc: use argv-array for sub-commands
  argv-array: add a new "pushl" method
  argv-array: refactor empty_argv initialization
  gc: do not explode objects which will be immediately pruned

12 years agoMerge branch 'ah/maint-grep-double-init' into maint
Junio C Hamano [Fri, 11 May 2012 18:16:09 +0000 (11 11:16 -0700)]
Merge branch 'ah/maint-grep-double-init' into maint

By Angus Hammond
* ah/maint-grep-double-init:
  grep.c: remove redundant line of code

12 years agoMerge branch 'fa/maint-config-doc' into maint
Junio C Hamano [Fri, 11 May 2012 18:15:53 +0000 (11 11:15 -0700)]
Merge branch 'fa/maint-config-doc' into maint

By Florian Achleitner
* fa/maint-config-doc:
  Documentation/git-config: describe and clarify "--local <file>" option

12 years agoMerge branch 'rs/unpack-trees-leakfix' into maint
Junio C Hamano [Fri, 11 May 2012 18:15:10 +0000 (11 11:15 -0700)]
Merge branch 'rs/unpack-trees-leakfix' into maint

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 'sl/test-wc-l-line-count' into maint
Junio C Hamano [Fri, 11 May 2012 18:14:57 +0000 (11 11:14 -0700)]
Merge branch 'sl/test-wc-l-line-count' into maint

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

12 years agoMerge branch 'rl/show-empty-prefix' into maint
Junio C Hamano [Fri, 11 May 2012 18:13:26 +0000 (11 11:13 -0700)]
Merge branch 'rl/show-empty-prefix' into maint

Unlike "git rev-parse --show-cdup", "--show-prefix" did not give an
empty line when run at the top of the working tree.

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

12 years agodocument submdule.$name.update=none option for gitmodules
Heiko Voigt [Thu, 10 May 2012 18:59:04 +0000 (10 20:59 +0200)]
document submdule.$name.update=none option for gitmodules

This option was not yet described in the gitmodules documentation. We
only described it in the 'git submodule' command documentation but
gitmodules is the more natural place to look.

A short reference in the 'git submodule' documentation should be
sufficient since the details can now be found in the documentation to
gitmodules.

Signed-off-by: Heiko Voigt <hvoigt@hvoigt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoThe tenth batch of topics
Junio C Hamano [Thu, 10 May 2012 18:04:31 +0000 (10 11:04 -0700)]
The tenth batch of topics

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'rs/dir-strbuf'
Junio C Hamano [Thu, 10 May 2012 17:49:55 +0000 (10 10:49 -0700)]
Merge branch 'rs/dir-strbuf'

By René Scharfe
* rs/dir-strbuf:
  dir: convert to strbuf

12 years agoMerge branch 'nd/i18n-apply-lego'
Junio C Hamano [Thu, 10 May 2012 17:49:52 +0000 (10 10:49 -0700)]
Merge branch 'nd/i18n-apply-lego'

By Nguyễn Thái Ngọc Duy
* nd/i18n-apply-lego:
  apply: remove lego in i18n string in gitdiff_verify_name

12 years agoMerge branch 'jk/status-porcelain-z-b'
Junio C Hamano [Thu, 10 May 2012 17:49:46 +0000 (10 10:49 -0700)]
Merge branch 'jk/status-porcelain-z-b'

"git status --porcelain" ignored "--branch" option by mistake.  The output
for "git status --branch -z" was also incorrect and did not terminate the
record for the current branch name with NUL as asked.

By Jeff King
via Jeff King
* jk/status-porcelain-z-b:
  status: refactor colopts handling
  status: respect "-b" for porcelain format
  status: fix null termination with "-b"
  status: refactor null_termination option
  commit: refactor option parsing

12 years agoMerge branch 'fa/maint-config-doc'
Junio C Hamano [Thu, 10 May 2012 17:49:42 +0000 (10 10:49 -0700)]
Merge branch 'fa/maint-config-doc'

By Florian Achleitner
* fa/maint-config-doc:
  Documentation/git-config: describe and clarify "--local <file>" option

12 years agoMerge branch 'ef/maint-clone-progress-fix'
Junio C Hamano [Thu, 10 May 2012 17:49:35 +0000 (10 10:49 -0700)]
Merge branch 'ef/maint-clone-progress-fix'

Some time ago, "git clone" lost the progress output for its "checkout"
phase; when run without any "--quiet" option, it should give progress to
the lengthy operation.

By Erik Faye-Lund
* ef/maint-clone-progress-fix:
  clone: fix progress-regression

12 years agoMerge branch 'ah/maint-grep-double-init'
Junio C Hamano [Thu, 10 May 2012 17:49:31 +0000 (10 10:49 -0700)]
Merge branch 'ah/maint-grep-double-init'

By Angus Hammond
* ah/maint-grep-double-init:
  grep.c: remove redundant line of code

12 years agoMerge branch 'js/checkout-detach-count'
Junio C Hamano [Thu, 10 May 2012 17:49:25 +0000 (10 10:49 -0700)]
Merge branch 'js/checkout-detach-count'

When checking out another commit from an already detached state, we used
to report all commits that are not reachable from any of the refs as
lossage, but some of them might be reachable from the new HEAD, and there
is no need to warn about them.

By Johannes Sixt
* js/checkout-detach-count:
  checkout (detached): truncate list of orphaned commits at the new HEAD
  t2020-checkout-detach: check for the number of orphaned commits

12 years agoMerge branch 'jc/install-no-hardlinks'
Junio C Hamano [Thu, 10 May 2012 17:49:18 +0000 (10 10:49 -0700)]
Merge branch 'jc/install-no-hardlinks'

Your build platform may support hardlinks but you may prefer not to use
them, e.g. when installing to DESTDIR to make a tarball and untarring on
a filesystem that has poor support for hardlinks.

The Makefile in git-gui project may need to learn to honor the same
setting; it unconditionally creates git-citool by hardlinking git-gui.

* jc/install-no-hardlinks:
  Makefile: NO_INSTALL_HARDLINKS

12 years agoMerge branch 'nd/stream-to-archive'
Junio C Hamano [Thu, 10 May 2012 17:49:13 +0000 (10 10:49 -0700)]
Merge branch 'nd/stream-to-archive'

Stream large blobs directly out to archive files without slurping
everything in memory first.

By René Scharfe (6) and Nguyễn Thái Ngọc Duy (4)
* nd/stream-to-archive:
  t5000: rationalize unzip tests
  archive-zip: streaming for deflated files
  archive-zip: streaming for stored files
  archive-zip: factor out helpers for writing sizes and CRC
  archive-zip: remove uncompressed_size
  archive-tar: stream large blobs to tar file
  archive: delegate blob reading to backend
  archive-tar: unindent write_tar_entry by one level
  archive-tar: turn write_tar_entry into blob-writing only
  streaming: void pointer instead of char pointer

12 years agoMerge branch 'mh/ref-api-lazy-loose'
Junio C Hamano [Thu, 10 May 2012 17:49:07 +0000 (10 10:49 -0700)]
Merge branch 'mh/ref-api-lazy-loose'

Refs API is updated to lazily read sub-hierarchies of refs/ namespace,
so that we do not have to grab everything from the filesystem when we
are only interested in listing branches, for example.

By Michael Haggerty (17) and Junio C Hamano (1)
* mh/ref-api-lazy-loose:
  refs: fix find_containing_dir() regression
  refs: read loose references lazily
  read_loose_refs(): eliminate ref_cache argument
  struct ref_dir: store a reference to the enclosing ref_cache
  search_for_subdir(): return (ref_dir *) instead of (ref_entry *)
  get_ref_dir(): add function for getting a ref_dir from a ref_entry
  read_loose_refs(): rename function from get_ref_dir()
  refs: wrap top-level ref_dirs in ref_entries
  find_containing_dir(): use strbuf in implementation of this function
  bisect: copy filename string obtained from git_path()
  do_for_each_reflog(): use a strbuf to hold logfile name
  do_for_each_reflog(): return early on error
  get_ref_dir(): take the containing directory as argument
  refs.c: extract function search_for_subdir()
  get_ref_dir(): require that the dirname argument ends in '/'
  get_ref_dir(): rename "base" parameter to "dirname"
  get_ref_dir(): use a strbuf to hold refname
  get_ref_dir(): return early if directory cannot be read

12 years agoMerge branch 'maint'
Junio C Hamano [Thu, 10 May 2012 17:45:47 +0000 (10 10:45 -0700)]
Merge branch 'maint'

12 years agoUpdate draft release notes to 1.7.10.2
Junio C Hamano [Thu, 10 May 2012 17:45:42 +0000 (10 10:45 -0700)]
Update draft release notes to 1.7.10.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'mm/include-userpath' into maint
Junio C Hamano [Thu, 10 May 2012 17:33:05 +0000 (10 10:33 -0700)]
Merge branch 'mm/include-userpath' into maint

By Jeff King
* mm/include-userpath:
  config: expand tildes in include.path variable

12 years agoMerge branch 'cc/fix-missing-va-end-in-revert' into maint
Junio C Hamano [Thu, 10 May 2012 17:32:43 +0000 (10 10:32 -0700)]
Merge branch 'cc/fix-missing-va-end-in-revert' into maint

By Christian Couder
* cc/fix-missing-va-end-in-revert:
  revert: add missing va_end

12 years agoMerge branch 'bw/test-fix-grep-gnuism' into maint
Junio C Hamano [Thu, 10 May 2012 17:32:15 +0000 (10 10:32 -0700)]
Merge branch 'bw/test-fix-grep-gnuism' into maint

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

12 years agoMerge branch 'jk/http-backend-keep-committer-ident-env' into maint
Junio C Hamano [Thu, 10 May 2012 17:29:50 +0000 (10 10:29 -0700)]
Merge branch 'jk/http-backend-keep-committer-ident-env' into maint

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

Conflicts:
t/t5541-http-push.sh

12 years agoMerge branch 'nl/rebase-i-cheat-sheet' into maint
Junio C Hamano [Thu, 10 May 2012 17:29:14 +0000 (10 10:29 -0700)]
Merge branch 'nl/rebase-i-cheat-sheet' into maint

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

12 years agoMerge branch 'bw/submodule-sed-solaris' into maint
Junio C Hamano [Thu, 10 May 2012 17:27:58 +0000 (10 10:27 -0700)]
Merge branch 'bw/submodule-sed-solaris' into maint

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

12 years agoMerge branch 'jk/maint-push-progress' into maint
Junio C Hamano [Thu, 10 May 2012 17:08:54 +0000 (10 10:08 -0700)]
Merge branch 'jk/maint-push-progress' into maint

"git push" over smart-http lost progress output a few releases ago.

By Jeff King
* jk/maint-push-progress:
  t5541: test more combinations of --progress
  teach send-pack about --[no-]progress
  send-pack: show progress when isatty(2)

12 years agoMerge branch 'jc/rerere-train' into maint
Junio C Hamano [Thu, 10 May 2012 17:08:24 +0000 (10 10:08 -0700)]
Merge branch 'jc/rerere-train' into maint

A contrib script "rerere-train" did not work out of the box unless user
futzed with her $PATH.

* jc/rerere-train:
  contrib/rerere-train: use installed git-sh-setup

12 years agoMerge branch 'lp/diffstat-with-graph' into maint
Junio C Hamano [Thu, 10 May 2012 17:06:52 +0000 (10 10:06 -0700)]
Merge branch 'lp/diffstat-with-graph' into maint

"log --graph" was not very friendly with "--stat" option and its output
had line breaks at wrong places.

By Lucian Poston (5) and Zbigniew Jędrzejewski-Szmek (3)
* lp/diffstat-with-graph:
  t4052: work around shells unable to set COLUMNS to 1
  test-lib: skip test with COLUMNS=1 under mksh
  Prevent graph_width of stat width from falling below min
  t4052: Test diff-stat output with minimum columns
  t4052: Adjust --graph --stat output for prefixes
  Adjust stat width calculations to take --graph output into account
  Add output_prefix_length to diff_options
  t4052: test --stat output with --graph

12 years agotests: add tests for the bash prompt functions in the completion script
SZEDER Gábor [Wed, 9 May 2012 00:44:33 +0000 (9 02:44 +0200)]
tests: add tests for the bash prompt functions in the completion script

The tests cover the discovery of the '.git' directory in the
__gitdir() function in different scenarios, and the prompt itself,
i.e. branch name, detached heads, operations (rebase, merge,
cherry-pick, bisect), and status indicators (dirty, stash, untracked
files; but not the upstream status).

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agotests: move code to run tests under bash into a helper library
SZEDER Gábor [Wed, 9 May 2012 00:44:32 +0000 (9 02:44 +0200)]
tests: move code to run tests under bash into a helper library

The following patch will add tests for the bash prompt functions as a
new test script, which also has to be run under bash.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocheckout: do not corrupt HEAD on empty repo
Erik Faye-Lund [Tue, 8 May 2012 17:22:33 +0000 (8 19:22 +0200)]
checkout: do not corrupt HEAD on empty repo

In abe1998 ("git checkout -b: allow switching out of an unborn
branch"), a code-path overly-optimisticly assumed that a
branch-name was specified. This is not always the case, and as
a result a NULL-pointer was attempted printed to .git/HEAD.

This could lead to at least two different failure modes:
 1) vsnprintf formated the NULL-string as something useful (e.g
    "(null)")
 2) vsnprintf crashed

Neither were very convenient for formatting a new HEAD-reference.

To fix this, reintroduce some strictness so we only take this
new codepath if a banch-name was specified.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoapply: remove lego in i18n string in gitdiff_verify_name
Nguyễn Thái Ngọc Duy [Sun, 6 May 2012 13:13:22 +0000 (6 20:13 +0700)]
apply: remove lego in i18n string in gitdiff_verify_name

It marks the string "...inconsistent %s filename..." where %s is either
"old" or "new" from caller.  Make it two strings "...inconsistent new
filename..." and "...inconsistent old filename...".

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'rs/maint-dir-strbuf' into rs/dir-strbuf
Junio C Hamano [Tue, 8 May 2012 16:43:40 +0000 (8 09:43 -0700)]
Merge branch 'rs/maint-dir-strbuf' into rs/dir-strbuf

By René Scharfe
* rs/maint-dir-strbuf:
  dir: convert to strbuf

12 years agodir: convert to strbuf
René Scharfe [Tue, 1 May 2012 11:25:24 +0000 (1 13:25 +0200)]
dir: convert to strbuf

The functions read_directory_recursive() and treat_leading_path() both
use buffers sized to fit PATH_MAX characters.  The latter can be made to
overrun its buffer, e.g. like this:

$ a=0123456789abcdef
$ a=$a$a$a$a$a$a$a$a
$ a=$a$a$a$a$a$a$a$a
$ a=$a$a$a$a$a$a$a$a
$ git add $a/a

Instead of trying to add a check and potentionally forgetting to address
similar cases, convert the involved functions and their helpers to use
struct strbuf.  The patch is suprisingly large because the helpers
treat_path() and treat_one_path() modify the buffer as well and thus need
to be converted, too.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agostatus: refactor colopts handling
Jeff King [Mon, 7 May 2012 19:35:03 +0000 (7 15:35 -0400)]
status: refactor colopts handling

The current code reads the config and command-line options
into a separate "colopts" variable, and then copies the
contents of that variable into the "struct wt_status". We
can eliminate the extra variable and copy just write
straight into the wt_status struct.

This simplifies the "status" code a little bit.
Unfortunately, it makes the "commit" code one line more
complex; a side effect of the separate variable was that
"commit" did not copy the colopts variable, so any
column.status configuration had no effect.

The result still ends up cleaner, though. In the previous
version, it was unclear whether commit simply forgot to copy
the colopt variable, or whether it was intentional. Now it
explicitly turns off column options. Furthermore, if commit
later learns to respect column.status, this will make the
end result simpler. I punted on just adding that feature
now, because it was sufficiently non-obvious that it should
not go into a refactoring patch.

Signed-off-by: Jeff King <peff@peff.net>
12 years agoMerge branch 'jk/maint-status-porcelain-z-b' into HEAD
Jeff King [Tue, 8 May 2012 08:55:35 +0000 (8 04:55 -0400)]
Merge branch 'jk/maint-status-porcelain-z-b' into HEAD

* jk/maint-status-porcelain-z-b:
  status: respect "-b" for porcelain format
  status: fix null termination with "-b"
  status: refactor null_termination option
  commit: refactor option parsing

Conflicts:
wt-status.h

12 years agostatus: respect "-b" for porcelain format
Jeff King [Mon, 7 May 2012 21:09:04 +0000 (7 17:09 -0400)]
status: respect "-b" for porcelain format

There is no reason not to, as the user has to explicitly ask
for it, so we are not breaking compatibility by doing so. We
can do this simply by moving the "show_branch" flag into
the wt_status struct. As a bonus, this saves us from passing
it explicitly, simplifying the code.

Signed-off-by: Jeff King <peff@peff.net>
12 years agostatus: fix null termination with "-b"
Jeff King [Mon, 7 May 2012 21:02:18 +0000 (7 17:02 -0400)]
status: fix null termination with "-b"

When the "-z" option is given to status, we are supposed to
NUL-terminate each record. However, the "-b" code to show
the tracking branch did not respect this, and always ended
with a newline.

Signed-off-by: Jeff King <peff@peff.net>
12 years agostatus: refactor null_termination option
Jeff King [Mon, 7 May 2012 19:44:44 +0000 (7 15:44 -0400)]
status: refactor null_termination option

This option is passed separately to the wt_status printing
functions, whereas every other formatting option is
contained in the wt_status struct itself. Let's do the same
here, so we can avoid passing it around through the call
stack.

Signed-off-by: Jeff King <peff@peff.net>
12 years agocommit: refactor option parsing
Jeff King [Mon, 7 May 2012 19:18:26 +0000 (7 15:18 -0400)]
commit: refactor option parsing

The options are declared as a static global, but really they
need only be accessible from cmd_commit.  Additionally,
declare the "struct wt_status" in cmd_commit and cmd_status
as static at the top of each function; this will let the
options lists reference them directly, which will facilitate
further cleanups.

Signed-off-by: Jeff King <peff@peff.net>
12 years agoDocumentation/git-config: describe and clarify "--local <file>" option
Florian Achleitner [Sat, 5 May 2012 10:03:52 +0000 (5 12:03 +0200)]
Documentation/git-config: describe and clarify "--local <file>" option

Describe config file selection in git-config.  While the usage message of
git-config shows --local, the documentation page did not contain anything
about that.

Signed-off-by: Florian Achleitner <florian.achleitner.2.6.31@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoreflog-walk: tell explicit --date=default from not having --date at all
Junio C Hamano [Mon, 7 May 2012 21:11:32 +0000 (7 14:11 -0700)]
reflog-walk: tell explicit --date=default from not having --date at all

Introduction of opt->date_mode_explicit was a step in the right direction,
but lost that crucial bit at the very end of the callchain, and the callee
could not tell an explicitly specified "I want *date* but in default format"
from the built-in default value passed when there was no --date specified.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoThe ninth batch of topics graduated to 'master'
Junio C Hamano [Mon, 7 May 2012 20:39:38 +0000 (7 13:39 -0700)]
The ninth batch of topics graduated to 'master'

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'nh/empty-rebase'
Junio C Hamano [Mon, 7 May 2012 20:29:16 +0000 (7 13:29 -0700)]
Merge branch 'nh/empty-rebase'

By Neil Horman
* nh/empty-rebase:
  git cherry-pick: do not dereference a potential NULL pointer

12 years agoMerge branch 'zj/diff-empty-chmod'
Junio C Hamano [Mon, 7 May 2012 20:29:08 +0000 (7 13:29 -0700)]
Merge branch 'zj/diff-empty-chmod'

"git diff --stat" used to fully count a binary file with modified
execution bits whose contents is unmodified, which was not right.

By Zbigniew Jędrzejewski-Szmek (4) and Johannes Sixt (1)
* zj/diff-empty-chmod:
  t4006: Windows do not have /dev/zero
  diff --stat: do not run diff on indentical files
  diff --stat: report mode-only changes for binary files like text files
  tests: check --[short]stat output after chmod
  test: modernize style of t4006

Conflicts:
diff.c

12 years agoMerge branch 'jk/maint-tformat-with-z'
Junio C Hamano [Mon, 7 May 2012 20:29:01 +0000 (7 13:29 -0700)]
Merge branch 'jk/maint-tformat-with-z'

"log -z --pretty=tformat:..." does not terminate each record with NUL
and this is a beginning of an attempt to fix it.  It still is not right
but the patch does not make externally observable behaviour worse.

By Jan Krüger (1) and Junio C Hamano (1)
* jk/maint-tformat-with-z:
  log-tree: the previous one is still not quite right
  log-tree: use custom line terminator in line termination mode

12 years agoMerge branch 'th/difftool-diffall'
Junio C Hamano [Mon, 7 May 2012 20:28:44 +0000 (7 13:28 -0700)]
Merge branch 'th/difftool-diffall'

Rolls the two-directory-diff logic from diffall script (in contrib/) into
"git difftool" framework.

By Tim Henigan
* th/difftool-diffall:
  difftool: print list of valid tools with '--tool-help'
  difftool: teach difftool to handle directory diffs
  difftool: eliminate setup_environment function
  difftool: stop appending '.exe' to git
  difftool: remove explicit change of PATH
  difftool: exit(0) when usage is printed
  difftool: add '--no-gui' option
  difftool: parse options using Getopt::Long

12 years agoSync with maint
Junio C Hamano [Mon, 7 May 2012 20:28:34 +0000 (7 13:28 -0700)]
Sync with maint

12 years agoStart preparing for 1.7.10.2
Junio C Hamano [Mon, 7 May 2012 20:24:13 +0000 (7 13:24 -0700)]
Start preparing for 1.7.10.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'jk/maint-gitweb-test-use-sane-perl' into maint
Junio C Hamano [Mon, 7 May 2012 20:17:31 +0000 (7 13:17 -0700)]
Merge branch 'jk/maint-gitweb-test-use-sane-perl' into maint

When using a Perl script on a system where "perl" found on user's $PATH
could be ancient or otherwise broken, we allow builders to specify the
path to a good copy of Perl with $PERL_PATH.  The gitweb test forgot to
use that Perl when running its test.

By Jeff King (1) and Zbigniew Jędrzejewski-Szmek (1)
* jk/maint-gitweb-test-use-sane-perl:
  Consistently use perl from /usr/bin/ for scripts
  t/gitweb-lib: use $PERL_PATH to run gitweb

12 years agoMerge branch 'js/daemon-test-race-fix' into maint
Junio C Hamano [Mon, 7 May 2012 20:17:17 +0000 (7 13:17 -0700)]
Merge branch 'js/daemon-test-race-fix' into maint

The test scaffolding for git-daemon was flaky.

By Johannes Sixt
* js/daemon-test-race-fix:
  t5570: fix forwarding of git-daemon messages via cat

12 years agoMerge branch 'jk/maint-config-bogus-section' into maint
Junio C Hamano [Mon, 7 May 2012 20:14:08 +0000 (7 13:14 -0700)]
Merge branch 'jk/maint-config-bogus-section' into maint

"git config --rename-section" to rename an existing section into a bogus
one did not check the new name.

By Jeff King
* jk/maint-config-bogus-section:
  config: reject bogus section names for --rename-section

12 years agoMerge branch 'pw/t5800-import-race-fix' into maint
Junio C Hamano [Mon, 7 May 2012 20:13:55 +0000 (7 13:13 -0700)]
Merge branch 'pw/t5800-import-race-fix' into maint

The test scaffolding for fast-import was flaky.

By Pete Wyckoff
* pw/t5800-import-race-fix:
  git-remote-testgit: fix race when spawning fast-import

12 years agoMerge branch 'rt/cherry-revert-conflict-summary' into maint
Junio C Hamano [Mon, 7 May 2012 20:13:43 +0000 (7 13:13 -0700)]
Merge branch 'rt/cherry-revert-conflict-summary' into maint

In the older days, the header "Conflicts:" in "cherry-pick" and "merge"
was separated by a blank line from the list of paths that follow for
readability, but when "merge" was rewritten in C, we lost it by
mistake. Remove the newline from "cherry-pick" to make them match again.

By Ralf Thielow
* rt/cherry-revert-conflict-summary:
  sequencer: remove additional blank line

12 years agoMerge branch 'cb/maint-report-mount-point-correctly-in-setup' into maint
Junio C Hamano [Mon, 7 May 2012 20:13:03 +0000 (7 13:13 -0700)]
Merge branch 'cb/maint-report-mount-point-correctly-in-setup' into maint

The filesystem boundary was not correctly reported when .git directory
discovery stopped at a mount point.

By Clemens Buchacher
* cb/maint-report-mount-point-correctly-in-setup:
  properly keep track of current working directory

12 years agoMerge branch 'ef/maint-1.7.6-clone-progress-fix' into ef/maint-clone-progress-fix
Junio C Hamano [Mon, 7 May 2012 19:35:36 +0000 (7 12:35 -0700)]
Merge branch 'ef/maint-1.7.6-clone-progress-fix' into ef/maint-clone-progress-fix

By Erik Faye-Lund
* ef/maint-1.7.6-clone-progress-fix:
  clone: fix progress-regression

12 years agoclone: fix progress-regression
Erik Faye-Lund [Mon, 7 May 2012 19:23:13 +0000 (7 21:23 +0200)]
clone: fix progress-regression

In 5bd631b3 ("clone: support multiple levels of verbosity"), the
default behavior to show progress of the implicit checkout in
the clone-command regressed so that progress was only shown if
the verbose-option was specified.

Fix this by making option_verbosity == 0 output progress as well.

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogrep.c: remove redundant line of code
Angus Hammond [Sun, 6 May 2012 18:17:15 +0000 (6 19:17 +0100)]
grep.c: remove redundant line of code

Signed-off-by: Angus Hammond <angusgh@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogit p4 doc: fix formatting
Pete Wyckoff [Sun, 6 May 2012 15:58:38 +0000 (6 11:58 -0400)]
git p4 doc: fix formatting

Attach example sections to previous level of indenting.

Fix a trailing ::

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agocheckout (detached): truncate list of orphaned commits at the new HEAD
Johannes Sixt [Fri, 4 May 2012 18:14:48 +0000 (4 20:14 +0200)]
checkout (detached): truncate list of orphaned commits at the new HEAD

When git checkout switches from a detached HEAD to any other commit, then
all orphaned commits were listed in a warning:

  Warning: you are leaving 2 commits behind...:

    a5e5396 another fixup
    6aa1af6 fixup foo

But if the new commit is actually one from this list (6aa1af6 in this
example), then the list in the warning can be truncated at the new HEAD,
because history beginning at HEAD is not "left behind". This makes it so.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agot2020-checkout-detach: check for the number of orphaned commits
Johannes Sixt [Fri, 4 May 2012 18:13:14 +0000 (4 20:13 +0200)]
t2020-checkout-detach: check for the number of orphaned commits

Change the test that orphans commits to leave 2 commits behind. Add a test
that leaves only one of these behind.

The next patch will truncate the list of orphaned commits earlier. With
this preliminary update, its effect will become more obvious.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMakefile: NO_INSTALL_HARDLINKS
Junio C Hamano [Wed, 2 May 2012 22:12:10 +0000 (2 15:12 -0700)]
Makefile: NO_INSTALL_HARDLINKS

Your filesystem may support hardlinks, but you may choose not to use them
when installing git-foo builtins and favor symblic links or copies for
whatever reason.

The installation procedure of git-gui/ directory is not touched with this
patch and git-citool still ends up being a hardlink to git-gui, but it
needs to be addressed separately.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoreflog-walk: always make HEAD@{0} show indexed selectors
Jeff King [Fri, 4 May 2012 05:27:25 +0000 (4 01:27 -0400)]
reflog-walk: always make HEAD@{0} show indexed selectors

When we are showing reflog selectors during a walk, we infer
from context whether the user wanted to see the index in
each selector, or the reflog date. The current rules are:

  1. if the user asked for an explicit date format in the
     output, show the date

  2. if the user asked for ref@{now}, show the date

  3. if neither is true, show the index

However,  if we see "ref@{0}", that should be a strong clue
that the user wants to see the counted version. In fact, it
should be much stronger than the date format in (1). The
user may have been setting the date format to use in another
part of the output (e.g., in --format="%gd (%ad)", they may
have wanted to influence the author date).

This patch flips the rules to:

  1. if the user asked for ref@{0}, always show the index

  2. if the user asked for ref@{now}, always show the date

  3. otherwise, we have just "ref"; show them counted by
     default, but respect the presence of "--date" as a clue
     that the user wanted them date-based

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoreflog-walk: clean up "flag" field of commit_reflog struct
Jeff King [Fri, 4 May 2012 05:26:26 +0000 (4 01:26 -0400)]
reflog-walk: clean up "flag" field of commit_reflog struct

When we prepare to walk a reflog, we parse the specification
and pull some information from it, such as which reflog to
look in (e.g., HEAD), and where to start (e.g., HEAD@{10} or
HEAD@{yesterday}). The resulting struct has a "recno" field
to show where in the reflog we are starting. It also has a
"flag" field; if true, it means the recno field came from
parsing a date like HEAD@{yesterday}.

There are two problems with this:

  1. "flag" is an absolutely terrible name, as it conveys
     nothing about the meaning

  2. you can tell "HEAD" from "HEAD@{yesterday}", but you
     can't differentiate "HEAD" from "HEAD{0}"

This patch converts the flag into a tri-state (and gives it
a better name!).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agolog: respect date_mode_explicit with --format:%gd
Jeff King [Fri, 4 May 2012 05:25:18 +0000 (4 01:25 -0400)]
log: respect date_mode_explicit with --format:%gd

When we show a reflog selector (e.g., via "git log -g"), we
perform some DWIM magic: while we normally show the entry's
index (e.g., HEAD@{1}), if the user has given us a date
with "--date", then we show a date-based select (e.g.,
HEAD@{yesterday}).

However, we don't want to trigger this magic if the
alternate date format we got was from the "log.date"
configuration; that is not sufficiently strong context for
us to invoke this particular magic. To fix this, commit
f4ea32f (improve reflog date/number heuristic, 2009-09-24)
introduced a "date_mode_explicit" flag in rev_info. This
flag is set only when we see a "--date" option on the
command line, and we a vanilla date to the reflog code if
the date was not explicit.

Later, commit 8f8f547 (Introduce new pretty formats %g[sdD]
for reflog information, 2009-10-19) added another way to
show selectors, and it did not respect the date_mode_explicit
flag from f4ea32f.

This patch propagates the date_mode_explicit flag to the
pretty-print code, which can then use it to pass the
appropriate date field to the reflog code. This brings the
behavior of "%gd" in line with the other formats, and means
that its output is independent of any user configuration.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agot1411: add more selector index/date tests
Jeff King [Fri, 4 May 2012 05:23:14 +0000 (4 01:23 -0400)]
t1411: add more selector index/date tests

We already check that @{now} and "--date" cause the
displayed selector to use the date for both the multiline
and oneline formats. However, we miss several cases:

  1. The --format=%gd selector is not tested at all.

  2. We do not check how the log.date config interacts with the
     "--date" magic (according to f4ea32f, it should not
     impact the output).

Doing so reveals that the combination of both (log.date
combined with the %gd format) does not behave as expected.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMakefile: keep many variable list sorted
Nguyễn Thái Ngọc Duy [Fri, 4 May 2012 13:52:36 +0000 (4 20:52 +0700)]
Makefile: keep many variable list sorted

We tend to keep long lists sorted (extensions are not taken into
account), which helps spot a name easily by eye. Rearrange a few
items so these lists remain sorted.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agorefs: fix find_containing_dir() regression
Junio C Hamano [Thu, 3 May 2012 22:12:54 +0000 (3 15:12 -0700)]
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>
12 years agobranch: remove lego in i18n tracking info strings
Nguyễn Thái Ngọc Duy [Thu, 3 May 2012 13:12:00 +0000 (3 20:12 +0700)]
branch: remove lego in i18n tracking info strings

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agogit cherry-pick: do not dereference a potential NULL pointer
Neil Horman [Thu, 3 May 2012 12:10:22 +0000 (3 08:10 -0400)]
git cherry-pick: do not dereference a potential NULL pointer

In the case the pointer could be NULL, the function that gave the caller
the NULL pointer would already have issued an error message, so simply
returning early with an error status without issuing a new message is
sufficient.  The same for parse_commit() that will show necessary error
message when the argument is not NULL, and will return error silently
when the argument is NULL.

Noticed-by: Michael Mueller
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
12 years agoMerge branch 'maint'
Junio C Hamano [Thu, 3 May 2012 22:37:28 +0000 (3 15:37 -0700)]
Merge branch 'maint'

* maint:

12 years agoMerge branch 'jc/merge-reduce-parents-early' into maint
Junio C Hamano [Thu, 3 May 2012 22:36:15 +0000 (3 15:36 -0700)]
Merge branch 'jc/merge-reduce-parents-early' into maint

Octopus merge strategy did not reduce heads that are recorded in the final
commit correctly.

By Junio C Hamano (4) and Michał Kiedrowicz (1)
* jc/merge-reduce-parents-early:
  fmt-merge-msg: discard needless merge parents
  builtin/merge.c: reduce parents early
  builtin/merge.c: collect other parents early
  builtin/merge.c: remove "remoteheads" global variable
  merge tests: octopus with redundant parents

12 years agoMerge branch 'cb/cherry-pick-rev-path-confusion' into maint
Junio C Hamano [Thu, 3 May 2012 22:35:19 +0000 (3 15:35 -0700)]
Merge branch 'cb/cherry-pick-rev-path-confusion' into maint

The command line parser choked "git cherry-pick $name" when $name can be
both revision name and a pathname, even though $name can never be a path
in the context of the command.

By Clemens Buchacher
* cb/cherry-pick-rev-path-confusion:
  cherry-pick: do not expect file arguments

12 years agoMerge branch 'cb/http-multi-curl-auth' into maint
Junio C Hamano [Thu, 3 May 2012 22:34:51 +0000 (3 15:34 -0700)]
Merge branch 'cb/http-multi-curl-auth' into maint

HTTP transport that requires authentication did not work correctly when
multiple connections are used simultaneously.

By Jeff King (3) and Clemens Buchacher (1)
* cb/http-multi-curl-auth:
  http: use newer curl options for setting credentials
  http: clean up leak in init_curl_http_auth
  fix http auth with multiple curl handles
  http auth fails with multiple curl handles

12 years agoMerge branch 'mb/fetch-call-a-non-branch-a-ref' into maint
Junio C Hamano [Thu, 3 May 2012 22:29:25 +0000 (3 15:29 -0700)]
Merge branch 'mb/fetch-call-a-non-branch-a-ref' into maint

The report from "git fetch" said "new branch" even for a non branch ref.

By Marc Branchaud
* mb/fetch-call-a-non-branch-a-ref:
  fetch: describe new refs based on where it came from
  fetch: Give remote_ref to update_local_ref() as well

12 years agoMerge branch 'rl/maint-stash-i18n-save-error' into maint
Junio C Hamano [Thu, 3 May 2012 22:24:22 +0000 (3 15:24 -0700)]
Merge branch 'rl/maint-stash-i18n-save-error' into maint

i18n marking for an error message for "git stash --notavalidoption"
was incorrect.

By Ross Lagerwall
* rl/maint-stash-i18n-save-error:
  stash: use eval_gettextln correctly

12 years agoMerge branch 'jm/maint-strncpy-diff-no-index' into maint
Junio C Hamano [Thu, 3 May 2012 22:23:17 +0000 (3 15:23 -0700)]
Merge branch 'jm/maint-strncpy-diff-no-index' into maint

"diff --no-index" codepath had a few places that used fixed-size
buffer and truncated paths that are too long.

By Jim Meyering (1) and Junio C Hamano (1)
* jm/maint-strncpy-diff-no-index:
  diff --no-index: use strbuf for temporary pathnames
  diff: avoid stack-buffer-read-overrun for very long name

12 years agoMerge branch 'jk/maint-push-progress'
Junio C Hamano [Thu, 3 May 2012 22:13:55 +0000 (3 15:13 -0700)]
Merge branch 'jk/maint-push-progress'

"git push" over smart-http lost progress output and this resurrects it.

By Jeff King
* jk/maint-push-progress:
  t5541: test more combinations of --progress
  teach send-pack about --[no-]progress
  send-pack: show progress when isatty(2)

12 years agoMerge branch 'nd/columns'
Junio C Hamano [Thu, 3 May 2012 22:13:31 +0000 (3 15:13 -0700)]
Merge branch 'nd/columns'

A couple of commands learn --column option to produce columnar output.

By Nguyễn Thái Ngọc Duy (9) and Zbigniew Jędrzejewski-Szmek (1)
* nd/columns:
  tag: add --column
  column: support piping stdout to external git-column process
  status: add --column
  branch: add --column
  help: reuse print_columns() for help -a
  column: add dense layout support
  t9002: work around shells that are unable to set COLUMNS to 1
  column: add columnar layout
  Stop starting pager recursively
  Add column layout skeleton and git-column

12 years agorefs: read loose references lazily
Michael Haggerty [Thu, 26 Apr 2012 22:27:07 +0000 (27 00:27 +0200)]
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>
12 years agoread_loose_refs(): eliminate ref_cache argument
Michael Haggerty [Thu, 26 Apr 2012 22:27:06 +0000 (27 00:27 +0200)]
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>
12 years agostruct ref_dir: store a reference to the enclosing ref_cache
Michael Haggerty [Thu, 26 Apr 2012 22:27:05 +0000 (27 00:27 +0200)]
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>
12 years agosearch_for_subdir(): return (ref_dir *) instead of (ref_entry *)
Michael Haggerty [Thu, 26 Apr 2012 22:27:04 +0000 (27 00:27 +0200)]
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>
12 years agoget_ref_dir(): add function for getting a ref_dir from a ref_entry
Michael Haggerty [Thu, 26 Apr 2012 22:27:03 +0000 (27 00:27 +0200)]
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>
12 years agoread_loose_refs(): rename function from get_ref_dir()
Michael Haggerty [Thu, 26 Apr 2012 22:27:02 +0000 (27 00:27 +0200)]
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>
12 years agorefs: wrap top-level ref_dirs in ref_entries
Michael Haggerty [Thu, 26 Apr 2012 22:27:01 +0000 (27 00:27 +0200)]
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>