git.git
10 years agoGit 2.5
Junio C Hamano [Mon, 27 Jul 2015 19:29:47 +0000 (12:29 -0700)]
Git 2.5

Signed-off-by: Junio C Hamano <redacted>
10 years agoSync with 2.4.7
Junio C Hamano [Mon, 27 Jul 2015 19:26:36 +0000 (12:26 -0700)]
Sync with 2.4.7

10 years agoGit 2.4.7
Junio C Hamano [Mon, 27 Jul 2015 19:25:42 +0000 (12:25 -0700)]
Git 2.4.7

Signed-off-by: Junio C Hamano <redacted>
10 years agoMerge branch 'jk/pretty-encoding-doc' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:48 +0000 (12:21 -0700)]
Merge branch 'jk/pretty-encoding-doc' into maint

Doc update.

* jk/pretty-encoding-doc:
  docs: clarify that --encoding can produce invalid sequences

10 years agoMerge branch 'tb/checkout-doc' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:47 +0000 (12:21 -0700)]
Merge branch 'tb/checkout-doc' into maint

Doc update.

* tb/checkout-doc:
  git-checkout.txt: document "git checkout <pathspec>" better

10 years agoMerge branch 'ls/hint-rev-list-count' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:47 +0000 (12:21 -0700)]
Merge branch 'ls/hint-rev-list-count' into maint

* ls/hint-rev-list-count:
  rev-list: add --count to usage guide

10 years agoMerge branch 'mm/branch-doc-updates' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:46 +0000 (12:21 -0700)]
Merge branch 'mm/branch-doc-updates' into maint

* mm/branch-doc-updates:
  Documentation/branch: document -M and -D in terms of --force
  Documentation/branch: document -d --force and -m --force

10 years agoMerge branch 'jc/fsck-retire-require-eoh' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:45 +0000 (12:21 -0700)]
Merge branch 'jc/fsck-retire-require-eoh' into maint

A fix to a minor regression to "git fsck" in v2.2 era that started
complaining about a body-less tag object when it lacks a separator
empty line after its header to separate it with a non-existent body.

* jc/fsck-retire-require-eoh:
  fsck: it is OK for a tag and a commit to lack the body

10 years agoMerge branch 'et/http-proxyauth' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:44 +0000 (12:21 -0700)]
Merge branch 'et/http-proxyauth' into maint

We used to ask libCURL to use the most secure authentication method
available when talking to an HTTP proxy only when we were told to
talk to one via configuration variables.  We now ask libCURL to
always use the most secure authentication method, because the user
can tell libCURL to use an HTTP proxy via an environment variable
without using configuration variables.

* et/http-proxyauth:
  http: always use any proxy auth method available

10 years agoMerge branch 'jc/unexport-git-pager-in-use-in-pager' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:43 +0000 (12:21 -0700)]
Merge branch 'jc/unexport-git-pager-in-use-in-pager' into maint

When you say "!<ENTER>" while running say "git log", you'd confuse
yourself in the resulting shell, that may look as if you took
control back to the original shell you spawned "git log" from but
that isn't what is happening.  To that new shell, we leaked
GIT_PAGER_IN_USE environment variable that was meant as a local
communication between the original "Git" and subprocesses that was
spawned by it after we launched the pager, which caused many
"interesting" things to happen, e.g. "git diff | cat" still paints
its output in color by default.

Stop leaking that environment variable to the pager's half of the
fork; we only need it on "Git" side when we spawn the pager.

* jc/unexport-git-pager-in-use-in-pager:
  pager: do not leak "GIT_PAGER_IN_USE" to the pager

10 years agoMerge branch 'mh/strbuf-read-file-returns-ssize-t' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:43 +0000 (12:21 -0700)]
Merge branch 'mh/strbuf-read-file-returns-ssize-t' into maint

Avoid possible ssize_t to int truncation.

* mh/strbuf-read-file-returns-ssize-t:
  strbuf: strbuf_read_file() should return ssize_t

10 years agoMerge branch 'kb/config-unmap-before-renaming' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:42 +0000 (12:21 -0700)]
Merge branch 'kb/config-unmap-before-renaming' into maint

"git config" failed to update the configuration file when the
underlying filesystem is incapable of renaming a file that is still
open.

* kb/config-unmap-before-renaming:
  config.c: fix writing config files on Windows network shares

10 years agoMerge branch 'jk/rev-list-no-bitmap-while-pruning' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:42 +0000 (12:21 -0700)]
Merge branch 'jk/rev-list-no-bitmap-while-pruning' into maint

A minor bugfix when pack bitmap is used with "rev-list --count".

* jk/rev-list-no-bitmap-while-pruning:
  rev-list: disable --use-bitmap-index when pruning commits

10 years agoMerge branch 'rh/test-color-avoid-terminfo-in-original-home' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:41 +0000 (12:21 -0700)]
Merge branch 'rh/test-color-avoid-terminfo-in-original-home' into maint

An ancient test framework enhancement to allow color was not
entirely correct; this makes it work even when tput needs to read
from the ~/.terminfo under the user's real HOME directory.

* rh/test-color-avoid-terminfo-in-original-home:
  test-lib.sh: fix color support when tput needs ~/.terminfo
  Revert "test-lib.sh: do tests for color support after changing HOME"

10 years agoMerge branch 'jk/fix-refresh-utime' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:40 +0000 (12:21 -0700)]
Merge branch 'jk/fix-refresh-utime' into maint

Fix a small bug in our use of umask() return value.

* jk/fix-refresh-utime:
  check_and_freshen_file: fix reversed success-check

10 years agoMerge branch 'cb/rebase-am-exit-code' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:39 +0000 (12:21 -0700)]
Merge branch 'cb/rebase-am-exit-code' into maint

"git rebase" did not exit with failure when format-patch it invoked
failed for whatever reason.

* cb/rebase-am-exit-code:
  rebase: return non-zero error code if format-patch fails

10 years agoMerge branch 'jk/index-pack-reduce-recheck' into maint
Junio C Hamano [Mon, 27 Jul 2015 19:21:38 +0000 (12:21 -0700)]
Merge branch 'jk/index-pack-reduce-recheck' into maint

Disable "have we lost a race with competing repack?" check while
receiving a huge object transfer that runs index-pack.

* jk/index-pack-reduce-recheck:
  index-pack: avoid excessive re-reading of pack directory

