OSDN Git Service

git-core/git.git
10 years agoMerge branch 'jc/pager-configuration-doc'
Junio C Hamano [Thu, 12 Sep 2013 21:41:53 +0000 (14:41 -0700)]
Merge branch 'jc/pager-configuration-doc'

It was unclear in the documentation how various configurations and
environment variables determine which pager is eventually used.

* jc/pager-configuration-doc:
  config: rewrite core.pager documentation

10 years agoMerge branch 'mm/remote-helpers-doc'
Junio C Hamano [Thu, 12 Sep 2013 21:41:50 +0000 (14:41 -0700)]
Merge branch 'mm/remote-helpers-doc'

* mm/remote-helpers-doc:
  Documentation/remote-helpers: document common use-case for private ref

10 years agoMerge branch 'mn/doc-pack-heu-remove-dead-pastebin'
Junio C Hamano [Thu, 12 Sep 2013 21:41:47 +0000 (14:41 -0700)]
Merge branch 'mn/doc-pack-heu-remove-dead-pastebin'

* mn/doc-pack-heu-remove-dead-pastebin:
  remove dead pastebin link from pack-heuristics document

10 years agoMerge branch 'mm/fast-import-feature-doc'
Junio C Hamano [Thu, 12 Sep 2013 21:41:45 +0000 (14:41 -0700)]
Merge branch 'mm/fast-import-feature-doc'

* mm/fast-import-feature-doc:
  Documentation/fast-import: clarify summary for `feature` command

10 years agoMerge branch 'mm/mediawiki-dumb-push-fix'
Junio C Hamano [Thu, 12 Sep 2013 21:41:41 +0000 (14:41 -0700)]
Merge branch 'mm/mediawiki-dumb-push-fix'

* mm/mediawiki-dumb-push-fix:
  git-remote-mediawiki: no need to update private ref in non-dumb push
  git-remote-mediawiki: use no-private-update capability on dumb push
  transport-helper: add no-private-update capability
  git-remote-mediawiki: add test and check Makefile targets

10 years agoMerge branch 'jc/commit-is-spelled-with-two-ems'
Junio C Hamano [Thu, 12 Sep 2013 21:41:38 +0000 (14:41 -0700)]
Merge branch 'jc/commit-is-spelled-with-two-ems'

* jc/commit-is-spelled-with-two-ems:
  typofix: cherry is spelled with two ars
  typofix: commit is spelled with two ems

10 years agoMerge branch 'jk/config-int-range-check'
Junio C Hamano [Thu, 12 Sep 2013 21:41:00 +0000 (14:41 -0700)]
Merge branch 'jk/config-int-range-check'

"git config" did not provide a way to set or access numbers larger
than a native "int" on the platform; it now provides 64-bit signed
integers on all platforms.

* jk/config-int-range-check:
  git-config: always treat --int as 64-bit internally
  config: make numeric parsing errors more clear
  config: set errno in numeric git_parse_* functions
  config: properly range-check integer values
  config: factor out integer parsing from range checks

10 years agoUpdate draft release notes to 1.8.5
Junio C Hamano [Wed, 11 Sep 2013 22:05:57 +0000 (15:05 -0700)]
Update draft release notes to 1.8.5

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'jc/ls-files-killed-optim'
Junio C Hamano [Wed, 11 Sep 2013 22:03:28 +0000 (15:03 -0700)]
Merge branch 'jc/ls-files-killed-optim'

"git ls-files -k" needs to crawl only the part of the working tree
that may overlap the paths in the index to find killed files, but
shared code with the logic to find all the untracked files, which
made it unnecessarily inefficient.

* jc/ls-files-killed-optim:
  dir.c::test_one_path(): work around directory_exists_in_index_icase() breakage
  t3010: update to demonstrate "ls-files -k" optimization pitfalls
  ls-files -k: a directory only can be killed if the index has a non-directory
  dir.c: use the cache_* macro to access the current index

10 years agoMerge branch 'es/rebase-i-no-abbrev'
Junio C Hamano [Wed, 11 Sep 2013 22:02:29 +0000 (15:02 -0700)]
Merge branch 'es/rebase-i-no-abbrev'

The commit object names in the insn sheet that was prepared at the
beginning of "rebase -i" session can become ambiguous as the
rebasing progresses and the repository gains more commits. Make
sure the internal record is kept with full 40-hex object names.

* es/rebase-i-no-abbrev:
  rebase -i: fix short SHA-1 collision
  t3404: rebase -i: demonstrate short SHA-1 collision
  t3404: make tests more self-contained

10 years agoMerge branch 'rt/rebase-p-no-merge-summary'
Junio C Hamano [Wed, 11 Sep 2013 22:00:56 +0000 (15:00 -0700)]
Merge branch 'rt/rebase-p-no-merge-summary'

"git rebase -p" internally used the merge machinery, but when
rebasing, there should not be a need for merge summary.

* rt/rebase-p-no-merge-summary:
  rebase --preserve-merges: ignore "merge.log" config

10 years agoMerge branch 'tf/gitweb-ss-tweak'
Junio C Hamano [Wed, 11 Sep 2013 22:00:54 +0000 (15:00 -0700)]
Merge branch 'tf/gitweb-ss-tweak'

Tweak Gitweb CSS to layout some elements better.

* tf/gitweb-ss-tweak:
  gitweb: make search help link less ugly
  gitweb: omit the repository owner when it is unset
  gitweb: vertically centre contents of page footer
  gitweb: ensure OPML text fits inside its box

10 years agoMerge branch 'sb/mailmap-freeing-NULL-is-ok'
Junio C Hamano [Wed, 11 Sep 2013 22:00:43 +0000 (15:00 -0700)]
Merge branch 'sb/mailmap-freeing-NULL-is-ok'

* sb/mailmap-freeing-NULL-is-ok:
  mailmap: remove redundant check for freeing memory

10 years agoMerge branch 'js/xread-in-full'
Junio C Hamano [Wed, 11 Sep 2013 21:59:46 +0000 (14:59 -0700)]
Merge branch 'js/xread-in-full'

A call to xread() was used without a loop around to cope with short
read in the codepath to stream new contents to a pack.

* js/xread-in-full:
  stream_to_pack: xread does not guarantee to read all requested bytes

10 years agoMerge branch 'es/rebase-i-respect-core-commentchar'
Junio C Hamano [Wed, 11 Sep 2013 21:58:52 +0000 (14:58 -0700)]
Merge branch 'es/rebase-i-respect-core-commentchar'

"rebase -i" forgot that the comment character can be configurable
while reading its insn sheet.

