Commit Graph

41675 Commits

Author SHA1 Message Date
Junio C Hamano
5135d1c3d2 Merge branch 'nd/clear-gitenv-upon-use-of-alias'
d95138e6 (setup: set env $GIT_WORK_TREE when work tree is set, like
$GIT_DIR, 2015-06-26) attempted to work around a glitch in alias
handling by overwriting GIT_WORK_TREE environment variable to
affect subprocesses when set_git_work_tree() gets called, which
resulted in a rather unpleasant regression to "clone" and "init".
Try to address the same issue by always restoring the environment
and respawning the real underlying command when handling alias.

* nd/clear-gitenv-upon-use-of-alias:
  run-command: don't warn on SIGPIPE deaths
  git.c: make sure we do not leak GIT_* to alias scripts
  setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
  git.c: make it clear save_env() is for alias handling only
2016-01-20 11:43:26 -08:00
Junio C Hamano
cc14ea8cf4 Merge branch 'nd/ita-cleanup'
Paths that have been told the index about with "add -N" are not
quite yet in the index, but a few commands behaved as if they
already are in a harmful way.

* nd/ita-cleanup:
  grep: make it clear i-t-a entries are ignored
  add and use a convenience macro ce_intent_to_add()
  blame: remove obsolete comment
2016-01-20 11:43:25 -08:00
Junio C Hamano
7a450b48e7 Merge branch 'nd/dir-exclude-cleanup'
The "exclude_list" structure has the usual "alloc, nr" pair of
fields to be used by ALLOC_GROW(), but clear_exclude_list() forgot
to reset 'alloc' to 0 when it cleared 'nr'to discard the managed
array.

* nd/dir-exclude-cleanup:
  dir.c: clean the entire struct in clear_exclude_list()
2016-01-20 11:43:24 -08:00
Junio C Hamano
4fd1359158 Merge branch 'jk/pack-revindex'
In-core storage of the reverse index for .pack files (which lets
you go from a pack offset to an object name) has been streamlined.

* jk/pack-revindex:
  pack-revindex: store entries directly in packed_git
  pack-revindex: drop hash table
2016-01-20 11:43:23 -08:00
Junio C Hamano
b4e8e0ed2d Merge branch 'mh/notes-allow-reading-treeish'
Some "git notes" operations, e.g. "git log --notes=<note>", should
be able to read notes from any tree-ish that is shaped like a notes
tree, but the notes infrastructure required that the argument must
be a ref under refs/notes/.  Loosen it to require a valid ref only
when the operation would update the notes (in which case we must
have a place to store the updated notes tree, iow, a ref).

* mh/notes-allow-reading-treeish:
  notes: allow treeish expressions as notes ref
2016-01-20 11:43:21 -08:00
Junio C Hamano
fc10eb5b87 Sync with maint
* maint:
  l10n: ko.po: Add Korean translation
2016-01-12 15:21:00 -08:00
Junio C Hamano
c9906e47c0 First batch for post 2.7 cycle
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-12 15:20:51 -08:00
Junio C Hamano
bdd1cc2092 Merge branch 'vl/grep-configurable-threads'
"git grep" can now be configured (or told from the command line)
how many threads to use when searching in the working tree files.

* vl/grep-configurable-threads:
  grep: add --threads=<num> option and grep.threads configuration
  grep: slight refactoring to the code that disables threading
  grep: allow threading even on a single-core machine
2016-01-12 15:16:55 -08:00
Junio C Hamano
72d25911eb Merge branch 'ea/blame-progress'
"git blame" learned to produce the progress eye-candy when it takes
too much time before emitting the first line of the result.

* ea/blame-progress:
  blame: add support for --[no-]progress option
2016-01-12 15:16:54 -08:00
Junio C Hamano
187c0d3d9e Merge branch 'sb/submodule-parallel-fetch'
Add a framework to spawn a group of processes in parallel, and use
it to run "git fetch --recurse-submodules" in parallel.

Rerolled and this seems to be a lot cleaner.  The merge of the
earlier one to 'next' has been reverted.

* sb/submodule-parallel-fetch:
  submodules: allow parallel fetching, add tests and documentation
  fetch_populated_submodules: use new parallel job processing
  run-command: add an asynchronous parallel child processor
  sigchain: add command to pop all common signals
  strbuf: add strbuf_read_once to read without blocking
  xread: poll on non blocking fds
  submodule.c: write "Fetching submodule <foo>" to stderr