10 years agorefs: loosen restriction on wildcard "*" refspecs
Jacob Keller [Wed, 22 Jul 2015 21:05:33 +0000 (14:05 -0700)]
refs: loosen restriction on wildcard "*" refspecs

Loosen restrictions on refspecs by allowing patterns that have a "*"
within a component instead of only as the whole component.

Remove the logic to accept a single "*" as a whole component from
check_refname_format(), and implement an extended form of that logic
in check_refname_component().  Pass the pointer to the flags argument
to the latter, as it has to clear REFNAME_REFSPEC_PATTERN bit when
it sees "*".

Teach check_refname_component() function to allow an asterisk "*"
only when REFNAME_REFSPEC_PATTERN is set in the flags, and drop the
bit after seeing a "*", to ensure that one side of a refspec
contains at most one asterisk.

This will allow us to accept refspecs such as `for/bar*:foo/baz*`.
Any refspec which functioned before shall continue functioning with
the new logic.

Signed-off-by: Jacob Keller <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorefs: cleanup comments regarding check_refname_component()
Jacob Keller [Wed, 22 Jul 2015 21:05:32 +0000 (14:05 -0700)]
refs: cleanup comments regarding check_refname_component()

Correctly specify all characters which are rejected under the '4: a
bad character' disposition, which did not list all characters that
are treated as such.

Cleanup comment style for rejected refs by inserting a ", or" at the
end of each statement.

Signed-off-by: Jacob Keller <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agol10n: zh_CN: Update Translation: "tag object"
Ray Chen [Mon, 27 Jul 2015 06:55:00 +0000 (14:55 +0800)]
l10n: zh_CN: Update Translation: "tag object"

* "tag object" translated as "标签对象".
* "objects to be packed" translated as "待打包对象".
* Add "那些", for better reading experience.

Signed-off-by: Ray Chen <redacted>
Signed-off-by: Jiang Xin <redacted>
10 years agoDocumentation/git: drop outdated Cogito reference
Eric Sunshine [Fri, 24 Jul 2015 04:00:54 +0000 (00:00 -0400)]
Documentation/git: drop outdated Cogito reference

Cogito hasn't been maintained since late 2006, so drop the reference
to it. The warning that SCMS front-ends might override listed
environment variables, however, may still be valuable, so keep it but
generalize the wording.

Suggested-by: Junio C Hamano <redacted>
Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: un-nest merge() further
Junio C Hamano [Mon, 6 Jul 2015 22:32:53 +0000 (15:32 -0700)]
rerere: un-nest merge() further

By consistently using "upon failure, set 'ret' and jump to out"
pattern, flatten the function further.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: use "struct rerere_id" instead of "char *" for conflict ID
Junio C Hamano [Sun, 5 Jul 2015 00:38:34 +0000 (17:38 -0700)]
rerere: use "struct rerere_id" instead of "char *" for conflict ID

This gives a thin abstraction between the conflict ID that is a hash
value obtained by inspecting the conflicts and the name of the
directory under $GIT_DIR/rr-cache/, in which the previous resolution
is recorded to be replayed.  The plan is to make sure that the
presence of the directory does not imply the presense of a previous
resolution and vice-versa, and later allow us to have more than one
pair of <preimage, postimage> for a given conflict ID.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: call conflict-ids IDs
Junio C Hamano [Mon, 6 Jul 2015 21:45:55 +0000 (14:45 -0700)]
rerere: call conflict-ids IDs

Most places we call conflict IDs "name" and some others we call them
"hex"; update all of them to "id".

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: further clarify do_rerere_one_path()
Junio C Hamano [Mon, 6 Jul 2015 21:18:09 +0000 (14:18 -0700)]
rerere: further clarify do_rerere_one_path()

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: further de-dent do_plain_rerere()
Junio C Hamano [Sun, 5 Jul 2015 00:17:38 +0000 (17:17 -0700)]
rerere: further de-dent do_plain_rerere()

It's just easier to follow this way.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: refactor "replay" part of do_plain_rerere()
Junio C Hamano [Wed, 1 Jul 2015 02:36:24 +0000 (19:36 -0700)]
rerere: refactor "replay" part of do_plain_rerere()

Extract the body of a loop that attempts to replay recorded
resolution for each conflicted path into a helper function, not
because I want to call it from multiple places later, but because
the logic has become too deeply nested and hard to read.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: explain the remainder
Junio C Hamano [Wed, 1 Jul 2015 05:43:37 +0000 (22:43 -0700)]
rerere: explain the remainder

Explain the internals of rerere as in-code comments, while
sprinkling "NEEDSWORK" comment to highlight iffy bits and
questionable assumptions.

This covers the codepath that implements "rerere gc" and "rerere
clear".

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: explain "rerere forget" codepath
Junio C Hamano [Wed, 1 Jul 2015 05:42:34 +0000 (22:42 -0700)]
rerere: explain "rerere forget" codepath

Explain the internals of rerere as in-code comments, while
sprinkling "NEEDSWORK" comment to highlight iffy bits and
questionable assumptions.

This covers the codepath that implements "rerere forget".

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: explain the primary codepath
Junio C Hamano [Wed, 1 Jul 2015 05:40:35 +0000 (22:40 -0700)]
rerere: explain the primary codepath

Explain the internals of rerere as in-code comments, while
sprinkling "NEEDSWORK" comment to highlight iffy bits and
questionable assumptions.

This one covers the codepath reached from rerere(), the primary
interface to the subsystem.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: explain MERGE_RR management helpers
Junio C Hamano [Wed, 1 Jul 2015 05:36:35 +0000 (22:36 -0700)]
rerere: explain MERGE_RR management helpers

Explain the internals of rerere as in-code comments, while
sprinkling "NEEDSWORK" comment to highlight iffy bits and
questionable assumptions.

This one covers the "$GIT_DIR/MERGE_RR" file and in-core merge_rr
that are used to keep track of the status of "rerere" session in
progress.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: fix benign off-by-one non-bug and clarify code
Junio C Hamano [Fri, 24 Jul 2015 23:01:48 +0000 (16:01 -0700)]
rerere: fix benign off-by-one non-bug and clarify code