* es/rebase-i-respect-core-commentchar:
  rebase -i: fix cases ignoring core.commentchar

10 years agoMerge branch 'jn/post-receive-utf8'
Junio C Hamano [Wed, 11 Sep 2013 21:58:46 +0000 (14:58 -0700)]
Merge branch 'jn/post-receive-utf8'

Update post-receive-email script to make sure the message contents
and pathnames are encoded consistently in UTF-8.

* jn/post-receive-utf8:
  hooks/post-receive-email: set declared encoding to utf-8
  hooks/post-receive-email: force log messages in UTF-8
  hooks/post-receive-email: use plumbing instead of git log/show

10 years agoMerge branch 'sh/pull-rebase-preserve'
Junio C Hamano [Wed, 11 Sep 2013 21:57:49 +0000 (14:57 -0700)]
Merge branch 'sh/pull-rebase-preserve'

"git pull --rebase" always flattened the history; pull.rebase can
now be set to "preserve" to invoke "rebase --preserve-merges".

* sh/pull-rebase-preserve:
  pull: allow pull to preserve merges when rebasing

10 years agoMerge branch 'nd/push-no-thin'
Junio C Hamano [Wed, 11 Sep 2013 21:56:58 +0000 (14:56 -0700)]
Merge branch 'nd/push-no-thin'

"git push --no-thin" was a no-op by mistake.

* nd/push-no-thin:
  push: respect --no-thin

10 years agoUpdate draft release notes to 1.8.5 for the second batch of topics
Junio C Hamano [Mon, 9 Sep 2013 21:51:42 +0000 (14:51 -0700)]
Update draft release notes to 1.8.5 for the second batch of topics

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'nd/magic-pathspec'
Junio C Hamano [Mon, 9 Sep 2013 21:50:42 +0000 (14:50 -0700)]
Merge branch 'nd/magic-pathspec'

Use "struct pathspec" interface in more places, instead of array of
characters, the latter of which cannot express magic pathspecs
(e.g. ":(icase)makefile" that matches both Makefile and makefile).

* nd/magic-pathspec:
  add: lift the pathspec magic restriction on "add -p"
  pathspec: catch prepending :(prefix) on pathspec with short magic

10 years agoMerge branch 'jk/mailmap-incomplete-line'
Junio C Hamano [Mon, 9 Sep 2013 21:50:41 +0000 (14:50 -0700)]
Merge branch 'jk/mailmap-incomplete-line'

* jk/mailmap-incomplete-line:
  mailmap: handle mailmap blobs without trailing newlines

10 years agoMerge branch 'sp/clip-read-write-to-8mb'
Junio C Hamano [Mon, 9 Sep 2013 21:50:39 +0000 (14:50 -0700)]
Merge branch 'sp/clip-read-write-to-8mb'

Send a large request to read(2)/write(2) as a smaller but still
reasonably large chunks, which would improve the latency when the
operation needs to be killed and incidentally works around broken
64-bit systems that cannot take a 2GB write or read in one go.

* sp/clip-read-write-to-8mb:
  Revert "compat/clipped-write.c: large write(2) fails on Mac OS X/XNU"
  xread, xwrite: limit size of IO to 8MB

10 years agoMerge branch 'tg/index-struct-sizes'
Junio C Hamano [Mon, 9 Sep 2013 21:50:38 +0000 (14:50 -0700)]
Merge branch 'tg/index-struct-sizes'

The code that reads from a region that mmaps an on-disk index
assumed that "int"/"short" are always 32/16 bits.

* tg/index-struct-sizes:
  read-cache: use fixed width integer types

10 years agoMerge branch 'jc/transport-do-not-use-connect-twice-in-fetch'
Junio C Hamano [Mon, 9 Sep 2013 21:50:37 +0000 (14:50 -0700)]
Merge branch 'jc/transport-do-not-use-connect-twice-in-fetch'

The auto-tag-following code in "git fetch" tries to reuse the same
transport twice when the serving end does not cooperate and does
not give tags that point to commits that are asked for as part of
the primary transfer.  Unfortunately, Git-aware transport helper
interface is not designed to be used more than once, hence this
does not work over smart-http transfer.

* jc/transport-do-not-use-connect-twice-in-fetch:
  builtin/fetch.c: Fix a sparse warning
  fetch: work around "transport-take-over" hack
  fetch: refactor code that fetches leftover tags
  fetch: refactor code that prepares a transport
  fetch: rename file-scope global "transport" to "gtransport"
  t5802: add test for connect helper

10 years agoMerge branch 'es/contacts-blame-L-multi'
Junio C Hamano [Mon, 9 Sep 2013 21:50:36 +0000 (14:50 -0700)]
Merge branch 'es/contacts-blame-L-multi'

* es/contacts-blame-L-multi:
  contacts: reduce git-blame invocations
  contacts: gather all blame sources prior to invoking git-blame
  contacts: validate hunk length earlier

10 years agoMerge branch 'jc/url-match'
Junio C Hamano [Mon, 9 Sep 2013 21:50:32 +0000 (14:50 -0700)]
Merge branch 'jc/url-match'

Allow section.<urlpattern>.var configuration variables to be
treated as a "virtual" section.var given a URL, and use the
mechanism to enhance http.* configuration variables.

This is a reroll of Kyle J. McKay's work.

* jc/url-match:
  builtin/config.c: compilation fix
  config: "git config --get-urlmatch" parses section.<url>.key
  builtin/config: refactor collect_config()
  config: parse http.<url>.<variable> using urlmatch
  config: add generic callback wrapper to parse section.<url>.key
  config: add helper to normalize and match URLs
  http.c: fix parsing of http.sslCertPasswordProtected variable

10 years agoMerge branch 'jl/submodule-mv'
Junio C Hamano [Mon, 9 Sep 2013 21:36:15 +0000 (14:36 -0700)]
Merge branch 'jl/submodule-mv'

"git mv A B" when moving a submodule A does "the right thing",
inclusing relocating its working tree and adjusting the paths in
the .gitmodules file.

* jl/submodule-mv: (53 commits)
  rm: delete .gitmodules entry of submodules removed from the work tree
  mv: update the path entry in .gitmodules for moved submodules
  submodule.c: add .gitmodules staging helper functions
  mv: move submodules using a gitfile
  mv: move submodules together with their work trees
  rm: do not set a variable twice without intermediate reading.
  t6131 - skip tests if on case-insensitive file system
  parse_pathspec: accept :(icase)path syntax
  pathspec: support :(glob) syntax
  pathspec: make --literal-pathspecs disable pathspec magic
  pathspec: support :(literal) syntax for noglob pathspec
  kill limit_pathspec_to_literal() as it's only used by parse_pathspec()
  parse_pathspec: preserve prefix length via PATHSPEC_PREFIX_ORIGIN
  parse_pathspec: make sure the prefix part is wildcard-free
  rename field "raw" to "_raw" in struct pathspec
  tree-diff: remove the use of pathspec's raw[] in follow-rename codepath
  remove match_pathspec() in favor of match_pathspec_depth()
  remove init_pathspec() in favor of parse_pathspec()
  remove diff_tree_{setup,release}_paths
  convert common_prefix() to use struct pathspec
  ...