2016-01-12 15:16:54 -08:00
Junio C Hamano
7b9d1b9556 Merge branch 'ps/push-delete-option'
"branch --delete" has "branch -d" but "push --delete" does not.

* ps/push-delete-option:
  push: add '-d' as shorthand for '--delete'
  push: add '--delete' flag to synopsis
2016-01-12 15:16:54 -08:00
Junio C Hamano
ce7da1d281 Merge branch 'ep/make-phoney'
A slight update to the Makefile.

* ep/make-phoney:
  Makefile: add missing phony target
2016-01-12 15:16:53 -08:00
Junio C Hamano
d82d093456 Merge branch 'nd/stop-setenv-work-tree'
An earlier change in 2.5.x-era broke users' hooks and aliases by
exporting GIT_WORK_TREE to point at the root of the working tree,
interfering when they tried to use a different working tree without
setting GIT_WORK_TREE environment themselves.

* nd/stop-setenv-work-tree:
  Revert "setup: set env $GIT_WORK_TREE when work tree is set, like $GIT_DIR"
2016-01-12 15:16:53 -08:00
Mike Hommey
ee76f92fe8 notes: allow treeish expressions as notes ref
init_notes() is the main point of entry to the notes API. It ensures
that the input can be used as ref, because it needs a ref to update to
store notes tree after modifying it.

There however are many use cases where notes tree is only read, e.g.
"git log --notes=...".  Any notes-shaped treeish could be used for such
purpose, but it is not allowed due to existing restriction.

Allow treeish expressions to be used in the case the notes tree is going
to be used without write "permissions".  Add a flag to distinguish
whether the notes tree is intended to be used read-only, or will be
updated.

With this change, operations that use notes read-only can be fed any
notes-shaped tree-ish can be used, e.g. git log --notes=notes@{1}.

Signed-off-by: Mike Hommey <mh@glandium.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-12 15:10:01 -08:00
Junio C Hamano
1b0b6dd072 Merge branch 'maint' of git://github.com/git-l10n/git-po into maint
* 'maint' of git://github.com/git-l10n/git-po:
  l10n: ko.po: Add Korean translation
2016-01-12 15:05:05 -08:00
Junio C Hamano
754884255b Git 2.7
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-04 14:08:04 -08:00
Junio C Hamano
3e9226acc8 Git 2.6.5
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJWiuzQAAoJELC16IaWr+bL9q4P/A9p1EMRvT1Bgw0umQosE0Bc
 U241cR8K3lH4CaJZTBreNcDlHJljmf1nzBLbSemniGn+7fwQQRsRva9ts2gOdWUX
 ekJq6Uj5U1fwEUVLVJWCaEqe8QORGGR5DsrlwoitjTZ8AAzRuLcCDZzNADkl64qD
 D3q8AFlWIhFIP12e1FxveTV5yhy1FQcAG90uYpWdAKkMPzciAM6ChqJyBJ+OCZXb
 DI1zoX1rSWtG27q9D2j3s0hc27glovW1khGMOfTQKAzgkCZLsqFOombTn8ndVPv4
 8kB/PdXSK3R6oUoU2ZQVv9fkqzzcvs4buqX8DA3uaDUMqoAhr7f4VqCXoc7y91qO
 dCHeL1lpYOHgfXULWp6rqKi6i8kfHqPIS48TdFRS4eL2c0Z1VV1WWUsmvYVPCPt4
 Lm5TIheHShUOewzHHHITnkbXXs9A8GX0gOHqSM6GZeJvel8LP+GbWCoxzNz3stVA
 pZpUJt2r/H8C4PYzT31M0gmAAeeN0q6BcP3YJ6utbF9xpzx4gszBt2NehVDEPN9g
 m06Bv1UQDP1X+wsZ4YKXrjGaS/BypCVhBqvtFMN0WbUurQIPUl1zrf7eVkMElKtT
 4XAJMtzdy1wL5O4VfzEmgwOWDSS/21xGuy2J0TRifVRnOh5ExefFpt8yJ5Kqp0Iq
 RmT2UHk8dLmz52etpQ9F
 =zPJG
 -----END PGP SIGNATURE-----

Sync with 2.6.5
2016-01-04 14:06:59 -08:00
Junio C Hamano
833e48259e Git 2.6.5
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2016-01-04 14:06:00 -08:00
Junio C Hamano
e3073cf895 Merge branch 'jk/pending-keep-tag-name' into maint
History traversal with "git log --source" that starts with an
annotated tag failed to report the tag as "source", due to an
old regression in the command line parser back in v2.2 days.