rerere_io_putconflict() wants to use a limited fixed-sized buf[] on
stack repeatedly to formulate a longer string, but its implementation
is doubly confusing:

 * When it knows that the whole thing fits in buf[], it wants to
   fill early part of buf[] with conflict marker characters,
   followed by a LF and a NUL.  It miscounts the size of the buffer
   by 1 and does not use the last byte of buf[].

 * When it needs to show only the early part of a long conflict
   marker string (because the whole thing does not fit in buf[]), it
   adjusts the number of bytes shown in the current round in a
   strange-looking way.  It makes sure that this round does not emit
   all bytes and leaves at least one byte to the next round, so that
   "it all fits" case will pick up the rest and show the terminating
   LF.  While this is correct, one needs to stop and think for a
   while to realize why it is correct without an explanation.

Fix the benign off-by-one, and add comments to explain the
strange-looking size adjustment.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: explain the rerere I/O abstraction
Junio C Hamano [Wed, 1 Jul 2015 05:33:19 +0000 (22:33 -0700)]
rerere: explain the rerere I/O abstraction

Explain the internals of rerere as in-code comments.

This one covers our thin I/O abstraction to read from either
a file or a memory while optionally writing out to a file.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: do not leak mmfile[] for a path with multiple stage #1 entries
Junio C Hamano [Fri, 24 Jul 2015 22:10:52 +0000 (15:10 -0700)]
rerere: do not leak mmfile[] for a path with multiple stage #1 entries

A conflicted index can have multiple stage #1 entries when dealing
with a criss-cross merge and using the "resolve" merge strategy.

Plug the leak by reading only the first one of the same stage
entries.

Strictly speaking, this fix does change the semantics, in that we
used to use the last stage #1 entry as the common ancestor when
doing the plain-vanilla three-way merge, but with the leak fix, we
will use the first stage #1 entry.  But it is not a grave backward
compatibility breakage.  Either way, we are arbitrarily picking one
of multiple stage #1 entries and using it, ignoring others, and
there is no meaning in the ordering of these stage #1 entries.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: stop looping unnecessarily
Junio C Hamano [Tue, 30 Jun 2015 23:10:10 +0000 (16:10 -0700)]
rerere: stop looping unnecessarily

handle_cache() loops 3 times starting from an index entry that is
unmerged, while ignoring an entry for a path that is different from
what we are looking for.

As the index is sorted, once we see a different path, we know we saw
all stages for the path we are interested in.  Just loop while we
see the same path and then break, instead of continuing for 3 times.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: drop want_sp parameter from is_cmarker()
Junio C Hamano [Mon, 29 Jun 2015 22:05:24 +0000 (15:05 -0700)]
rerere: drop want_sp parameter from is_cmarker()

As the nature of the conflict marker line determines if there should
be a SP and label after it, the caller shouldn't have to pass the
parameter redundantly.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: report autoupdated paths only after actually updating them
Junio C Hamano [Mon, 29 Jun 2015 04:13:24 +0000 (21:13 -0700)]
rerere: report autoupdated paths only after actually updating them

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: write out each record of MERGE_RR in one go
Junio C Hamano [Sun, 28 Jun 2015 23:28:00 +0000 (16:28 -0700)]
rerere: write out each record of MERGE_RR in one go

Instead of writing the hash for a conflict, a HT, and the path
with three separate write_in_full() calls, format them into a
single record into a strbuf and write it out in one go.

As a more recent "rerere remaining" codepath abuses the .util field
of the merge_rr data to store a sentinel token, make sure that
codepath does not call into this function (of course, "remaining" is
a read-only operation and currently does not call it).

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: lift PATH_MAX limitation
Junio C Hamano [Sun, 28 Jun 2015 22:51:59 +0000 (15:51 -0700)]
rerere: lift PATH_MAX limitation

The MERGE_RR file records a collection of NUL-terminated entries,
each of which consists of

 - a hash that identifies the conflict
 - a HT
 - the pathname

We used to read this piece-by-piece, and worse yet, read the
pathname part a byte at a time into a fixed buffer of size PATH_MAX.

Instead, read a whole entry using strbuf_getwholeline() and parse
out the fields.  This way, we issue fewer read(2) calls and more
importantly we do not have to limit the pathname to PATH_MAX.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: plug conflict ID leaks
Junio C Hamano [Tue, 30 Jun 2015 20:03:36 +0000 (13:03 -0700)]
rerere: plug conflict ID leaks

The merge_rr string list stores the conflict ID (a hexadecimal
string that is used to index into $GIT_DIR/rr-cache) in the .util
field of its elements, and when do_plain_rerere() resolves a
conflict, the field is cleared.  Also, when rerere_forget()
recomputes the conflict ID to updates the preimage file, the
conflict ID for the path is updated.

We forgot to free the existing conflict ID when we did these two
operations.

Signed-off-by: Junio C Hamano <redacted>
10 years agorerere: handle conflicts with multiple stage #1 entries
Junio C Hamano [Fri, 24 Jul 2015 22:08:03 +0000 (15:08 -0700)]
rerere: handle conflicts with multiple stage #1 entries

A conflicted index can have multiple stage #1 entries when dealing
with a criss-cross merge and using the "resolve" merge strategy.

Signed-off-by: Junio C Hamano <redacted>
10 years agoRelNotes: am.threeWay does not exist (yet)
Junio C Hamano [Fri, 24 Jul 2015 21:31:23 +0000 (14:31 -0700)]
RelNotes: am.threeWay does not exist (yet)

Signed-off-by: Junio C Hamano <redacted>
10 years agoRevert "git-am: add am.threeWay config variable"
Junio C Hamano [Fri, 24 Jul 2015 17:55:24 +0000 (10:55 -0700)]
Revert "git-am: add am.threeWay config variable"

This reverts commit d96a275b91bae1800cd43be0651e886e7e042a17.

It used to be possible to apply a patch series with "git am mbox"
and then only after seeing a failure, switch to three-way mode via
"git am -3" (no other options or arguments).  The commit being
reverted broke this workflow.

Signed-off-by: Junio C Hamano <redacted>
10 years agoDocumentation/git-worktree: fix broken 'linkgit' invocation
Eric Sunshine [Fri, 24 Jul 2015 04:00:52 +0000 (00:00 -0400)]
Documentation/git-worktree: fix broken 'linkgit' invocation

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocontrib/subtree: ignore log.date configuration
David Aguilar [Wed, 22 Jul 2015 00:01:02 +0000 (17:01 -0700)]
contrib/subtree: ignore log.date configuration