10 years agoMerge branch 'es/blame-L-twice'
Junio C Hamano [Mon, 9 Sep 2013 21:35:11 +0000 (14:35 -0700)]
Merge branch 'es/blame-L-twice'

Teaches "git blame" to take more than one -L ranges.

* es/blame-L-twice:
  line-range: reject -L line numbers less than 1
  t8001/t8002: blame: add tests of -L line numbers less than 1
  line-range: teach -L^:RE to search from start of file
  line-range: teach -L:RE to search from end of previous -L range
  line-range: teach -L^/RE/ to search from start of file
  line-range-format.txt: document -L/RE/ relative search
  log: teach -L/RE/ to search from end of previous -L range
  blame: teach -L/RE/ to search from end of previous -L range
  line-range: teach -L/RE/ to search relative to anchor point
  blame: document multiple -L support
  t8001/t8002: blame: add tests of multiple -L options
  blame: accept multiple -L ranges
  blame: inline one-line function into its lone caller
  range-set: publish API for re-use by git-blame -L
  line-range-format.txt: clarify -L:regex usage form
  git-log.txt: place each -L option variation on its own line

10 years agoMerge branch 'tr/log-full-diff-keep-true-parents'
Junio C Hamano [Mon, 9 Sep 2013 21:33:16 +0000 (14:33 -0700)]
Merge branch 'tr/log-full-diff-keep-true-parents'

Output from "git log --full-diff -- <pathspec>" looked strange,
because comparison was done with the previous ancestor that touched
the specified <pathspec>, causing the patches for paths outside the
pathspec to show more than the single commit has changed.

Tweak "git reflog -p" for the same reason using the same mechanism.

* tr/log-full-diff-keep-true-parents:
  log: use true parents for diff when walking reflogs
  log: use true parents for diff even when rewriting

10 years agoMerge branch 'jk/cat-file-batch-optim'
Junio C Hamano [Mon, 9 Sep 2013 21:33:07 +0000 (14:33 -0700)]
Merge branch 'jk/cat-file-batch-optim'

Rework the reverted change to `cat-file --batch-check`.

* jk/cat-file-batch-optim:
  cat-file: only split on whitespace when %(rest) is used

10 years agoMerge branch 'es/blame-L-more'
Junio C Hamano [Mon, 9 Sep 2013 21:32:45 +0000 (14:32 -0700)]
Merge branch 'es/blame-L-more'

More fixes to the code to parse the "-L" option in "log" and "blame".

* es/blame-L-more:
  blame: reject empty ranges -L,+0 and -L,-0
  t8001/t8002: blame: demonstrate acceptance of bogus -L,+0 and -L,-0
  blame: reject empty ranges -LX,+0 and -LX,-0
  t8001/t8002: blame: demonstrate acceptance of bogus -LX,+0 and -LX,-0
  log: fix -L bounds checking bug
  t4211: retire soon-to-be unimplementable tests
  t4211: log: demonstrate -L bounds checking bug
  blame: fix -L bounds checking bug
  t8001/t8002: blame: add empty file & partial-line tests
  t8001/t8002: blame: demonstrate -L bounds checking bug
  t8001/t8002: blame: decompose overly-large test

10 years agoMerge branch 'db/http-savecookies'
Junio C Hamano [Mon, 9 Sep 2013 21:32:08 +0000 (14:32 -0700)]
Merge branch 'db/http-savecookies'

* db/http-savecookies:
  t5551: Remove header from curl cookie file
  http: add http.savecookies option to write out HTTP cookies

10 years agoMerge branch 'jc/push-cas'
Junio C Hamano [Mon, 9 Sep 2013 21:30:29 +0000 (14:30 -0700)]
Merge branch 'jc/push-cas'

Allow a safer "rewind of the remote tip" push than blind "--force",
by requiring that the overwritten remote ref to be unchanged since
the new history to replace it was prepared.

The machinery is more or less ready.  The "--force" option is again
the big red button to override any safety, thanks to J6t's sanity
(the original round allowed --lockref to defeat --force).

The logic to choose the default implemented here is fragile
(e.g. "git fetch" after seeing a failure will update the
remote-tracking branch and will make the next "push" pass,
defeating the safety pretty easily).  It is suitable only for the
simplest workflows, and it may hurt users more than it helps them.

* jc/push-cas:
  push: teach --force-with-lease to smart-http transport
  send-pack: fix parsing of --force-with-lease option
  t5540/5541: smart-http does not support "--force-with-lease"
  t5533: test "push --force-with-lease"
  push --force-with-lease: tie it all together
  push --force-with-lease: implement logic to populate old_sha1_expect[]
  remote.c: add command line option parser for "--force-with-lease"
  builtin/push.c: use OPT_BOOL, not OPT_BOOLEAN
  cache.h: move remote/connect API out of it

10 years agoMerge branch 'nd/clone-connectivity-shortcut'
Junio C Hamano [Mon, 9 Sep 2013 21:30:01 +0000 (14:30 -0700)]
Merge branch 'nd/clone-connectivity-shortcut'

* nd/clone-connectivity-shortcut:
  smart http: use the same connectivity check on cloning

10 years agoMerge branch 'jc/diff-filter-negation'
Junio C Hamano [Mon, 9 Sep 2013 21:28:35 +0000 (14:28 -0700)]
Merge branch 'jc/diff-filter-negation'

Teach "git diff --diff-filter" to express "I do not want to see
these classes of changes" more directly by listing only the
unwanted ones in lowercase (e.g. "--diff-filter=d" will show
everything but deletion) and deprecate "diff-files -q" which did
the same thing as "--diff-filter=d".

* jc/diff-filter-negation:
  diff: deprecate -q option to diff-files
  diff: allow lowercase letter to specify what change class to exclude
  diff: reject unknown change class given to --diff-filter
  diff: preparse --diff-filter string argument
  diff: factor out match_filter()
  diff: pass the whole diff_options to diffcore_apply_filter()