* jk/pending-keep-tag-name:
  revision.c: propagate tag names from pending array
2016-01-04 14:03:08 -08:00
Junio C Hamano
e002527582 Merge branch 'jk/symbolic-ref-maint' into maint
"git symbolic-ref" forgot to report a failure with its exit status.

* jk/symbolic-ref-maint:
  t1401: test reflog creation for git-symbolic-ref
  symbolic-ref: propagate error code from create_symref()
2016-01-04 14:02:58 -08:00
Junio C Hamano
e54d0f5a02 Merge branch 'jk/ident-loosen-getpwuid' into maint
When getpwuid() on the system returned NULL (e.g. the user is not
in the /etc/passwd file or other uid-to-name mappings), the
codepath to find who the user is to record it in the reflog barfed
and died.  Loosen the check in this codepath, which already accepts
questionable ident string (e.g. host part of the e-mail address is
obviously bogus), and in general when we operate fmt_ident() function
in non-strict mode.

* jk/ident-loosen-getpwuid:
  ident: loosen getpwuid error in non-strict mode
  ident: keep a flag for bogus default_email
  ident: make xgetpwuid_self() a static local helper
2016-01-04 14:02:57 -08:00
Junio C Hamano
06b5c9304d Merge branch 'jk/send-email-ssl-errors' into maint
Improve error reporting when SMTP TLS fails.

* jk/send-email-ssl-errors:
  send-email: enable SSL level 1 debug output
2016-01-04 14:02:55 -08:00
Junio C Hamano
34872f0b3c Merge branch 'sg/completion-no-column' into maint
The completion script (in contrib/) used to list "git column"
(which is not an end-user facing command) as one of the choices

* sg/completion-no-column:
  completion: remove 'git column' from porcelain commands
2016-01-04 14:02:47 -08:00
Changwoo Ryu
c6cd26696c l10n: ko.po: Add Korean translation
Signed-off-by: Changwoo Ryu <cwryu@debian.org>
Signed-off-by: Hyunjun Kim <yoloseem@users.noreply.github.com>
2016-01-03 19:07:29 +09:00
Junio C Hamano
5863990799 l10n-2.7.0-rnd2+de
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJWhpuWAAoJEMek6Rt1RHoo8McP/0gruVkT1mu2DfzsvVu7mxFE
 hKFf1/xOM1uAr9eOX/c32ffXnEqp+4GhSbXslmAaC9KmhkKmEiyhuGmgSC8FCIXb
 4c/nAN5ACh4eh7UtwPZxPmP9S2XT3jT/OVo8nD917Qd5RVGxxlvRZHjo+l9PB27E
 +5mS3r1VfBBqwdya5EiK3Y2AbaL8778XdIEM46/IRoatFQTQ8J7Vef2UJtWZCdqn
 5D0AuqQJg1g87tNEU+WAROpomiUf7lCoCGWp9x+IzZaTj04EuOWLkLc/9RUX7LgJ
 geFdZ0xF3moV28opcl8cQGSNIv85Gxl00uYf9LH8oBLkxpV4eCyxB91yFpwMK+Ab
 QlinLuROKf6Q9o5NLmrdEMYXrlQsrFVfG2gUMM1e/smzo96DniZ17neAXd8Nf2xW
 SFm0u00/TQP/xa4FT+2M3MClWAFIKwtXV1ealySMa8dAh0l9XUOn+5fiQy1lvwhT
 EE7XjKj5MjcQBS873AKa3AfQcT+9OIh3jQRgdSUjCHeRWKjvVHvelgrnf70XYmNw
 5d8xxDDhZ3unlC7ME5VLqfX9qXdaHO7m/zn3Us0m/gAKfEzqS/R/lBtl8hPUfgaf
 BEKNO8hMVJkUVL2Iwg2Ca7An5ZF2SKVf4+eKqehmMvIs5rlWc/HA7OPOn66H3pGH
 8B5y8rRvlarRX2odvUmj
 =0rPd
 -----END PGP SIGNATURE-----

Merge tag 'l10n-2.7.0-rnd2+de' of git://github.com/git-l10n/git-po

l10n-2.7.0-rnd2+de

* tag 'l10n-2.7.0-rnd2+de' of git://github.com/git-l10n/git-po:
  l10n: de.po: translate 68 new messages
  l10n: de.po: improve some translations