git-subtree's log format string uses "%ad" and "%cd", which
respect the user's configured log.date value.

This is problematic for git-subtree because it needs to use real
dates so that copied commits come through unchanged.

Add a test and tweak the format strings to use %aD and %cD
so that the default date format is used instead.

Reported-by: Bryan Jacobs <redacted>
Signed-off-by: David Aguilar <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agouserdiff: add support for Fountain documents
Zoë Blade [Tue, 21 Jul 2015 13:22:46 +0000 (14:22 +0100)]
userdiff: add support for Fountain documents

Add support for Fountain, a plain text screenplay format.  Git
facilitates not just programming specifically, but creative writing
in general, so it makes sense to also support other plain text
documents besides source code.

In the structure of a screenplay specifically, scenes are roughly
analogous to functions, in the sense that it makes your job easier
if you can see which ones were changed in a given range of patches.

More information about the Fountain format can be found on its
official website, at http://fountain.io .

Signed-off-by: Zoë Blade <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoreceive-pack: crash when checking with non-exist HEAD
Jiang Xin [Wed, 22 Jul 2015 01:49:40 +0000 (09:49 +0800)]
receive-pack: crash when checking with non-exist HEAD

If HEAD of a repository points to a conflict reference, such as:

* There exist a reference named 'refs/heads/jx/feature1', but HEAD
  points to 'refs/heads/jx', or

* There exist a reference named 'refs/heads/feature', but HEAD points
  to 'refs/heads/feature/bad'.

When we push to delete a reference for this repo, such as:

        git push /path/to/bad-head-repo.git :some/good/reference

The git-receive-pack process will crash.

This is because if HEAD points to a conflict reference, the function
`resolve_refdup("HEAD", ...)` does not return a valid reference name,
but a null buffer.  Later matching the delete reference against the null
buffer will cause git-receive-pack crash.

Signed-off-by: Jiang Xin <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agopull: allow dirty tree when rebase.autostash enabled
Kevin Daudt [Sat, 4 Jul 2015 21:42:38 +0000 (23:42 +0200)]
pull: allow dirty tree when rebase.autostash enabled

rebase learned to stash changes when it encounters a dirty work tree,
but git pull --rebase does not.

Only verify if the working tree is dirty when rebase.autostash is not
enabled.

Signed-off-by: Kevin Daudt <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agobuiltin/send-pack.c: respect user.signingkey
Junio C Hamano [Tue, 21 Jul 2015 22:06:43 +0000 (15:06 -0700)]
builtin/send-pack.c: respect user.signingkey

When git-send-pack is exec'ed, as is done by git-remote-http, it
does not read the config, and configured value of user.signingkey is
ignored. Thus it was impossible to specify a signing key over HTTP,
other than the default key in the keyring having a User ID matching
the "Name <email>" format.

This patch at least partially fixes the problem by reading in the GPG
config from within send-pack. It does not address the related problem
of plumbing a value for this configuration option using
`git -c user.signingkey push ...`.

Signed-off-by: Dave Borowitz <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoGit 2.5.0-rc3
Junio C Hamano [Tue, 21 Jul 2015 21:11:54 +0000 (14:11 -0700)]
Git 2.5.0-rc3

Signed-off-by: Junio C Hamano <redacted>
10 years agogit-stash: use update-ref --create-reflog instead of creating files
David Turner [Tue, 21 Jul 2015 21:04:56 +0000 (17:04 -0400)]
git-stash: use update-ref --create-reflog instead of creating files

This is in support of alternate ref backends which don't necessarily
store reflogs as files.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoupdate-ref and tag: add --create-reflog arg
David Turner [Tue, 21 Jul 2015 21:04:55 +0000 (17:04 -0400)]
update-ref and tag: add --create-reflog arg

Allow the creation of a ref (e.g. stash) with a reflog already in
place. For most refs (e.g. those under refs/heads), this happens
automatically, but for others, we need this option.

Currently, git does this by pre-creating the reflog, but alternate ref
backends might store reflogs somewhere other than .git/logs.  Code
that now directly manipulates .git/logs should instead use git
plumbing commands.

I also added --create-reflog to git tag, just for completeness.

In a moment, we will use this argument to make git stash work with
alternate ref backends.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorefs: add REF_FORCE_CREATE_REFLOG flag
David Turner [Tue, 21 Jul 2015 21:04:54 +0000 (17:04 -0400)]
refs: add REF_FORCE_CREATE_REFLOG flag

Add a flag to allow forcing the creation of a reflog even if the ref
name and core.logAllRefUpdates setting would not ordinarily cause ref
creation.

In a moment, we will use this to add options to git tag and git
update-ref to force reflog creation.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agogit-reflog: add exists command
David Turner [Tue, 21 Jul 2015 21:04:53 +0000 (17:04 -0400)]
git-reflog: add exists command

This is necessary because alternate ref backends might store reflogs
somewhere other than .git/logs.  Code that now directly manipulates
.git/logs should instead go through git-reflog.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorefs: new public ref function: safe_create_reflog
David Turner [Tue, 21 Jul 2015 21:04:52 +0000 (17:04 -0400)]
refs: new public ref function: safe_create_reflog

The safe_create_reflog function creates a reflog, if it does not
already exist.

The log_ref_setup function becomes private and gains a force_create
parameter to force the creation of a reflog even if log_all_ref_updates
is false or the refname is not one of the special refnames.

The new parameter also reduces the need to store, modify, and restore
the log_all_ref_updates global before reflog creation.

In a moment, we will use this to add reflog creation commands to
git-reflog.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorefs: break out check for reflog autocreation
David Turner [Tue, 21 Jul 2015 21:04:51 +0000 (17:04 -0400)]
refs: break out check for reflog autocreation

This is just for clarity.

Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agorefs.c: add err arguments to reflog functions
David Turner [Tue, 21 Jul 2015 21:04:50 +0000 (17:04 -0400)]
refs.c: add err arguments to reflog functions

Add an err argument to log_ref_setup that can explain the reason
for a failure. This then eliminates the need to manage errno through
this function since we can just add strerror(errno) to the err string
when meaningful. No callers relied on errno from this function for
anything else than the error message.

Also add err arguments to private functions write_ref_to_lockfile,
log_ref_write_1, commit_ref_update. This again eliminates the need to
manage errno in these functions.