10 years agoMerge branch 'ms/fetch-prune-configuration'
Junio C Hamano [Mon, 9 Sep 2013 21:27:11 +0000 (14:27 -0700)]
Merge branch 'ms/fetch-prune-configuration'

Allow fetch.prune and remote.*.prune configuration variables to be set,
and "git fetch" to behave as if "--prune" is given.

"git fetch" that honors remote.*.prune is fine, but I wonder if we
should somehow make "git push" aware of it as well.  Perhaps
remote.*.prune should not be just a boolean, but a 4-way "none",
"push", "fetch", "both"?

* ms/fetch-prune-configuration:
  fetch: make --prune configurable

10 years agogit-config: always treat --int as 64-bit internally
Jeff King [Sun, 8 Sep 2013 08:40:02 +0000 (04:40 -0400)]
git-config: always treat --int as 64-bit internally

When you run "git config --int", the maximum size of integer
you get depends on how git was compiled, and what it
considers to be an "int".

This is almost useful, because your scripts calling "git
config" will behave similarly to git internally. But relying
on this is dubious; you have to actually know how git treats
each value internally (e.g., int versus unsigned long),
which is not documented and is subject to change. And even
if you know it is "unsigned long", we do not have a
git-config option to match that behavior.

Furthermore, you may simply be asking git to store a value
on your behalf (e.g., configuration for a hook). In that
case, the relevant range check has nothing at all to do with
git, but rather with whatever scripting tools you are using
(and git has no way of knowing what the appropriate range is
there).

Not only is the range check useless, but it is actively
harmful, as there is no way at all for scripts to look
at config variables with large values. For instance, one
cannot reliably get the value of pack.packSizeLimit via
git-config. On an LP64 system, git happily uses a 64-bit
"unsigned long" internally to represent the value, but the
script cannot read any value over 2G.

Ideally, the "--int" option would simply represent an
arbitrarily large integer. For practical purposes, however,
a 64-bit integer is large enough, and is much easier to
implement (and if somebody overflows it, we will still
notice the problem, and not simply return garbage).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: make numeric parsing errors more clear
Jeff King [Sun, 8 Sep 2013 08:38:22 +0000 (04:38 -0400)]
config: make numeric parsing errors more clear

If we try to parse an integer config argument and get a
number outside of the representable range, we die with the
cryptic message: "bad config value for '%s'".

We can improve two things:

  1. Show the value that produced the error (e.g., bad
     config value '3g' for 'foo.bar').

  2. Mention the reason the value was rejected (e.g.,
     "invalid unit" versus "out of range").

A few tests need to be updated with the new output, but that
should not be representative of real-world breakage, as
scripts should not be depending on the exact text of our
stderr output, which is subject to i18n anyway.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: set errno in numeric git_parse_* functions
Jeff King [Sun, 8 Sep 2013 08:36:42 +0000 (04:36 -0400)]
config: set errno in numeric git_parse_* functions

When we are parsing an integer or unsigned long, we use
the strto*max functions, which properly set errno to ERANGE
if we get a large value. However, we also do further range
checks after applying our multiplication factor, but do not
set ERANGE. This means that a caller cannot tell if an error
was caused by ERANGE or if the input was simply not a valid
number.

This patch teaches git_parse_signed and git_parse_unsigned to set
ERANGE for range errors, and EINVAL for other errors, so that the
caller can reliably tell these cases apart.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: properly range-check integer values
Jeff King [Sun, 8 Sep 2013 08:33:08 +0000 (04:33 -0400)]
config: properly range-check integer values

When we look at a config value as an integer using the
git_config_int function, we carefully range-check the value
we get and complain if it is out of our range. But the range
we compare to is that of a "long", which we then cast to an
"int" in the function's return value. This means that on
systems where "int" and "long" have different sizes (e.g.,
LP64 systems), we may pass the range check, but then return
nonsense by truncating the value as we cast it to an int.

We can solve this by converting git_parse_long into
git_parse_int, and range-checking the "int" range. Nobody
actually cared that we used a "long" internally, since the
result was truncated anyway. And the only other caller of
git_parse_long is git_config_maybe_bool, which should be
fine to just use int (though we will now forbid out-of-range
nonsense like setting "merge.ff" to "10g" to mean "true",
which is probably a good thing).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: factor out integer parsing from range checks
Jeff King [Sun, 8 Sep 2013 08:29:27 +0000 (04:29 -0400)]
config: factor out integer parsing from range checks

When we are parsing integers for config, we use an intmax_t
(or uintmax_t) internally, and then check against the size
of our result type at the end. We can parameterize the
maximum representable value, which will let us re-use the
parsing code for a variety of range checks.

Unfortunately, we cannot combine the signed and unsigned
parsing functions easily, as we have to rely on the signed
and unsigned C types internally.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoremote-bzr: reuse bzrlib transports when possible
Richard Hansen [Sun, 8 Sep 2013 05:47:49 +0000 (01:47 -0400)]
remote-bzr: reuse bzrlib transports when possible

Pass a list of open bzrlib.transport.Transport objects to each bzrlib
function that might create a transport.  This enables bzrlib to reuse
existing transports when possible, avoiding multiple concurrent
connections to the same remote server.

If the remote server is accessed via ssh, this fixes a couple of
problems:
  * If the user does not have keys loaded into an ssh agent, the user
    may be prompted for a password multiple times.
  * If the user is using OpenSSH and the ControlMaster setting is set
    to auto, git-remote-bzr might hang.  This is because bzrlib closes
    the multiple ssh sessions in an undefined order and might try to
    close the master ssh session before the other sessions.  The
    master ssh process will not exit until the other sessions have
    exited, causing a deadlock.  (The ssh sessions are closed in an
    undefined order because bzrlib relies on the Python garbage
    collector to trigger ssh session termination.)

Signed-off-by: Richard Hansen <rhansen@bbn.com>
Acked-by: Felipe Contreras <felipe.contreras@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agotypofix: cherry is spelled with two ars
Junio C Hamano [Thu, 5 Sep 2013 21:51:17 +0000 (14:51 -0700)]
typofix: cherry is spelled with two ars

Do not say chery; it is spelled cherry.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoSync with maint
Junio C Hamano [Thu, 5 Sep 2013 21:41:40 +0000 (14:41 -0700)]
Sync with maint

* maint:
  Documentation/git-merge.txt: fix formatting of example block

10 years agoMerge branch 'nd/fetch-pack-shallow-fix' into maint
Junio C Hamano [Thu, 5 Sep 2013 21:40:58 +0000 (14:40 -0700)]
Merge branch 'nd/fetch-pack-shallow-fix' into maint

The recent "short-cut clone connectivity check" topic broke a shallow
repository when a fetch operation tries to auto-follow tags.