2016-01-02 11:31:43 -08:00
Jeff King
ac78663b0d run-command: don't warn on SIGPIPE deaths
When git executes a sub-command, we print a warning if the
command dies due to a signal, but make an exception for
"uninteresting" cases like SIGINT and SIGQUIT (since the
user presumably just hit ^C).

We should make a similar exception for SIGPIPE, because it's
an expected and uninteresting return in most cases; it
generally means the user quit the pager before git had
finished generating all output.  This used to be very hard
to trigger in practice, because:

  1. We only complain if we see a real SIGPIPE death, not
     the shell-induced 141 exit code. This means that
     anything we run via the shell does not trigger the
     warning, which includes most non-trivial aliases.

  2. The common case for SIGPIPE is the user quitting the
     pager before git has finished generating all output.
     But if the user triggers a pager with "-p", we redirect
     the git wrapper's stderr to that pager, too.  Since the
     pager is dead, it means that the message goes nowhere.

  3. You can see it if you run your own pager, like
     "git foo | head". But that only happens if "foo" is a
     non-builtin (so it doesn't work with "log", for
     example).

However, it may become more common after 86d26f2, which
teaches alias to re-exec builtins rather than running them
in the same process. This case doesn't trigger (1), as we
don't need a shell to run a git command. It doesn't trigger
(2), because the pager is not started by the original git,
but by the inner re-exec of git. And it doesn't trigger (3),
because builtins are treated more like non-builtins in this
case.

Given how flaky this message already is (e.g., you cannot
even know whether you will see it, as git optimizes out some
shell invocations behind the scenes based on the contents of
the command!), and that it is unlikely to ever provide
useful information, let's suppress it for all cases of
SIGPIPE.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-29 11:05:11 -08:00
Ralf Thielow
02103b3289 l10n: de.po: translate 68 new messages
Translate 68 new messages came from git.pot update in
f4f2c8f (l10n: git.pot: v2.7.0 round 1 (66 new, 29 removed)) and
2c0ca05 (l10n: git.pot: v2.7.0 round 2 (2 new, 2 removed)).

Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Matthias Rüster <matthias.ruester@gmail.com>
2015-12-29 19:53:17 +01:00
Ralf Thielow
503b1ef7b2 l10n: de.po: improve some translations
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Acked-by: Phillip Sz <phillip.szelat@gmail.com>
2015-12-29 19:53:17 +01:00
Junio C Hamano
28274d02c4 Git 2.7-rc3
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-28 14:00:52 -08:00
Junio C Hamano
aecb9979df Merge branch 'sh/p4-multi-depot'
"git p4" when interacting with multiple depots at the same time
used to incorrectly drop changes.

* sh/p4-multi-depot:
  git-p4: reduce number of server queries for fetches
  git-p4: support multiple depot paths in p4 submit
  git-p4: failing test case for skipping changes with multiple depots
2015-12-28 13:58:58 -08:00
Junio C Hamano
71957339da Merge branch 'jk/pending-keep-tag-name'
History traversal with "git log --source" that starts with an
annotated tag failed to report the tag as "source", due to an
old regression in the command line parser back in v2.2 days.

* jk/pending-keep-tag-name:
  revision.c: propagate tag names from pending array
2015-12-28 13:58:04 -08:00
Junio C Hamano
e929264e8d Merge branch 'jk/symbolic-ref-maint'
"git symbolic-ref" forgot to report a failure with its exit status.

* jk/symbolic-ref-maint:
  t1401: test reflog creation for git-symbolic-ref
  symbolic-ref: propagate error code from create_symref()
2015-12-28 13:57:24 -08:00
Junio C Hamano
ce858c06a4 l10n-2.7.0-rnd2
-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJWgVTjAAoJEMek6Rt1RHooPAQP/29mgYFa4YBxBsJX3BctZvLu
 hqtjVmzX2QiOq2M1Gah7up8J4gKzn6b+m9Bm5JemuCx8bqZu1Mv50oXkjsggLcvz
 +ZWglf9LOMeh/AbYEjyGTPIG7aDXme/vO5YgjUgHrSB6/9xcU/IkZfr1mowM2vbL
 QYFNHJ22LYULz4eHmN2MJlldhIm2vlIrMLn1tH3gFbvt/cyyO/szZkYVCcPtHl90
 T+LfBrYs9aZQgq/fGv9ZkP9PWFxhwyyG0K9rwGLh9aBVjX+Ncy3vl6+sIOh6y+dm
 FJ4yQyYcmYx3inEEa+fVVuWmHy2To0j+QD0geA7Uu3tRWIZlywbo1GIJZqUbDU90
 eyDOhA1pA+o6cEkDv7mkATjwUc/lfhtlEs3dH2JjwfCvnVKg4sQgiNHi0AdpHONb
 NtXaiH9t6/NOGEtvnlIwiqcIpjQsGi4hNVkUhqHrJTcr3sjf55mW42k3oD0EYVnS
 FElSK5W23PGc2+vHN2sCM8Iz/bsUi18xd1J/FWGKEZYu9mJrkLZC5Rh8524vPVgu
 2KC+Nw6oYep1n9XxnXBZtnPHy4c2y1cVgC5V6yqnggN+cD18CiUMIgerZ3MH3hS8
 RiAJI/nR5XkYTQofIFNgyh4IWsDUjKYHUBlo8deVjydWCqp+B2SNN/KeHHB4L1+u
 Xb9iv8V8k1O/CS2F0is8
 =QAmT
 -----END PGP SIGNATURE-----