Some error messages are slightly reordered.

Update of a patch by Ronnie Sahlberg.

Signed-off-by: Ronnie Sahlberg <redacted>
Signed-off-by: David Turner <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agounpack-trees: don't update files with CE_WT_REMOVE set
David Turner [Fri, 17 Jul 2015 21:19:27 +0000 (17:19 -0400)]
unpack-trees: don't update files with CE_WT_REMOVE set

Don't update files in the worktree from cache entries which are
flagged with CE_WT_REMOVE.

When a user does a sparse checkout, git removes files that are
marked with CE_WT_REMOVE (because they are out-of-scope for the
sparse checkout). If those files are also marked CE_UPDATE (for
instance, because they differ in the branch that is being checked
out and the outgoing branch), git would previously recreate them.
This patch prevents them from being recreated.

These erroneously-created files would also interfere with merges,
causing pre-merge revisions of out-of-scope files to appear in the
worktree.

apply_sparse_checkout() is the function where all "action"
manipulation (add, delete, update files..) for sparse checkout
occurs; it should not ask to delete and update both at the same
time.

Signed-off-by: Anatole Shaw <redacted>
Signed-off-by: David Turner <redacted>
Helped-by: Duy Nguyen <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoMerge branch 'tf/gitweb-typofix'
Junio C Hamano [Tue, 21 Jul 2015 19:45:27 +0000 (12:45 -0700)]
Merge branch 'tf/gitweb-typofix'

* tf/gitweb-typofix:
  gitweb: fix typo in man page

10 years agoMerge tag 'l10n-2.5.0-rnd2' of git://github.com/git-l10n/git-po
Junio C Hamano [Tue, 21 Jul 2015 17:27:33 +0000 (10:27 -0700)]
Merge tag 'l10n-2.5.0-rnd2' of git://github.com/git-l10n/git-po

l10n-2.5.0-rnd2

* tag 'l10n-2.5.0-rnd2' of git://github.com/git-l10n/git-po:
  l10n: ca.po: update translation
  l10n: de.po: translate 9 new messages
  l10n: Updated Bulgarian translation of git (2359t,0f,0u)
  l10n: zh_CN: for git v2.5.0 l10n round 2
  l10n: sv.po: Update Swedish translation (2359t0f0u)
  l10n: fr v2.5.0 round 2 (2359t)
  l10n: ru.po: update Russian translation
  l10n: Updated Vietnamese translation (2359t)
  l10n: git.pot: v2.5.0 round 2 (9 new, 5 removed)

10 years agostrbuf: make strbuf_addftime more robust
Jeff King [Tue, 30 Jun 2015 13:26:53 +0000 (09:26 -0400)]
strbuf: make strbuf_addftime more robust

The return value of strftime is poorly designed; when it
returns 0, the caller cannot tell if the buffer was not
large enough, or if the output was actually 0 bytes. In the
original implementation of strbuf_addftime, we simply punted
and guessed that our 128-byte hint would be large enough.

We can do better, though, if we're willing to treat strftime
like less of a black box. We can munge the incoming format
to make sure that it never produces 0-length output, and
then "fix" the resulting output.  That lets us reliably grow
the buffer based on strftime's return value.

Clever-idea-by: Eric Sunshine <redacted>
Signed-off-by: Jeff King <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agobash prompt: faster untracked status indicator with untracked directories
SZEDER Gábor [Sun, 19 Jul 2015 11:28:06 +0000 (13:28 +0200)]
bash prompt: faster untracked status indicator with untracked directories

If the untracked status indicator is enabled, __git_ps1() looks for
untracked files by running 'git ls-files'.  This can be perceptibly slow
in case of an untracked directory containing lot of files, because it
lists all files found in the untracked directory only to be redirected
into /dev/null right away (this is the actual command run by __git_ps1()):

  $ ls untracked-dir/ |wc -l
  100000
  $ time git ls-files --others --exclude-standard --error-unmatch \
    -- ':/*' >/dev/null 2>/dev/null

  real 0m0.955s
  user 0m0.936s
  sys 0m0.016s

Eliminate this delay by additionally passing the '--directory
--no-empty-directory' options to 'git ls-files' to show only the name of
non-empty untracked directories instead of all their content:

  $ time git ls-files --others --exclude-standard --directory \
    --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null

  real 0m0.010s
  user 0m0.008s
  sys 0m0.000s

This follows suit of ea95c7b8f5 (completion: improve untracked directory
filtering for filename completion, 2013-09-18).

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agobash prompt: test untracked files status indicator with untracked dirs
SZEDER Gábor [Sun, 19 Jul 2015 11:28:05 +0000 (13:28 +0200)]
bash prompt: test untracked files status indicator with untracked dirs

The next commit will tweak the way __git_ps1() decides whether to display
the untracked files status indicator in the presence of untracked
directories.  Add tests to make sure it doesn't change current behavior,
in particular that an empty untracked directory doesn't trigger the
untracked files status indicator.

Signed-off-by: SZEDER Gábor <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: drop intimate knowledge of newly created worktree
Eric Sunshine [Fri, 17 Jul 2015 23:00:17 +0000 (19:00 -0400)]
checkout: drop intimate knowledge of newly created worktree

Now that git-worktree no longer relies upon git-checkout for new branch
creation, new worktree HEAD set up, or initial worktree population,
git-checkout no longer needs intimate knowledge that it may be operating
in a newly created worktree. Therefore, drop 'new_worktree_mode' and the
private GIT_CHECKOUT_NEW_WORKTREE environment variable by which
git-worktree communicated to git-checkout that it was being invoked to
manipulate a new worktree.

This reverts the remaining changes to checkout.c by 529fef2 (checkout:
support checking out into a new working directory, 2014-11-30).

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: populate via "git reset --hard" rather than "git checkout"
Eric Sunshine [Fri, 17 Jul 2015 23:00:16 +0000 (19:00 -0400)]
worktree: populate via "git reset --hard" rather than "git checkout"

Now that git-worktree handles all functionality (--force, --detach,
-b/-B) previously delegated to git-checkout, actual population of the
new worktree can be accomplished more directly and lightweight with
"git reset --hard" in place of "git checkout".

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: avoid resolving HEAD unnecessarily
Eric Sunshine [Fri, 17 Jul 2015 23:00:15 +0000 (19:00 -0400)]
worktree: avoid resolving HEAD unnecessarily