* nd/fetch-pack-shallow-fix:
  fetch-pack: do not remove .git/shallow file when --depth is not specified

10 years agoMerge branch 'hv/config-from-blob' into maint
Junio C Hamano [Thu, 5 Sep 2013 21:40:18 +0000 (14:40 -0700)]
Merge branch 'hv/config-from-blob' into maint

Compilation fix on platforms with fgetc() and friends defined as
macros.

* hv/config-from-blob:
  config: do not use C function names as struct members

10 years agoMerge branch 'maint-1.8.3' into maint
Junio C Hamano [Thu, 5 Sep 2013 21:24:59 +0000 (14:24 -0700)]
Merge branch 'maint-1.8.3' into maint

* maint-1.8.3:
  Documentation/git-merge.txt: fix formatting of example block

10 years agoMerge branch 'maint-1.8.2' into maint-1.8.3
Junio C Hamano [Thu, 5 Sep 2013 21:24:52 +0000 (14:24 -0700)]
Merge branch 'maint-1.8.2' into maint-1.8.3

* maint-1.8.2:
  Documentation/git-merge.txt: fix formatting of example block

10 years agoadd: lift the pathspec magic restriction on "add -p"
Nguyễn Thái Ngọc Duy [Thu, 5 Sep 2013 03:40:39 +0000 (10:40 +0700)]
add: lift the pathspec magic restriction on "add -p"

Since 480ca64 (convert run_add_interactive to use struct pathspec -
2013-07-14), we have unconditionally passed :(prefix)xxx to
add-interactive.perl. It implies that all commands
add-interactive.perl calls must be aware of pathspec magic, or
:(prefix) is barfed. The restriction to :/ only becomes unnecessary.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agopathspec: catch prepending :(prefix) on pathspec with short magic
Nguyễn Thái Ngọc Duy [Thu, 5 Sep 2013 03:40:38 +0000 (10:40 +0700)]
pathspec: catch prepending :(prefix) on pathspec with short magic

:(prefix) is in the long form. Suppose people pass :!foo with '!'
being the short form of magic 'bar', the code will happily turn it to
:(prefix..)!foo, which makes '!' part of the path and no longer a magic.

The correct form must be ':(prefix..,bar)foo', but as so far we
haven't had any magic in short form yet (*), the code to convert from
short form to long one will be inactive anyway. Let's postpone it
until a real short form magic appears.

(*) The short form magic '/' is a special case and won't be caught by
this die(), which is correct. When '/' magic is detected, prefixlen is
set back to 0 and the whole "if (prefixlen..)" block is skipped.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation/git-merge.txt: fix formatting of example block
Andreas Schwab [Thu, 5 Sep 2013 15:12:45 +0000 (17:12 +0200)]
Documentation/git-merge.txt: fix formatting of example block

You need at least four dashes in a line to have it recognized as listing
block delimiter by asciidoc.

Signed-off-by: Andreas Schwab <schwab@linux-m68k.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agotypofix: commit is spelled with two ems
Junio C Hamano [Wed, 4 Sep 2013 22:28:45 +0000 (15:28 -0700)]
typofix: commit is spelled with two ems

There are a handful of instances where we say commmit when we mean
commit.  Fix them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agopull: allow pull to preserve merges when rebasing
Stephen Haberman [Tue, 13 Aug 2013 03:43:42 +0000 (22:43 -0500)]
pull: allow pull to preserve merges when rebasing

If a user is working on master, and has merged in their feature branch, but now
has to "git pull" because master moved, with pull.rebase their feature branch
will be flattened into master.

This is because "git pull" currently does not know about rebase's preserve
merges flag, which would avoid this behavior, as it would instead replay just
the merge commit of the feature branch onto the new master, and not replay each
individual commit in the feature branch.

Add a --rebase=preserve option, which will pass along --preserve-merges to
rebase.

Also add 'preserve' to the allowed values for the pull.rebase config setting.

Signed-off-by: Stephen Haberman <stephen@exigencecorp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoUpdate draft release notes after merging the first batch of topics
Junio C Hamano [Wed, 4 Sep 2013 19:41:05 +0000 (12:41 -0700)]
Update draft release notes after merging the first batch of topics

10 years agoMerge branch 'sb/parseopt-boolean-removal'
Junio C Hamano [Wed, 4 Sep 2013 19:39:02 +0000 (12:39 -0700)]
Merge branch 'sb/parseopt-boolean-removal'

Convert most uses of OPT_BOOLEAN/OPTION_BOOLEAN that can use
OPT_BOOL/OPTION_BOOLEAN which have much saner semantics, and turn
remaining ones into OPT_SET_INT, OPT_COUNTUP, etc. as necessary.

* sb/parseopt-boolean-removal:
  revert: use the OPT_CMDMODE for parsing, reducing code
  checkout-index: fix negations of even numbers of -n
  config parsing options: allow one flag multiple times
  hash-object: replace stdin parsing OPT_BOOLEAN by OPT_COUNTUP
  branch, commit, name-rev: ease up boolean conditions
  checkout: remove superfluous local variable
  log, format-patch: parsing uses OPT__QUIET
  Replace deprecated OPT_BOOLEAN by OPT_BOOL
  Remove deprecated OPTION_BOOLEAN for parsing arguments

10 years agoMerge branch 'jc/parseopt-command-modes'
Junio C Hamano [Wed, 4 Sep 2013 19:37:52 +0000 (12:37 -0700)]
Merge branch 'jc/parseopt-command-modes'

Many commands use --dashed-option as a operation mode selector
(e.g. "git tag --delete") that the user can use at most one
(e.g. "git tag --delete --verify" is a nonsense) and you cannot
negate (e.g. "git tag --no-delete" is a nonsense).  Make it easier
for users of parse_options() to enforce these restrictions.

* jc/parseopt-command-modes:
  tag: use OPT_CMDMODE
  parse-options: add OPT_CMDMODE()

10 years agoMerge branch 'jl/some-submodule-config-are-not-boolean'
Junio C Hamano [Wed, 4 Sep 2013 19:36:51 +0000 (12:36 -0700)]
Merge branch 'jl/some-submodule-config-are-not-boolean'

* jl/some-submodule-config-are-not-boolean:
  avoid segfault on submodule.*.path set to an empty "true"

10 years agoMerge branch 'sg/bash-prompt-lf-in-cwd-test'
Junio C Hamano [Wed, 4 Sep 2013 19:36:47 +0000 (12:36 -0700)]
Merge branch 'sg/bash-prompt-lf-in-cwd-test'

* sg/bash-prompt-lf-in-cwd-test:
  bash prompt: test the prompt with newline in repository path