Merge tag 'l10n-2.7.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.7.0-rnd2

* tag 'l10n-2.7.0-rnd2' of git://github.com/git-l10n/git-po:
  l10n: ru.po: update Russian translation
  l10n: Updated Bulgarian translation of git (2477t,0f,0u)
  l10n: ca.po: update translation
  l10n: zh_CN: for git v2.7.0 l10n round 2
  l10n: sv.po: Update Swedish translation (2477t0f0u)
  l10n: sv: Fix bad translation
  l10n: fr.po v2.7.0 round 2 (2477t)
  l10n: git.pot: v2.7.0 round 2 (2 new, 2 removed)
  l10n: zh_CN: for git v2.7.0 l10n round 1
  l10n: ca.po: update translation
  l10n: fr v2.7.0 round 1 (2477t)
  l10n: Updated Bulgarian translation of git (2477t,0f,0u)
  l10n: sv.po: Update Swedish translation (2477t0f0u)
  l10n: vi.po: Updated translation (2477t)
  l10n: git.pot: v2.7.0 round 1 (66 new, 29 removed)
  l10n: fr.po: Fix typo
  l10n: fr.po: Fix typo
2015-12-28 13:53:47 -08:00
Nguyễn Thái Ngọc Duy
2653a8c6fa dir.c: clean the entire struct in clear_exclude_list()
Make sure "el" can be reuseable again. The problem was el->alloc is
not cleared and may cause segfaults next time because add_exclude()
thinks el->excludes (being NULL) has enough space. Just clear the
entire struct to be safe.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-28 12:48:27 -08:00
Nguyễn Thái Ngọc Duy
4d55200532 grep: make it clear i-t-a entries are ignored
The expression "!S_ISREG(ce)" covers i-t-a entries as well because
ce->ce_mode would be zero then. I could make a comment saying that, but
it's probably better just to comment with code, in case i-t-a entry
content changes in future.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-28 12:42:35 -08:00
Dimitriy Ryazantcev
5fa9ab8080 l10n: ru.po: update Russian translation
Signed-off-by: Dimitriy Ryazantcev <dimitriy.ryazantcev@gmail.com>
2015-12-28 23:16:00 +08:00
Jiang Xin
9011cf9233 Merge branch 'master' of git://github.com/alshopov/git-po
* 'master' of git://github.com/alshopov/git-po:
  l10n: Updated Bulgarian translation of git (2477t,0f,0u)
2015-12-28 23:13:15 +08:00
Alexander Shopov
c5e5e68647 l10n: Updated Bulgarian translation of git (2477t,0f,0u)
Signed-off-by: Alexander Shopov <ash@kambanaria.org>
2015-12-28 11:33:41 +02:00
Alex Henrie
62c9705d75 l10n: ca.po: update translation
Signed-off-by: Alex Henrie <alexhenrie24@gmail.com>
2015-12-27 21:42:59 -07:00
Jiang Xin
89f80d72c1 l10n: zh_CN: for git v2.7.0 l10n round 2
Update 2 translations (2477t0f0u) for git v2.7.0-rc1.

Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
2015-12-26 21:22:53 +08:00
Jiang Xin
707a423f81 Merge branch 'master' of git://github.com/nafmo/git-l10n-sv
* 'master' of git://github.com/nafmo/git-l10n-sv:
  l10n: sv.po: Update Swedish translation (2477t0f0u)
  l10n: sv: Fix bad translation