Now that git-worktree sets HEAD explicitly to its final value via either
git-symbolic-ref or git-update-ref, rather than relying upon
git-checkout to do so, the "hack" for pacifying is_git_directory() with
a temporary HEAD, though still necessary, can be simplified.

Since the real HEAD is now populated with its proper final value, the
value of the temporary HEAD truly no longer matters, and any value which
looks like an object ID is good enough to satisfy is_git_directory().
Therefore, just set the temporary HEAD to a literal value rather than
going through the effort of resolving the current branch's HEAD.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: make setup of new HEAD distinct from worktree population
Eric Sunshine [Fri, 17 Jul 2015 23:00:14 +0000 (19:00 -0400)]
worktree: make setup of new HEAD distinct from worktree population

git-worktree currently conflates setting of HEAD in the new worktree and
initial worktree population into a single git-checkout invocation which
requires git-checkout to have special knowledge that it is operating on
a newly created worktree. The eventual goal is to rid git-checkout of
that overly-intimate knowledge.

Once these operations are separate, git-worktree will no longer be able
to delegate to git-branch the setting of the new worktree's HEAD to the
desired branch (or commit, if detached). Therefore, make git-worktree
itself responsible for setting up HEAD as either a symbolic reference,
if associated with a branch, or detached, if not.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: detect branch-name/detached and error conditions locally
Eric Sunshine [Fri, 17 Jul 2015 23:00:13 +0000 (19:00 -0400)]
worktree: detect branch-name/detached and error conditions locally

git-worktree currently conflates setting of HEAD in the new worktree
with initial worktree population via a single git-checkout invocation,
which requires git-checkout to have special knowledge that it is
operating in a newly created worktree. The eventual goal is to separate
these operations and rid git-checkout of that overly-intimate knowledge.

Once these operations are separate, git-worktree will no longer be able
to rely upon git-branch to determine the state of the worktree (branch
name or detached), or to check for error conditions, such as the
requested branch already checked out elsewhere, or an invalid reference.
Therefore, imbue git-worktree with the intelligence to determine a
branch name or detached state locally, and to perform error checking on
its own.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: add_worktree: construct worktree-population command locally
Eric Sunshine [Fri, 17 Jul 2015 23:00:12 +0000 (19:00 -0400)]
worktree: add_worktree: construct worktree-population command locally

The caller of add_worktree() provides it with a command to invoke to
populate the new worktree. This was a useful abstraction during the
conversion of "git checkout --to" functionality to "git worktree add"
since git-checkout and git-worktree constructed the population command
differently. However, now that "git checkout --to" has been retired, and
add_worktree() has access to the options given to "worktree add", this
extra indirection is no longer useful and makes the code a bit
convoluted.

Moreover, the eventual goal is for git-worktree to make setting of HEAD
and worktree population distinct operations, whereas they are currently
conflated into a single git-checkout invocation. As such, add_worktree()
will eventually invoke other commands in addition to the worktree
population command, so it will be doing command construction itself
anyhow.

Therefore, relocate construction of the worktree population command from
add() to add_worktree().

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: add: suppress auto-vivication with --detach and no <branch>
Eric Sunshine [Fri, 17 Jul 2015 23:00:09 +0000 (19:00 -0400)]
worktree: add: suppress auto-vivication with --detach and no <branch>

Fix oversight where branch auto-vivication incorrectly kicks in when
--detach is specified and <branch> omitted. Instead, treat:

    git worktree add --detach <path>

as shorthand for:

    git worktree add --detach <path> HEAD

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: elucidate environment variables intended for child processes
Eric Sunshine [Fri, 17 Jul 2015 23:00:11 +0000 (19:00 -0400)]
worktree: elucidate environment variables intended for child processes

Take advantage of 'struct child_process.env' to make it obvious that
environment variables set by add_worktree() are intended specifically
for sub-commands it invokes to operate in the new worktree.

We assign a local 'struct argv_array' to child_process.env, rather than
utilizing the child_process.env_array 'struct argv_array', because
future patches will make add_worktree() invoke additional sub-commands,
and it's simpler to populate the environment array just once, whereas
child_process.env_array gets cleared after each invocation, thus would
require re-population for each sub-command.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: make branch creation distinct from worktree population
Eric Sunshine [Fri, 17 Jul 2015 23:00:10 +0000 (19:00 -0400)]
worktree: make branch creation distinct from worktree population

git-worktree currently conflates branch creation, setting of HEAD in the
new worktree, and worktree population into a single sub-invocation of
git-checkout, which requires git-checkout to be specially aware that it
is operating in a newly-created worktree. The goal is to free
git-checkout of that special knowledge, and to do so, git-worktree will
eventually perform those operations separately. Thus, as a first step,
rather than piggybacking on git-checkout's -b/-B ability to create a new
branch at checkout time, make git-worktree responsible for branch
creation itself.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: make --detach mutually exclusive with -b/-B
Eric Sunshine [Fri, 17 Jul 2015 23:00:08 +0000 (19:00 -0400)]
worktree: make --detach mutually exclusive with -b/-B

Be consistent with git-checkout which disallows this (not particularly
meaningful) combination.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: introduce options container
Eric Sunshine [Fri, 17 Jul 2015 23:00:07 +0000 (19:00 -0400)]
worktree: introduce options container

add_worktree() will eventually need to deal with some options itself, so
introduce a structure into which options can be conveniently bundled,
and pass it along to add_worktree().

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: simplify new branch (-b/-B) option checking
Eric Sunshine [Fri, 17 Jul 2015 23:00:06 +0000 (19:00 -0400)]
worktree: simplify new branch (-b/-B) option checking

Make 'new_branch' be the name of the new branch for both forced and
non-forced cases; and add boolean 'force_new_branch' to indicate forced
branch creation. This will simplify logic later on when git-worktree
handles branch creation locally rather than delegating it to
git-checkout as part of the worktree population phase.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoworktree: improve worktree setup message
Eric Sunshine [Fri, 17 Jul 2015 23:00:05 +0000 (19:00 -0400)]
worktree: improve worktree setup message

When git-worktree creates a new worktree, it reports:

    Enter "<path>" (identifier <tag>)