10 years agoMerge branch 'sb/diff-delta-remove-needless-comparison'
Junio C Hamano [Wed, 4 Sep 2013 19:36:44 +0000 (12:36 -0700)]
Merge branch 'sb/diff-delta-remove-needless-comparison'

* sb/diff-delta-remove-needless-comparison:
  create_delta_index: simplify condition always evaluating to true

10 years agoMerge branch 'fc/unpack-trees-leakfix'
Junio C Hamano [Wed, 4 Sep 2013 19:36:41 +0000 (12:36 -0700)]
Merge branch 'fc/unpack-trees-leakfix'

* fc/unpack-trees-leakfix:
  unpack-trees: plug a memory leak

10 years agoMerge branch 'aj/p4-symlink-lose-nl'
Junio C Hamano [Wed, 4 Sep 2013 19:36:37 +0000 (12:36 -0700)]
Merge branch 'aj/p4-symlink-lose-nl'

* aj/p4-symlink-lose-nl:
  git-p4: Fix occasional truncation of symlink contents.

10 years agoMerge branch 'fc/remote-hg-shared-setup'
Junio C Hamano [Wed, 4 Sep 2013 19:36:32 +0000 (12:36 -0700)]
Merge branch 'fc/remote-hg-shared-setup'

* fc/remote-hg-shared-setup:
  remote-hg: add shared repo upgrade
  remote-hg: ensure shared repo is initialized

10 years agoMerge branch 'sb/misc-cleanup'
Junio C Hamano [Wed, 4 Sep 2013 19:36:30 +0000 (12:36 -0700)]
Merge branch 'sb/misc-cleanup'

* sb/misc-cleanup:
  rm: remove unneeded null pointer check
  diff: fix a possible null pointer dereference
  diff: remove ternary operator evaluating always to true

10 years agoMerge branch 'nd/gc-lock-against-each-other'
Junio C Hamano [Wed, 4 Sep 2013 19:35:34 +0000 (12:35 -0700)]
Merge branch 'nd/gc-lock-against-each-other'

* nd/gc-lock-against-each-other:
  gc: reject if another gc is running, unless --force is given

10 years agoMerge branch 'ap/remote-hg-tilde-is-home-directory'
Junio C Hamano [Wed, 4 Sep 2013 19:33:57 +0000 (12:33 -0700)]
Merge branch 'ap/remote-hg-tilde-is-home-directory'

* ap/remote-hg-tilde-is-home-directory:
  remote-hg: fix path when cloning with tilde expansion

10 years agoMerge branch 'mm/no-shell-escape-in-die-message'
Junio C Hamano [Wed, 4 Sep 2013 19:32:15 +0000 (12:32 -0700)]
Merge branch 'mm/no-shell-escape-in-die-message'

Fixes a minor bug in "git rebase -i" (there could be others, as the
root cause is pretty generic) where the code feeds a random, data
dependeant string to 'echo' and expects it to come out literally.

* mm/no-shell-escape-in-die-message:
  die_with_status: use "printf '%s\n'", not "echo"

10 years agoMerge branch 'tr/fd-gotcha-fixes'
Junio C Hamano [Wed, 4 Sep 2013 19:32:11 +0000 (12:32 -0700)]
Merge branch 'tr/fd-gotcha-fixes'

Finishing touches to an earlier fix already in 'master'.

* tr/fd-gotcha-fixes:
  t0070: test that git_mkstemps correctly checks return value of open()

10 years agoMerge branch 'bc/unuse-packfile'
Junio C Hamano [Wed, 4 Sep 2013 19:30:21 +0000 (12:30 -0700)]
Merge branch 'bc/unuse-packfile'

Handle memory pressure and file descriptor pressure separately when
deciding to release pack windows to honor resource limits.

* bc/unuse-packfile:
  Don't close pack fd when free'ing pack windows
  sha1_file: introduce close_one_pack() to close packs on fd pressure

10 years agoMerge branch 'da/darwin'
Junio C Hamano [Wed, 4 Sep 2013 19:28:15 +0000 (12:28 -0700)]
Merge branch 'da/darwin'

* da/darwin:
  OS X: Fix redeclaration of die warning
  Makefile: Fix APPLE_COMMON_CRYPTO with BLK_SHA1
  imap-send: use Apple's Security framework for base64 encoding

10 years agoMerge branch 'nd/sq-quote-buf'
Junio C Hamano [Wed, 4 Sep 2013 19:28:12 +0000 (12:28 -0700)]
Merge branch 'nd/sq-quote-buf'

Code simplification as a preparatory step to something larger.

* nd/sq-quote-buf:
  quote: remove sq_quote_print()
  tar-tree: remove dependency on sq_quote_print()
  for-each-ref, quote: convert *_quote_print -> *_quote_buf

10 years agoMerge branch 'rr/feed-real-path-to-editor'
Junio C Hamano [Wed, 4 Sep 2013 19:26:54 +0000 (12:26 -0700)]
Merge branch 'rr/feed-real-path-to-editor'

* rr/feed-real-path-to-editor:
  editor: use canonicalized absolute path

10 years agoMerge branch 'jk/fast-import-empty-ls'
Junio C Hamano [Wed, 4 Sep 2013 19:23:35 +0000 (12:23 -0700)]
Merge branch 'jk/fast-import-empty-ls'

* jk/fast-import-empty-ls:
  fast-import: allow moving the root tree
  fast-import: allow ls or filecopy of the root tree
  fast-import: set valid mode on root tree in "ls"
  t9300: document fast-import empty path issues

10 years agoMerge branch 'km/svn-1.8-serf-only'
Junio C Hamano [Wed, 4 Sep 2013 19:23:33 +0000 (12:23 -0700)]
Merge branch 'km/svn-1.8-serf-only'

Subversion 1.8.0 that was recently released breaks older subversion
clients coming over http/https in various ways.

* km/svn-1.8-serf-only:
  Git.pm: revert _temp_cache use of temp_is_locked
  git-svn: allow git-svn fetching to work using serf
  Git.pm: add new temp_is_locked function

10 years agoMerge branch 'jc/check-x-z'
Junio C Hamano [Wed, 4 Sep 2013 19:23:24 +0000 (12:23 -0700)]
Merge branch 'jc/check-x-z'

"git check-ignore -z" applied the NUL termination to both its input
(with --stdin) and its output, but "git check-attr -z" ignored the
option on the output side.

This is potentially a backward incompatible fix.  Let's see if
anybody screams before deciding if we want to do anything to help
existing users (there may be none).