2015-12-26 21:22:30 +08:00
Peter Krefting
9ff1198e67 l10n: sv.po: Update Swedish translation (2477t0f0u)
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2015-12-26 12:27:15 +01:00
Peter Krefting
171e58a148 l10n: sv: Fix bad translation
Found-by: Sebastian Rasmussen <sebras@gmail.com>
Signed-off-by: Peter Krefting <peter@softwolves.pp.se>
2015-12-26 12:24:44 +01:00
Jean-Noel Avila
f938915aad l10n: fr.po v2.7.0 round 2 (2477t)
Signed-off-by: Jean-Noel Avila <jn.avila@free.fr>
2015-12-24 07:38:22 +01:00
Junio C Hamano
554f6e4106 Git 2.7-rc2
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-22 14:46:01 -08:00
Junio C Hamano
de60b97422 Merge branch 'js/emu-write-epipe-on-windows'
The write(2) emulation for Windows learned to set errno to EPIPE
when necessary.

* js/emu-write-epipe-on-windows:
  mingw: emulate write(2) that fails with a EPIPE
2015-12-22 14:45:16 -08:00
Ralf Thielow
6a4f2eced4 push: don't mark options of recurse-submodules for translation
Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-22 14:40:47 -08:00
Nguyễn Thái Ngọc Duy
57ea7123c8 git.c: make sure we do not leak GIT_* to alias scripts
The unfortunate commit d95138e (setup: set env $GIT_WORK_TREE when
work tree is set, like $GIT_DIR - 2015-06-26) exposes another problem,
besides git-clone that's described in the previous commit. If
GIT_WORK_TREE (or even GIT_DIR) is exported to an alias script, it may
mislead git commands in the script where the repo is. Granted, most
scripts work on the repo where the alias is summoned from. But nowhere
do we forbid the script to visit another repository.

The revert of d95138e in the previous commit is sufficient as a
fix. However, to protect us from accidentally leaking GIT_*
environment variables again, we restore certain sensitive env before
calling the external script.

GIT_PREFIX is let through because there's another setup side effect
that we simply accepted so far: current working directory is
moved. Maybe in future we can introduce a new alias format that
guarantees no cwd move, then we can unexport GIT_PREFIX.

Reported-by: Gabriel Ganne <gabriel.ganne@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-22 13:40:32 -08:00
Nguyễn Thái Ngọc Duy
86d26f240f setup.c: re-fix d95138e (setup: set env $GIT_WORK_TREE when ..
Commit d95138e [1] attempted to fix a .git file problem by
setting GIT_WORK_TREE whenever GIT_DIR is set. It sounded harmless
because we handle GIT_DIR and GIT_WORK_TREE side by side for most
commands, with two exceptions: git-init and git-clone.

"git clone" is not happy with d95138e. This command ignores GIT_DIR
but respects GIT_WORK_TREE [2] [3] which means it used to run fine
from a hook, where GIT_DIR was set but GIT_WORK_TREE was not (*).
With d95138e, GIT_WORK_TREE is set all the time and git-clone
interprets that as "I give you order to put the worktree here",
usually against the user's intention.

The solution in d95138e is reverted earlier, and instead we reuse
the solution from c056261 [4].  It fixed another setup-messed-
up-by-alias by saving and restoring env and spawning a new process,
but for git-clone and git-init only.

Now we conclude that setup-messed-up-by-alias is always evil. So the
env restoration is done for _all_ commands, including external ones,
whenever aliases are involved. It fixes what d95138e tried to fix,
without upsetting git-clone-inside-hooks.

The test from d95138e remains to verify it's not broken by this. A new
test is added to make sure git-clone-inside-hooks remains happy.

(*) GIT_WORK_TREE was not set _most of the time_. In some cases
    GIT_WORK_TREE is set and git-clone will behave differently. The
    use of GIT_WORK_TREE to direct git-clone to put work tree
    elsewhere looks like a mistake because it causes surprises this
    way. But that's a separate story.

[1] d95138e (setup: set env $GIT_WORK_TREE when work tree is set, like
             $GIT_DIR - 2015-06-26)
[2] 2beebd2 (clone: create intermediate directories of destination
             repo - 2008-06-25)
[3] 20ccef4 (make git-clone GIT_WORK_TREE aware - 2007-07-06)
[4] c056261 (git potty: restore environments after alias expansion -
             2014-06-08)

Reported-by: Anthony Sottile <asottile@umich.edu>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-22 13:40:32 -08:00
Nguyễn Thái Ngọc Duy
0d5466d244 git.c: make it clear save_env() is for alias handling only
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-12-22 13:40:32 -08:00