which misleadingly implies that it is setting <path> as the working
directory (as if "cd <path>" had been invoked), whereas it's actually
preparing the new worktree by creating its administrative files, setting
HEAD, and populating it. Make this more clear by instead saying:

    Preparing "<path>" (identifier <tag>)

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agobranch: publish die_if_checked_out()
Eric Sunshine [Fri, 17 Jul 2015 23:00:04 +0000 (19:00 -0400)]
branch: publish die_if_checked_out()

git-worktree currently conflates new branch creation, setting of HEAD in
the new wortkree, and worktree population into a single sub-invocation
of git-checkout. However, these operations will eventually be separated,
and git-worktree itself will need to be able to detect if the branch is
already checked out elsewhere, rather than relying upon git-branch to
make this determination, so publish die_if_checked_out().

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: teach check_linked_checkout() about symbolic link HEAD
Eric Sunshine [Fri, 17 Jul 2015 23:00:03 +0000 (19:00 -0400)]
checkout: teach check_linked_checkout() about symbolic link HEAD

check_linked_checkout() only understands symref-style HEAD (i.e. "ref:
refs/heads/master"), however, HEAD may also be a an actual symbolic link
(on platforms which support it). To accurately detect if a branch is
checked out elsewhere, it needs to handle symbolic link HEAD, as well.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: check_linked_checkout: simplify symref parsing
Eric Sunshine [Fri, 17 Jul 2015 23:00:02 +0000 (19:00 -0400)]
checkout: check_linked_checkout: simplify symref parsing

check_linked_checkout() only understands symref-style HEAD (i.e. "ref:
refs/heads/master"), however, HEAD may also be a an actual symbolic link
(on platforms which support it), thus it will need to check that style
HEAD, as well (via readlink()). As a preparatory step, simplify parsing
of symref-style HEAD so the actual branch check can be re-used easily
for symbolic links (in an upcoming patch).

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: check_linked_checkout: improve "already checked out" aesthetic
Eric Sunshine [Fri, 17 Jul 2015 23:00:01 +0000 (19:00 -0400)]
checkout: check_linked_checkout: improve "already checked out" aesthetic

When check_linked_checkout() discovers that the branch is already
checked out elsewhere, it emits the diagnostic:

    'blorp' is already checked out at '/some/path/.git'

which is misleading since "checked out at" implies the working tree, but
".git" is the location of the repository administrative files. Fix by
dropping ".git" from the message.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: generalize die_if_checked_out() branch name argument
Eric Sunshine [Fri, 17 Jul 2015 23:00:00 +0000 (19:00 -0400)]
checkout: generalize die_if_checked_out() branch name argument

The plan is to publish die_if_checked_out() so that callers other than
git-checkout can take advantage of it, however, those callers won't have
access to git-checkout's "struct branch_info". Therefore, change it to
accept the full name of the branch as a simple string instead.

While here, also give the argument a more meaningful name ("branch"
instead of "new").

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: die_if_checked_out: simplify strbuf management
Eric Sunshine [Fri, 17 Jul 2015 22:59:59 +0000 (18:59 -0400)]
checkout: die_if_checked_out: simplify strbuf management

There is no reason to keep the strbuf active long after its last use.
By releasing it as early as possible, resource management is simplified
and there is less worry about future changes resulting in a leak.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: improve die_if_checked_out() robustness
Eric Sunshine [Fri, 17 Jul 2015 22:59:58 +0000 (18:59 -0400)]
checkout: improve die_if_checked_out() robustness

die_if_checked_out() is intended to check if the branch about to be
checked out is already checked out either in the main worktree or in a
linked worktree. However, if .git/worktrees directory does not exist,
then it never bothers checking the main worktree, even though the
specified branch might indeed be checked out there, which is fragile
behavior.

This hasn't been a problem in practice since the current implementation
of "git worktree add" (and, earlier, "git checkout --to") always creates
.git/worktrees before die_if_checked_out() is called by the child "git
checkout" invocation which populates the new worktree.

However, git-worktree will eventually want to call die_if_checked_out()
itself rather than only doing so indirectly as a side-effect of invoking
git-checkout, and reliance upon order of operations (creating
.git/worktrees before checking if a branch is already checked out) is
fragile. As a general function, callers should not be expected to abide
by this undocumented and unwarranted restriction. Therefore, make
die_if_checked_out() more robust by checking the main worktree whether
.git/worktrees exists or not.

While here, also move a comment explaining why die_if_checked_out()'s
helper parses HEAD manually. Such information resides more naturally
with the helper itself rather than at its first point of call.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: name check_linked_checkouts() more meaningfully
Eric Sunshine [Fri, 17 Jul 2015 22:59:57 +0000 (18:59 -0400)]
checkout: name check_linked_checkouts() more meaningfully

check_linked_checkouts() doesn't just "check" linked checkouts for
"something"; specifically, it aborts the operation if the branch about
to be checked out is already checked out elsewhere. Therefore, rename it
to die_if_checked_out() to give a better indication of its function.
The more meaningful name will be particularly important when this
function is later published for use by other callers.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agocheckout: avoid resolving HEAD unnecessarily
Eric Sunshine [Fri, 17 Jul 2015 22:59:56 +0000 (18:59 -0400)]
checkout: avoid resolving HEAD unnecessarily

When --ignore-other-worktree is specified, we unconditionally skip the
check to see if the requested branch is already checked out in a linked
worktree. Since we know that we will be skipping that check, there is no
need to resolve HEAD in order to detect other conditions under which we
may skip the check.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoconfig: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"
Eric Sunshine [Mon, 20 Jul 2015 05:29:22 +0000 (01:29 -0400)]
config: rename "gc.pruneWorktreesExpire" to "gc.worktreePruneExpire"

As of df0b6cf (worktree: new place for "git prune --worktrees",
2015-06-29), linked worktree pruning functionality moved from
"git prune --worktrees" to "git worktree prune". Rename the
associated configuration variable accordingly.

Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoDocumentation/git-worktree: wordsmith worktree-related manpages
Michael Haggerty [Mon, 20 Jul 2015 05:29:21 +0000 (01:29 -0400)]
Documentation/git-worktree: wordsmith worktree-related manpages

[es: reword .git/worktrees and .git/worktrees/<id>/locked descriptions]

Signed-off-by: Michael Haggerty <redacted>
Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoDocumentation/config: fix stale "git prune --worktree" reference
Michael Haggerty [Mon, 20 Jul 2015 05:29:20 +0000 (01:29 -0400)]
Documentation/config: fix stale "git prune --worktree" reference

This should have been changed to "git worktree prune" by df0b6cf
(worktree: new place for "git prune --worktrees", 2015-06-29)

[es: reword commit message]

Signed-off-by: Michael Haggerty <redacted>
Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoDocumentation/git-worktree: fix incorrect reference to file "locked"
Michael Haggerty [Mon, 20 Jul 2015 05:29:19 +0000 (01:29 -0400)]
Documentation/git-worktree: fix incorrect reference to file "locked"

The administrative file to suppress pruning is named "locked", not "lock".

[es: don't touch unrelated "git worktree lock" command; reword commit
message]

Signed-off-by: Michael Haggerty <redacted>
Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agoDocumentation/git-worktree: consistently use term "linked working tree"
Michael Haggerty [Mon, 20 Jul 2015 05:29:18 +0000 (01:29 -0400)]
Documentation/git-worktree: consistently use term "linked working tree"

Sometimes linked working trees were called "linked working
directories" or "linked worktrees". Always refer to them as "linked
working trees" for consistency.

[es: fix additional occurrences]

Signed-off-by: Michael Haggerty <redacted>
Signed-off-by: Eric Sunshine <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agol10n: ca.po: update translation
Alex Henrie [Mon, 20 Jul 2015 17:54:40 +0000 (11:54 -0600)]
l10n: ca.po: update translation

Signed-off-by: Alex Henrie <redacted>
10 years agot3901: test git-am encoding conversion
Paul Tan [Sun, 19 Jul 2015 15:49:18 +0000 (23:49 +0800)]
t3901: test git-am encoding conversion

Since d1c5f2a (Add git-am, applymbox replacement., 2005-10-07), git-am
supported the --utf8 and --no-utf8 options, and if set, would pass the
-u flag and the -k flag respectively.

git mailinfo -u will re-code the commit log message and authorship info
in the charset specified by i18n.commitencoding setting, while
git mailinfo -n will disable the re-coding.

Since d84029b (--utf8 is now default for 'git-am', 2007-01-08), --utf8
is set by default in git-am.

Add various encoding conversion tests to t3901 to test git-mailinfo's
encoding conversion. In addition, add a test for --no-utf8 to check that
no encoding conversion will occur if that option is set.

Helped-by: Johannes Sixt <redacted>
Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot3418: non-interactive rebase --continue with rerere enabled
Paul Tan [Sun, 19 Jul 2015 15:49:17 +0000 (23:49 +0800)]
t3418: non-interactive rebase --continue with rerere enabled

Since 8389b52 (git-rerere: reuse recorded resolve., 2006-01-28), git-am
will call git-rerere to re-use recorded merge conflict resolutions if
any occur in a threeway merge.

Add a test to ensure that git-rerere is called by git-am (which handles
the non-interactive rebase).

Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: tests for am --[no-]scissors
Paul Tan [Sun, 19 Jul 2015 15:49:16 +0000 (23:49 +0800)]
t4150: tests for am --[no-]scissors

Since 017678b (am/mailinfo: Disable scissors processing by default,
2009-08-26), git-am supported the --[no-]scissors option, passing it to
git-mailinfo.

Add tests to ensure that git-am will pass the --scissors option to
git-mailinfo, and that --no-scissors will override the configuration
setting of mailinfo.scissors.

Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am with post-applypatch hook
Paul Tan [Sun, 19 Jul 2015 15:49:15 +0000 (23:49 +0800)]
t4150: am with post-applypatch hook

Since d1c5f2a (Add git-am, applymbox replacement., 2005-10-07),
git-am.sh will invoke the post-applypatch hook after the patch is
applied and a commit is made. The exit code of the hook is ignored.

Add tests for this hook.

Helped-by: Junio C Hamano <redacted>
Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am with pre-applypatch hook
Paul Tan [Sun, 19 Jul 2015 15:49:14 +0000 (23:49 +0800)]
t4150: am with pre-applypatch hook

Since d1c5f2a (Add git-am, applymbox replacement., 2005-10-07),
git-am.sg will invoke the pre-applypatch hook after applying the patch
to the index, but before a commit is made. Should the hook exit with a
non-zero status, git am will exit.

Add tests for this hook.

Helped-by: Junio C Hamano <redacted>
Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am with applypatch-msg hook
Paul Tan [Sun, 19 Jul 2015 15:49:13 +0000 (23:49 +0800)]
t4150: am with applypatch-msg hook

Since d1c5f2a (Add git-am, applymbox replacement., 2005-10-07), git-am
will invoke the applypatch-msg hooks just after extracting the patch
message. If the applypatch-msg hook exits with a non-zero status, git-am
abort before even applying the patch to the index.

Add tests for this hook.

Helped-by: Junio C Hamano <redacted>
Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am --resolved fails if index has unmerged entries
Paul Tan [Sun, 19 Jul 2015 15:49:12 +0000 (23:49 +0800)]
t4150: am --resolved fails if index has unmerged entries

Since c1d1128 (git-am --resolved: more usable error message.,
2006-04-28), git-am --resolved will check to see if there are any
unmerged entries, and will error out with a user-friendly error message
if there are.

Add a test for this.

Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am --resolved fails if index has no changes
Paul Tan [Sun, 19 Jul 2015 15:49:11 +0000 (23:49 +0800)]
t4150: am --resolved fails if index has no changes

Since 6d28644 (git-am: do not allow empty commits by mistake.,
2006-02-23), git-am --resolved will check to see if the index has any
changes to prevent the user from creating an empty commit by mistake.

Add a test for this.

Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
10 years agot4150: am refuses patches when paused
Paul Tan [Sun, 19 Jul 2015 15:49:10 +0000 (23:49 +0800)]
t4150: am refuses patches when paused

Since c95b138 (Fix git-am safety checks, 2006-09-15), when there is a
session in progress, git-am will check the command-line arguments and
standard input to ensure that the user does not pass it any patches.

Add a test for this.

Reviewed-by: Stefan Beller <redacted>
Reviewed-by: Johannes Schindelin <redacted>
Signed-off-by: Paul Tan <redacted>
Signed-off-by: Junio C Hamano <redacted>
git clone https://git.99rst.org/PROJECT