* jc/check-x-z:
  check-attr -z: a single -z should apply to both input and output
  check-ignore -z: a single -z should apply to both input and output
  check-attr: the name of the character is NUL, not NULL
  check-ignore: the name of the character is NUL, not NULL

10 years agoMerge branch 'maint'
Junio C Hamano [Tue, 3 Sep 2013 20:58:16 +0000 (13:58 -0700)]
Merge branch 'maint'

* maint:
  fix shell syntax error in template
  l10n: fr.po: hotfix for commit 6b388fc

10 years agoMerge git://github.com/git-l10n/git-po into maint
Junio C Hamano [Tue, 3 Sep 2013 20:58:03 +0000 (13:58 -0700)]
Merge git://github.com/git-l10n/git-po into maint

* git://github.com/git-l10n/git-po:
  l10n: fr.po: hotfix for commit 6b388fc

10 years agoMerge branch 'maint-1.8.3' into maint
Junio C Hamano [Tue, 3 Sep 2013 20:54:32 +0000 (13:54 -0700)]
Merge branch 'maint-1.8.3' into maint

* maint-1.8.3:
  fix shell syntax error in template

10 years agoMerge branch 'maint-1.8.2' into maint-1.8.3
Junio C Hamano [Tue, 3 Sep 2013 20:54:26 +0000 (13:54 -0700)]
Merge branch 'maint-1.8.2' into maint-1.8.3

* maint-1.8.2:
  fix shell syntax error in template

10 years agogit-remote-mediawiki: no need to update private ref in non-dumb push
Matthieu Moy [Mon, 2 Sep 2013 07:19:48 +0000 (09:19 +0200)]
git-remote-mediawiki: no need to update private ref in non-dumb push

We used to update the private ref ourselves, but this update is now
done by default since 664059fb (transport-helper: update remote
helper namespace, 2013-04-17).

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agogit-remote-mediawiki: use no-private-update capability on dumb push
Matthieu Moy [Mon, 2 Sep 2013 07:19:47 +0000 (09:19 +0200)]
git-remote-mediawiki: use no-private-update capability on dumb push

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agotransport-helper: add no-private-update capability
Matthieu Moy [Tue, 3 Sep 2013 15:45:14 +0000 (17:45 +0200)]
transport-helper: add no-private-update capability

Since 664059fb (transport-helper: update remote helper namespace,
2013-04-17), a 'push' operation on a remote helper updates the
private ref by default. This is often a good thing, but it can also
be desirable to disable this update to force the next 'pull' to
re-import the pushed revisions.

Allow remote-helpers to disable the automatic update by introducing a new
capability.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoStart the post-1.8.4 cycle
Junio C Hamano [Fri, 30 Aug 2013 17:16:16 +0000 (10:16 -0700)]
Start the post-1.8.4 cycle

It is tentatively called 1.8.5, but it should be an easy matter of
renaming the release-notes file and RelNotes symlink to later call
it 1.9 near the end of the cycle if we wanted to.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoMerge branch 'bc/completion-for-bash-3.0'
Junio C Hamano [Fri, 30 Aug 2013 17:10:55 +0000 (10:10 -0700)]
Merge branch 'bc/completion-for-bash-3.0'

Some people still use rather old versions of bash, which cannot
grok some constructs like 'printf -v varname' the prompt and
completion code started to use recently.

* bc/completion-for-bash-3.0:
  contrib/git-prompt.sh: handle missing 'printf -v' more gracefully
  t9902-completion.sh: old Bash still does not support array+=('') notation
  git-completion.bash: use correct Bash/Zsh array length syntax

10 years agoMerge branch 'sp/doc-smart-http'
Junio C Hamano [Fri, 30 Aug 2013 17:10:51 +0000 (10:10 -0700)]
Merge branch 'sp/doc-smart-http'

* sp/doc-smart-http:
  Document the HTTP transport protocols

10 years agoMerge branch 'mm/war-on-whatchanged'
Junio C Hamano [Fri, 30 Aug 2013 17:08:26 +0000 (10:08 -0700)]
Merge branch 'mm/war-on-whatchanged'

* mm/war-on-whatchanged:
  whatchanged: document its historical nature
  core-tutorial: trim the section on Inspecting Changes

10 years agoMerge branch 'rt/doc-merge-file-diff3'
Junio C Hamano [Fri, 30 Aug 2013 17:08:23 +0000 (10:08 -0700)]
Merge branch 'rt/doc-merge-file-diff3'

* rt/doc-merge-file-diff3:
  Documentation/git-merge-file: document option "--diff3"

10 years agoMerge branch 'mb/docs-favor-en-us'
Junio C Hamano [Fri, 30 Aug 2013 17:08:19 +0000 (10:08 -0700)]
Merge branch 'mb/docs-favor-en-us'

Declare that the official grammar & spelling of the source of this
project is en_US, but strongly discourage patches only to "fix"
existing en_UK strings to avoid unnecessary churns.

* mb/docs-favor-en-us:
  Provide some linguistic guidance for the documentation.

10 years agoMerge branch 'rj/doc-rev-parse'
Junio C Hamano [Fri, 30 Aug 2013 17:08:12 +0000 (10:08 -0700)]
Merge branch 'rj/doc-rev-parse'

* rj/doc-rev-parse:
  rev-parse(1): logically group options
  rev-parse: remove restrictions on some options

10 years agoMerge branch 'hv/config-from-blob'
Junio C Hamano [Fri, 30 Aug 2013 17:06:52 +0000 (10:06 -0700)]
Merge branch 'hv/config-from-blob'

Portability fix.

* hv/config-from-blob:
  config: do not use C function names as struct members

10 years agoMerge branch 'nd/fetch-pack-shallow-fix'
Junio C Hamano [Fri, 30 Aug 2013 17:05:55 +0000 (10:05 -0700)]
Merge branch 'nd/fetch-pack-shallow-fix'

The recent "short-cut clone connectivity check" topic broke a
shallow repository when a fetch operation tries to auto-follow tags.

* nd/fetch-pack-shallow-fix:
  fetch-pack: do not remove .git/shallow file when --depth is not specified

10 years agofix shell syntax error in template
Thorsten Glaser [Fri, 30 Aug 2013 10:40:30 +0000 (12:40 +0200)]
fix shell syntax error in template

An if clause must not be empty; add a "colon" command.

Signed-off-by: Thorsten Glaser <t.glaser@tarent.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agol10n: fr.po: hotfix for commit 6b388fc
Sebastien Helleu [Sun, 25 Aug 2013 09:45:13 +0000 (11:45 +0200)]
l10n: fr.po: hotfix for commit 6b388fc

Fix many typos and add some new translations (1277/2080 messages
translated).

Closes git-l10n/git-po/pull/63.

Signed-off-by: Sebastien Helleu <flashcode@flashtux.org>
Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
10 years agogit-remote-mediawiki: add test and check Makefile targets
Matthieu Moy [Thu, 29 Aug 2013 18:58:21 +0000 (20:58 +0200)]
git-remote-mediawiki: add test and check Makefile targets

There are a few level 4 and 2 perlcritic issues in the current code. We
make level 5 fatal, and keep level 2 as warnings.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: rewrite core.pager documentation
Junio C Hamano [Wed, 28 Aug 2013 20:26:12 +0000 (13:26 -0700)]
config: rewrite core.pager documentation

The text mentions core.pager and GIT_PAGER without giving the
overall picture of precedences.  Borrow a better description from
the git-var(1) documentation.

The use of the mechanism to allow system-wide, global and
per-repository configuration files is not limited to this particular
variable.  Remove it to clarify the paragraph.

Rewrite the part that explains how the environment variable LESS is
set to Git's default value, and how to selectively customize it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agobuiltin/fetch.c: Fix a sparse warning
Ramsay Jones [Wed, 28 Aug 2013 18:56:17 +0000 (19:56 +0100)]
builtin/fetch.c: Fix a sparse warning

Sparse issues an "'prepare_transport' was not declared. Should it
be static?" warning. In order to suppress the warning, since this
symbol only requires file scope, we simply add the static modifier
to it's declaration.

Signed-off-by: Ramsay Jones <ramsay@ramsay1.demon.co.uk>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agomailmap: handle mailmap blobs without trailing newlines
Jeff King [Wed, 28 Aug 2013 01:41:39 +0000 (21:41 -0400)]
mailmap: handle mailmap blobs without trailing newlines

The read_mailmap_buf function reads each line of the mailmap
using strchrnul, like:

    const char *end = strchrnul(buf, '\n');
    unsigned long linelen = end - buf + 1;

But that's off-by-one when we actually hit the NUL byte; our
line does not have a terminator, and so is only "end - buf"
bytes long. As a result, when we subtract the linelen from
the total len, we end up with (unsigned long)-1 bytes left
in the buffer, and we start reading random junk from memory.

We could fix it with:

    unsigned long linelen = end - buf + !!*end;

but let's take a step back for a moment. It's questionable
in the first place for a function that takes a buffer and
length to be using strchrnul. But it works because we only
have one caller (and are only likely to ever have this one),
which is handing us data from read_sha1_file. Which means
that it's always NUL-terminated.

Instead of tightening the assumptions to make the
buffer/length pair work for a caller that doesn't actually
exist, let's let loosen the assumptions to what the real
caller has: a modifiable, NUL-terminated string.

This makes the code simpler and shorter (because we don't
have to correlate strchrnul with the length calculation),
correct (because the code with the off-by-one just goes
away), and more efficient (we can drop the extra allocation
we needed to create NUL-terminated strings for each line,
and just terminate in place).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoconfig: do not use C function names as struct members
Jeff King [Mon, 26 Aug 2013 21:57:18 +0000 (17:57 -0400)]
config: do not use C function names as struct members

According to C99, section 7.1.4:

  Any function declared in a header may be additionally
  implemented as a function-like macro defined in the
  header.

Therefore calling our struct member function pointer "fgetc"
may run afoul of unwanted macro expansion when we call:

  char c = cf->fgetc(cf);

This turned out to be a problem on uclibc, which defines
fgetc as a macro and causes compilation failure.

The standard suggests fixing this in a few ways:

  1. Using extra parentheses to inhibit the function-like
     macro expansion. E.g., "(cf->fgetc)(cf)". This is
     undesirable as it's ugly, and each call site needs to
     remember to use it (and on systems without the macro,
     forgetting will compile just fine).

  2. Using #undef (because a conforming implementation must
     also be providing fgetc as a function). This is
     undesirable because presumably the implementation was
     using the macro for a performance benefit, and we are
     dropping that optimization.

Instead, we can simply use non-colliding names.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agoDocumentation/remote-helpers: document common use-case for private ref
Matthieu Moy [Mon, 26 Aug 2013 09:21:39 +0000 (11:21 +0200)]
Documentation/remote-helpers: document common use-case for private ref

The current documentation mentions the private ref namespace, but does
not really explain why it can be useful.

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agorebase -i: fix short SHA-1 collision
Junio C Hamano [Sat, 24 Aug 2013 00:10:42 +0000 (20:10 -0400)]
rebase -i: fix short SHA-1 collision

The 'todo' sheet for interactive rebase shows abbreviated SHA-1's and
then performs its operations upon those shortened values. This can lead
to an abort if the SHA-1 of a reworded or edited commit is no longer
unique within the abbreviated SHA-1 space and a subsequent SHA-1 in the
todo list has the same abbreviated value.

For example:

  edit f00dfad first
  pick badbeef second

If, after editing, the new SHA-1 of "first" also has prefix badbeef,
then the subsequent 'pick badbeef second' will fail since badbeef is no
longer a unique SHA-1 abbreviation:

  error: short SHA1 badbeef is ambiguous.
  fatal: Needed a single revision
  Invalid commit name: badbeef

Fix this problem by expanding the SHA-1's in the todo list before
performing the operations.

[es: also collapse & expand SHA-1's for --edit-todo; respect
core.commentchar in transform_todo_ids(); compose commit message]

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
10 years agot3404: rebase -i: demonstrate short SHA-1 collision
Eric Sunshine [Sat, 24 Aug 2013 00:10:41 +0000 (20:10 -0400)]
t3404: rebase -i: demonstrate short SHA-1 collision

The 'todo' sheet for interactive rebase shows abbreviated SHA-1's and
then performs its operations upon those shortened values. This can lead
to an abort if the SHA-1 of a reworded or edited commit is no longer
unique within the abbreviated SHA-1 space and a subsequent SHA-1 in the
todo list has the same abbreviated value.

For example:

  edit f00dfad first
  pick badbeef second

If, after editing, the new SHA-1 of "first" also has prefix badbeef,
then the subsequent 'pick badbeef second' will fail since badbeef is no
longer a unique SHA-1 abbreviation:

  error: short SHA1 badbeef is ambiguous.
  fatal: Needed a single revision
  Invalid commit name: badbeef

Demonstrate this problem with a couple of specially crafted commits
which initially have distinct abbreviated SHA-1's, but for which the
abbreviated SHA-1's collide after a simple rewording of the first
commit's message.

Signed-off-by: Eric Sunshine <sunshine@sunshineco.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>