Code

git.git
15 years agorebase: use plumbing to show dirty state
Jeff King [Wed, 9 Sep 2009 14:59:37 +0000 (10:59 -0400)]
rebase: use plumbing to show dirty state

Commit 4cfbe06 introduced the use of "git diff" to show
dirty state in a format more familiar to users. However, it
should have used the plumbing "git diff-files" instead.

Not only is it good practice in general to use plumbing in
scripts, but in this case we really don't want the automatic
pager to kick in for an error message.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agopager: set LESS=FRSX also on Windows
Johannes Sixt [Fri, 11 Sep 2009 17:45:07 +0000 (19:45 +0200)]
pager: set LESS=FRSX also on Windows

Previously, this environment variable was set in the pager_preexec
callback, which is conditionally-compiled only on Unix, because it is not,
and cannot be, called on Windows.

With this patch the env member of struct child_process is used to set
the environment variable, which also works on Windows.

Noticed by Alexey Borzenkov.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agostart_command: do not clobber cmd->env on Windows code path
Johannes Sixt [Fri, 11 Sep 2009 17:40:08 +0000 (19:40 +0200)]
start_command: do not clobber cmd->env on Windows code path

Previously, it would not be possible to call start_command twice for the
same struct child_process that has env set.

The fix is achieved by moving the loop that modifies the environment block
into a helper function. This also allows us to make two other helper
functions static.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoadd documentation for mailinfo.scissors and '--no-scissors'
Nicolas Sebrecht [Fri, 11 Sep 2009 00:29:58 +0000 (02:29 +0200)]
add documentation for mailinfo.scissors and '--no-scissors'

Signed-off-by: Nicolas Sebrecht <nicolas.s.dev@gmx.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agomailinfo: add '--scissors' to usage message
Nicolas Sebrecht [Fri, 11 Sep 2009 00:09:20 +0000 (02:09 +0200)]
mailinfo: add '--scissors' to usage message

Signed-off-by: Nicolas Sebrecht <nicolas.s.dev@gmx.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoINSTALL: Describe dependency knobs from Makefile
Brian Gernhardt [Thu, 10 Sep 2009 20:28:19 +0000 (16:28 -0400)]
INSTALL: Describe dependency knobs from Makefile

We said that some of our dependencies were optional, but didn't say
how to turn them off.  Add information for that and mention where to
save the options close to the top of the file.

Also, standardize on both using quotes for the names of the dependencies
and tabs for indentation of the list.

Signed-off-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoINSTALL: Reorder dependencies, split shell and Perl
Brian Gernhardt [Wed, 9 Sep 2009 01:51:00 +0000 (21:51 -0400)]
INSTALL: Reorder dependencies, split shell and Perl

The most important and non-optional dependencies should go first, so put
them there.  While we're moving them, the descriptions for shell and perl
were archaic, referring to "bare-bones Porcelainish scripts" that have
become powerful and essential.

Signed-off-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-p4: Avoid modules deprecated in Python 2.6.
Reilly Grant [Thu, 10 Sep 2009 07:02:38 +0000 (00:02 -0700)]
git-p4: Avoid modules deprecated in Python 2.6.

The popen2, sha and sets modules are deprecated in Python 2.6 (sha in
Python 2.5).  Both popen2 and sha are not actually used in git-p4.
Replace usage of sets.Set with the builtin set object.

The built-in set object was added in Python 2.4 and is already used in
other parts of this script, so this dependency is nothing new.

Signed-off-by: Reilly Grant <reillyeon@qotw.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMakefile: Add NEEDS_CRYPTO_WITH_SSL
Brian Gernhardt [Tue, 8 Sep 2009 13:54:38 +0000 (09:54 -0400)]
Makefile: Add NEEDS_CRYPTO_WITH_SSL

The Makefile comment for NEEDS_SSL_WITH_CRYPTO says to define it "if
you need -lcrypto with -lssl (Darwin)."  However, what it actually
does is add -lssl when you use -lcrypto and not the other way around.
However, libcrypto contains a majority of the ERR_* functions from
OpenSSL (at least on OS X) so we need it both ways.

So, add NEEDS_CRYPTO_WITH_SSL which adds -lcrypto to the OpenSSL link
flags and clarify the difference between it and NEEDS_SSL_WITH_CRYPTO.

Signed-off-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit.el: Use git-add-file for unmerged files, remove git-resolve-file
Martin Nordholts [Thu, 3 Sep 2009 20:27:24 +0000 (22:27 +0200)]
git.el: Use git-add-file for unmerged files, remove git-resolve-file

Use `git-add-file' to mark unmerged files as resolved in the
*git-status* buffer to be consistent with git's CLI instructions. Also
remove `git-resolve-file' to make it clear that that "R" is a now a
free keybinding.

Signed-off-by: Martin Nordholts <martinn@src.gnome.org>
Acked-by: Alexandre Julliard <julliard@winehq.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoINSTALL: Update description of our SHA-1 code
Brian Gernhardt [Wed, 9 Sep 2009 01:50:59 +0000 (21:50 -0400)]
INSTALL: Update description of our SHA-1 code

We haven't had Mozilla's code or an ARM optimized algorithm since
30ae47b.  Reword the paragraph to give credit but not authorship to
Mozilla.

Signed-off-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoGIT 1.6.5-rc0 v1.6.5-rc0
Junio C Hamano [Tue, 8 Sep 2009 00:20:02 +0000 (17:20 -0700)]
GIT 1.6.5-rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Mon, 7 Sep 2009 22:45:48 +0000 (15:45 -0700)]
Merge branch 'maint'

* maint:
  git-pull: do not mention --quiet and --verbose twice
  githooks.txt: put hooks into subsections

15 years agogit-pull: do not mention --quiet and --verbose twice
Emmanuel Trillaud [Mon, 7 Sep 2009 12:34:35 +0000 (14:34 +0200)]
git-pull: do not mention --quiet and --verbose twice

git-pull.txt includes fetch-options.txt and merge-options.txt, both of
which document the --quiet and --verbose.

Supress the ones from fetch-options.txt.

Signed-off-by: Emmanuel Trillaud <etrillaud@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogithooks.txt: put hooks into subsections
Bert Wesarg [Sun, 6 Sep 2009 10:22:58 +0000 (12:22 +0200)]
githooks.txt: put hooks into subsections

All hooks are currently in its own section. Which may confuse users,
because the section name serves as the hook file name and sections are
all caps for man pages. Putting them into a new HOOKS section and each
hook into a subsection keeps the case to lower case.

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'jc/mailinfo-scissors'
Junio C Hamano [Mon, 7 Sep 2009 22:25:37 +0000 (15:25 -0700)]
Merge branch 'jc/mailinfo-scissors'

* jc/mailinfo-scissors:
  mailinfo.scissors: new configuration
  am/mailinfo: Disable scissors processing by default
  Documentation: describe the scissors mark support of "git am"
  Teach mailinfo to ignore everything before -- >8 -- mark
  builtin-mailinfo.c: fix confusing internal API to mailinfo()

15 years agoMerge branch 'jk/clone-b'
Junio C Hamano [Mon, 7 Sep 2009 22:24:53 +0000 (15:24 -0700)]
Merge branch 'jk/clone-b'

* jk/clone-b:
  clone: add --branch option to select a different HEAD

15 years agoMerge branch 'jc/upload-pack-hook'
Junio C Hamano [Mon, 7 Sep 2009 22:24:47 +0000 (15:24 -0700)]
Merge branch 'jc/upload-pack-hook'

* jc/upload-pack-hook:
  upload-pack: feed "kind [clone|fetch]" to post-upload-pack hook
  upload-pack: add a trigger for post-upload-pack hook

15 years agoMerge branch 'tr/reset-checkout-patch'
Junio C Hamano [Mon, 7 Sep 2009 22:24:38 +0000 (15:24 -0700)]
Merge branch 'tr/reset-checkout-patch'

* tr/reset-checkout-patch:
  stash: simplify defaulting to "save" and reject unknown options
  Make test case number unique
  tests: disable interactive hunk selection tests if perl is not available
  DWIM 'git stash save -p' for 'git stash -p'
  Implement 'git stash save --patch'
  Implement 'git checkout --patch'
  Implement 'git reset --patch'
  builtin-add: refactor the meat of interactive_add()
  Add a small patch-mode testing library
  git-apply--interactive: Refactor patch mode code
  Make 'git stash -k' a short form for 'git stash save --keep-index'

15 years agoMerge branch 'np/maint-1.6.3-deepen'
Junio C Hamano [Mon, 7 Sep 2009 22:23:50 +0000 (15:23 -0700)]
Merge branch 'np/maint-1.6.3-deepen'

* np/maint-1.6.3-deepen:
  pack-objects: free preferred base memory after usage
  make shallow repository deepening more network efficient

15 years agoMerge branch 'maint'
Junio C Hamano [Sun, 6 Sep 2009 07:39:32 +0000 (00:39 -0700)]
Merge branch 'maint'

* maint:
  push: re-flow non-fast-forward message
  push: fix english in non-fast-forward message

15 years agopush: re-flow non-fast-forward message
Jeff King [Sun, 6 Sep 2009 06:47:20 +0000 (02:47 -0400)]
push: re-flow non-fast-forward message

The extreme raggedness of the right edge make this jarring
to read. Let's re-flow the text to fill the lines in a more
even way.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agopush: fix english in non-fast-forward message
Jeff King [Sun, 6 Sep 2009 06:46:25 +0000 (02:46 -0400)]
push: fix english in non-fast-forward message

We must use an article when referring to the section
because it is a non-proper noun, and it must be the definite
article because we are referring to a specific section.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDo not scramble password read from .cvspass
Pascal Obry [Fri, 4 Sep 2009 11:58:32 +0000 (13:58 +0200)]
Do not scramble password read from .cvspass

Passwords stored in .cvspass are already scrambled, we do not
want to scramble them twice. Only passwords read from the
command line are scrambled.

This fixes a regression introduced by b2139db (git-cvsimport: add support
for cvs pserver password scrambling., 2009-08-14).

Signed-off-by: Pascal Obry <pascal@obry.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agopack-objects: free preferred base memory after usage
Nicolas Pitre [Fri, 4 Sep 2009 01:54:03 +0000 (21:54 -0400)]
pack-objects: free preferred base memory after usage

When adding objects for preferred delta base, the content from tree
objects leading to given paths is kept in a cache. This has the
potential to grow significantly, especially with large directories as
the whole tree object content is loaded in memory, even if in practice
the number of those objects is limited to the 256 cache entries plus the
$window root tree objects.  Still, that can't hurt freeing that up after
object enumeration is done, and before more memory is needed for delta
search.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agomake shallow repository deepening more network efficient
Nicolas Pitre [Thu, 3 Sep 2009 23:08:33 +0000 (19:08 -0400)]
make shallow repository deepening more network efficient

First of all, I can't find any reason why thin pack generation is
explicitly disabled when dealing with a shallow repository.  The
possible delta base objects are collected from the edge commits which
are always obtained through history walking with the same shallow refs
as the client, Therefore the client is always going to have those base
objects available. So let's remove that restriction.

Then we can make shallow repository deepening much more efficient by
using the remote's unshallowed commits as edge commits to get preferred
base objects for thin pack generation.  On git.git, this makes the data
transfer for the deepening of a shallow repository from depth 1 to depth 2
around 134 KB instead of 3.68 MB.

Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Thu, 3 Sep 2009 16:43:08 +0000 (09:43 -0700)]
Merge branch 'maint'

* maint:
  git-clone: add missing comma in --reference documentation

15 years agoMerge branch 'maint-1.6.3' into maint
Junio C Hamano [Thu, 3 Sep 2009 16:42:56 +0000 (09:42 -0700)]
Merge branch 'maint-1.6.3' into maint

* maint-1.6.3:
  git-clone: add missing comma in --reference documentation
  git-cvsserver: no longer use deprecated 'git-subcommand' commands
  clone: disconnect transport after fetching

15 years agoMerge branch 'maint-1.6.2' into maint-1.6.3
Junio C Hamano [Thu, 3 Sep 2009 16:42:38 +0000 (09:42 -0700)]
Merge branch 'maint-1.6.2' into maint-1.6.3

* maint-1.6.2:
  git-clone: add missing comma in --reference documentation
  clone: disconnect transport after fetching

15 years agogit-clone: add missing comma in --reference documentation
Miklos Vajna [Thu, 3 Sep 2009 11:24:16 +0000 (13:24 +0200)]
git-clone: add missing comma in --reference documentation

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Thu, 3 Sep 2009 02:52:18 +0000 (19:52 -0700)]
Merge branch 'maint'

* maint:
  git-cvsserver: no longer use deprecated 'git-subcommand' commands
  clone: disconnect transport after fetching

15 years agoMerge branch 'maint-1.6.3' into maint
Junio C Hamano [Thu, 3 Sep 2009 02:51:55 +0000 (19:51 -0700)]
Merge branch 'maint-1.6.3' into maint

* maint-1.6.3:
  git-cvsserver: no longer use deprecated 'git-subcommand' commands
  clone: disconnect transport after fetching

15 years agopush: teach --quiet to suppress "Everything up-to-date"
Jeff King [Mon, 31 Aug 2009 19:28:34 +0000 (15:28 -0400)]
push: teach --quiet to suppress "Everything up-to-date"

This should have been part of 481c7a6, whose goal was to
make "git push -q" silent unless there is an error.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.2' into maint-1.6.3
Junio C Hamano [Thu, 3 Sep 2009 01:45:44 +0000 (18:45 -0700)]
Merge branch 'maint-1.6.2' into maint-1.6.3

* maint-1.6.2:
  clone: disconnect transport after fetching

15 years agogit-cvsserver: no longer use deprecated 'git-subcommand' commands
Gerrit Pape [Wed, 2 Sep 2009 09:23:10 +0000 (09:23 +0000)]
git-cvsserver: no longer use deprecated 'git-subcommand' commands

git-cvsserver still references git commands like 'git-config', which
is depcrecated.  This commit changes git-cvsserver to use the
'git subcommand' form.

Sylvain Beucler reported the problem through
 http://bugs.debian.org/536067

Signed-off-by: Gerrit Pape <pape@smarden.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoclone: disconnect transport after fetching
Jeff King [Wed, 2 Sep 2009 06:36:47 +0000 (02:36 -0400)]
clone: disconnect transport after fetching

The current code just leaves the transport in whatever state
it was in after performing the fetch.  For a non-empty clone
over the git protocol, the transport code already
disconnects at the end of the fetch.

But for an empty clone, we leave the connection hanging, and
eventually close the socket when clone exits. This causes
the remote upload-pack to complain "the remote end hung up
unexpectedly". While this message is harmless to the clone
itself, it is unnecessarily scary for a user to see and may
pollute git-daemon logs.

This patch just explicitly calls disconnect after we are
done with the remote end, which sends a flush packet to
upload-pack and cleanly disconnects, avoiding the error
message.

Other transports are unaffected or slightly improved:

 - for a non-empty repo over the git protocol, the second
   disconnect is a no-op (since we are no longer connected)

 - for "walker" transports (like HTTP or FTP), we actually
   free some used memory (which previously just sat until
   the clone process exits)

 - for "rsync", disconnect is always a no-op anyway

Signed-off-by: Jeff King <peff@peff.net>
Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agostatus: list unmerged files much later
Johannes Sixt [Tue, 1 Sep 2009 20:13:53 +0000 (22:13 +0200)]
status: list unmerged files much later

When resolving a conflicted merge, two lists in the status output need
more attention from the user than other parts.

 - the list of updated paths is useful to review the amount of changes the
   merge brings in (the user cannot do much about them other than
   reviewing, though); and

 - the list of unmerged paths needs the most attention from the user; the
   user needs to resolve them in order to proceed.

Since the output of git status does not by default go through the pager,
the early parts of the output can scroll away at the top. It is better to
put the more important information near the bottom.  During a merge, local
changes that are not in the index are minimum, and you should keep the
untracked list small in any case, so moving the unmerged list from the top
of the output to immediately after the list of updated paths would give us
the optimum layout.

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agostash: simplify defaulting to "save" and reject unknown options
Matthieu Moy [Tue, 18 Aug 2009 21:38:40 +0000 (23:38 +0200)]
stash: simplify defaulting to "save" and reject unknown options

With the earlier DWIM patches, certain combination of options defaulted
to the "save" command correctly while certain equally valid combination
did not.  For example, "git stash -k" were Ok but "git stash -q -k" did
not work.

This makes the logic of defaulting to "save" much simpler. If there are no
non-flag arguments, it is clear that there is no command word, and we
default to "save" subcommand.  This rule prevents "git stash -q apply"
from quietly creating a stash with "apply" as the message.

This also teaches "git stash save" to reject an unknown option.  This is
to keep a mistyped "git stash save --quite" from creating a stash with a
message "--quite", and this safety is more important with the new logic
to default to "save" with any option-looking argument without an explicit
comand word.

[jc: this is based on Matthieu's 3-patch series, and a follow-up
discussion, and he and Peff take all the credit; if I have introduced bugs
while reworking, they are mine.]

Signed-off-by: Matthieu Moy <Matthieu.Moy@imag.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobuiltin-apply.c: get rid of an unnecessary use of temporary array
Junio C Hamano [Tue, 1 Sep 2009 09:18:29 +0000 (02:18 -0700)]
builtin-apply.c: get rid of an unnecessary use of temporary array

Instead of allocating a temporary array imglen[], copying contents to it
from another array img->line[], and then using imglen[], use the value
from img->line[], whose value does not change during the whole process.

This incidentally removes a use of C99 variable length array, which some
older compilers apparently are not happy with.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobuiltin-pack-objects.c: avoid vla
Junio C Hamano [Tue, 1 Sep 2009 09:18:52 +0000 (02:18 -0700)]
builtin-pack-objects.c: avoid vla

This is one of only two places that we use C99 variable length array on
the stack, which some older compilers apparently are not happy with.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoStyle fixes, add a space after if/for/while.
Brian Gianforcaro [Tue, 1 Sep 2009 05:35:10 +0000 (01:35 -0400)]
Style fixes, add a space after if/for/while.

The majority of code in core git appears to use a single
space after if/for/while. This is an attempt to bring more
code to this standard. These are entirely cosmetic changes.

Signed-off-by: Brian Gianforcaro <b.gianfo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'lt/approxidate'
Junio C Hamano [Tue, 1 Sep 2009 05:11:36 +0000 (22:11 -0700)]
Merge branch 'lt/approxidate'

* lt/approxidate:
  fix approxidate parsing of relative months and years
  tests: add date printing and parsing tests
  refactor test-date interface
  Add date formatting and parsing functions relative to a given time
  Further 'approxidate' improvements
  Improve on 'approxidate'

Conflicts:
date.c

15 years agoMerge branch 'mr/gitweb-snapshot'
Junio C Hamano [Tue, 1 Sep 2009 05:09:53 +0000 (22:09 -0700)]
Merge branch 'mr/gitweb-snapshot'

* mr/gitweb-snapshot:
  gitweb: add t9501 tests for checking HTTP status codes
  gitweb: split test suite into library and tests
  gitweb: improve snapshot error handling

15 years agoMerge branch 'tf/diff-whitespace-incomplete-line'
Junio C Hamano [Tue, 1 Sep 2009 05:08:57 +0000 (22:08 -0700)]
Merge branch 'tf/diff-whitespace-incomplete-line'

* tf/diff-whitespace-incomplete-line:
  xutils: Fix xdl_recmatch() on incomplete lines
  xutils: Fix hashing an incomplete line with whitespaces at the end

15 years agofix approxidate parsing of relative months and years
Jeff King [Mon, 31 Aug 2009 02:31:42 +0000 (22:31 -0400)]
fix approxidate parsing of relative months and years

These were broken by b5373e9. The problem is that the code
marks the month and year with "-1" for "we don't know it
yet", but the month and year code paths were not adjusted to
fill in the current time before doing their calculations
(whereas other units follow a different code path and are
fine).

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agotests: add date printing and parsing tests
Jeff King [Mon, 31 Aug 2009 02:30:16 +0000 (22:30 -0400)]
tests: add date printing and parsing tests

Until now, there was no coverage of relative date printing
or approxidate parsing routines (mainly because we had no
way of faking the "now" time for relative date calculations,
which made consistent testing impossible).

This new script tries to exercise the basic features of
show_date and approxidate. Most of the tests are just "this
obvious thing works" to prevent future regressions, with a
few exceptions:

  - We confirm the fix in 607a9e8 that relative year/month
    dates in the latter half of a year round correctly.

  - We confirm that the improvements in b5373e9 and 1bddb25
    work.

  - A few tests are marked to expect failure, which are
    regressions recently introduced by the two commits
    above.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agorefactor test-date interface
Jeff King [Mon, 31 Aug 2009 02:26:46 +0000 (22:26 -0400)]
refactor test-date interface

The test-date program goes back to the early days of git,
where it was presumably used to do manual sanity checks on
changes to the date code. However, it is not actually used
by the test suite to do any sort of automatic of systematic
tests.

This patch refactors the interface to the program to try to
make it more suitable for use by the test suite. There
should be no fallouts to changing the interface since it is
not actually installed and is not internally called by any
other programs.

The changes are:

  - add a "mode" parameter so the caller can specify which
    operation to test

  - add a mode to test relative date output from show_date

  - allow faking a fixed time via the TEST_DATE_NOW
    environment variable, which allows consistent automated
    testing

  - drop the use of ctime for showing dates in favor of our
    internal iso8601 printing routines. The ctime output is
    somewhat redundant (because of the day-of-week) which
    makes writing test cases more annoying.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoAdd date formatting and parsing functions relative to a given time
Alex Riesen [Mon, 31 Aug 2009 02:26:05 +0000 (22:26 -0400)]
Add date formatting and parsing functions relative to a given time

The main purpose is to allow predictable testing of the code.

Signed-off-by: Alex Riesen <raa.lkml@gmail.com>
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoSync with 1.6.4.2
Junio C Hamano [Sat, 29 Aug 2009 21:52:03 +0000 (14:52 -0700)]
Sync with 1.6.4.2

15 years agoGIT 1.6.4.2 v1.6.4.2
Junio C Hamano [Sat, 29 Aug 2009 21:31:01 +0000 (14:31 -0700)]
GIT 1.6.4.2

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoUI consistency: allow --force for where -f means force
René Scharfe [Sat, 29 Aug 2009 09:05:00 +0000 (11:05 +0200)]
UI consistency: allow --force for where -f means force

git branch, checkout, clean, mv and tag all have an option -f to override
certain checks.  This patch makes them accept the long option --force as
a synonym.

While we're at it, document that checkout support --quiet as synonym for
its short option -q.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoupdate-server-info: make builtin, use parseopt
René Scharfe [Sat, 29 Aug 2009 09:04:52 +0000 (11:04 +0200)]
update-server-info: make builtin, use parseopt

Convert git update-server-info to a built-in command and use parseopt.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoRemove unused t/t8005/iso8859-5.txt
Nanako Shiraishi [Sat, 29 Aug 2009 07:49:32 +0000 (00:49 -0700)]
Remove unused t/t8005/iso8859-5.txt

This file is no longer used since 54bc13c (t8005: Nobody writes Russian in
shift_jis, 2009-06-18).

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoupload-pack: feed "kind [clone|fetch]" to post-upload-pack hook
Junio C Hamano [Sat, 29 Aug 2009 05:19:45 +0000 (22:19 -0700)]
upload-pack: feed "kind [clone|fetch]" to post-upload-pack hook

A request to clone the repository does not give any "have" but asks for
all the refs we offer with "want".  When a request does not ask to clone
the repository fully, but asks to fetch some refs into an empty
repository, it will not give any "have" but its "want" won't ask for all
the refs we offer.

If we suppose (and I would say this is a rather big if) that it makes
sense to distinguish these two cases, a hook cannot reliably do this
alone.  The hook can detect lack of "have" and bunch of "want", but there
is no direct way to tell if the other end asked for all refs we offered,
or merely most of them.

Between the time we talked with the other end and the time the hook got
called, we may have acquired more refs or lost some refs in the repository
by concurrent operations.  Given that we plan to introduce selective
advertisement of refs with a protocol extension, it would become even more
difficult for hooks to guess between these two cases.

This adds "kind [clone|fetch]" to hook's input, as a stable interface to
allow the hooks to tell these cases apart.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoupload-pack: add a trigger for post-upload-pack hook
Junio C Hamano [Wed, 26 Aug 2009 23:39:10 +0000 (16:39 -0700)]
upload-pack: add a trigger for post-upload-pack hook

After upload-pack successfully finishes its operation, post-upload-pack
hook can be called for logging purposes.

The hook is passed various pieces of information, one per line, from its
standard input.  Currently the following items can be fed to the hook, but
more types of information may be added in the future:

    want SHA-1::
        40-byte hexadecimal object name the client asked to include in the
        resulting pack.  Can occur one or more times in the input.

    have SHA-1::
        40-byte hexadecimal object name the client asked to exclude from
        the resulting pack, claiming to have them already.  Can occur zero
        or more times in the input.

    time float::
        Number of seconds spent for creating the packfile.

    size decimal::
        Size of the resulting packfile in bytes.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDraft release notes to 1.6.5 before -rc0
Junio C Hamano [Sat, 29 Aug 2009 02:48:56 +0000 (19:48 -0700)]
Draft release notes to 1.6.5 before -rc0

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'mm/reset-report'
Junio C Hamano [Sat, 29 Aug 2009 02:39:26 +0000 (19:39 -0700)]
Merge branch 'mm/reset-report'

* mm/reset-report:
  reset: make the reminder output consistent with "checkout"
  Rename REFRESH_SAY_CHANGED to REFRESH_IN_PORCELAIN.

15 years agoMerge branch 'jk/maint-1.6.3-checkout-unborn'
Junio C Hamano [Sat, 29 Aug 2009 02:39:07 +0000 (19:39 -0700)]
Merge branch 'jk/maint-1.6.3-checkout-unborn'

* jk/maint-1.6.3-checkout-unborn:
  checkout: do not imply "-f" on unborn branches

15 years agoMerge branch 'np/maint-1.6.3-deepen'
Junio C Hamano [Sat, 29 Aug 2009 02:38:56 +0000 (19:38 -0700)]
Merge branch 'np/maint-1.6.3-deepen'

* np/maint-1.6.3-deepen:
  fix simple deepening of a repo

Conflicts:
t/t5500-fetch-pack.sh

15 years agoMerge branch 'jc/shortstatus'
Junio C Hamano [Sat, 29 Aug 2009 02:38:19 +0000 (19:38 -0700)]
Merge branch 'jc/shortstatus'

* jc/shortstatus:
  git commit --dry-run -v: show diff in color when asked
  Documentation/git-commit.txt: describe --dry-run
  wt-status: collect untracked files in a separate "collect" phase
  Make git_status_config() file scope static to builtin-commit.c
  wt-status: move wt_status_colors[] into wt_status structure
  wt-status: move many global settings to wt_status structure
  commit: --dry-run
  status: show worktree status of conflicted paths separately
  wt-status.c: rework the way changes to the index and work tree are summarized
  diff-index: keep the original index intact
  diff-index: report unmerged new entries

15 years agoMerge branch 'maint'
Junio C Hamano [Sat, 29 Aug 2009 02:37:57 +0000 (19:37 -0700)]
Merge branch 'maint'

* maint:
  http.c: set slot callback members to NULL when releasing object

15 years agoMerge branch 'rc/maint-http-fix' into maint
Junio C Hamano [Sat, 29 Aug 2009 02:34:16 +0000 (19:34 -0700)]
Merge branch 'rc/maint-http-fix' into maint

* rc/maint-http-fix:
  http.c: don't assume that urls don't end with slash

15 years agohttp.c: set slot callback members to NULL when releasing object
Tay Ray Chuan [Wed, 26 Aug 2009 12:20:53 +0000 (20:20 +0800)]
http.c: set slot callback members to NULL when releasing object

Set the members callback_func and callback_data of freq->slot to NULL
when releasing a http_object_request. release_active_slot() is also
invoked on the slot to remove the curl handle associated with the slot
from the multi stack (CURLM *curlm in http.c).

These prevent the callback function and data from being used in http
methods (like http.c::finish_active_slot()) after a
http_object_request has been free'd.

Noticed by Ali Polatel, who later tested this patch to verify that it
fixes the problem he saw; Dscho helped to identify the problem spot.

Signed-off-by: Tay Ray Chuan <rctay89@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agot/test-lib.sh: provide a shell implementation of the 'yes' utility
Brandon Casey [Fri, 28 Aug 2009 22:32:41 +0000 (17:32 -0500)]
t/test-lib.sh: provide a shell implementation of the 'yes' utility

Some platforms (IRIX 6.5, Solaris 7) do not provide the 'yes' utility.
Currently, some tests, including t7610 and t9001, try to call this program.
Due to the way the tests are structured, the tests still pass even though
this program is missing.  Rather than succeeding by chance, let's provide
an implementation of the simple 'yes' utility in shell for all platforms to
use.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Fri, 28 Aug 2009 05:01:01 +0000 (22:01 -0700)]
Merge branch 'maint'

* maint:
  Fix overridable written with an extra 'e'
  Documentation: git-archive: mark --format as optional in summary
  Round-down years in "years+months" relative date view

15 years agoMerge branch 'maint-1.6.3' into maint
Junio C Hamano [Fri, 28 Aug 2009 03:42:42 +0000 (20:42 -0700)]
Merge branch 'maint-1.6.3' into maint

* maint-1.6.3:
  Fix overridable written with an extra 'e'
  Documentation: git-archive: mark --format as optional in summary
  Round-down years in "years+months" relative date view

15 years agoMerge branch 'maint-1.6.2' into maint-1.6.3
Junio C Hamano [Fri, 28 Aug 2009 03:42:38 +0000 (20:42 -0700)]
Merge branch 'maint-1.6.2' into maint-1.6.3

* maint-1.6.2:
  Fix overridable written with an extra 'e'
  Documentation: git-archive: mark --format as optional in summary
  Round-down years in "years+months" relative date view

Conflicts:
Documentation/git-archive.txt

15 years agoFix overridable written with an extra 'e'
Nanako Shiraishi [Fri, 28 Aug 2009 03:18:49 +0000 (12:18 +0900)]
Fix overridable written with an extra 'e'

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.6.1' into maint-1.6.2
Junio C Hamano [Fri, 28 Aug 2009 03:41:37 +0000 (20:41 -0700)]
Merge branch 'maint-1.6.1' into maint-1.6.2

* maint-1.6.1:
  Documentation: git-archive: mark --format as optional in summary

15 years agoMerge branch 'maint-1.6.0' into maint-1.6.1
Junio C Hamano [Fri, 28 Aug 2009 03:41:31 +0000 (20:41 -0700)]
Merge branch 'maint-1.6.0' into maint-1.6.1

* maint-1.6.0:
  Documentation: git-archive: mark --format as optional in summary

15 years agoDocumentation: git-archive: mark --format as optional in summary
Wesley J. Landaker [Fri, 28 Aug 2009 02:55:43 +0000 (20:55 -0600)]
Documentation: git-archive: mark --format as optional in summary

The --format option was made optional in 8ff21b1 (git-archive: make
tar the default format, 2007-04-09), but it was not marked as optional
in the summary. This trival patch just changes the summary to match
the rest of the documentation.

Signed-off-by: Wesley J. Landaker <wjl@icecavern.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint-1.5.6' into maint-1.6.0
Junio C Hamano [Fri, 28 Aug 2009 03:03:35 +0000 (20:03 -0700)]
Merge branch 'maint-1.5.6' into maint-1.6.0

* maint-1.5.6:
  revision traversal and pack: notice and die on missing commit

15 years agoRound-down years in "years+months" relative date view
David Reiss [Thu, 27 Aug 2009 23:39:38 +0000 (16:39 -0700)]
Round-down years in "years+months" relative date view

Previously, a commit from 1 year and 7 months ago would display as
"2 years, 7 months ago".

Signed-off-by: David Reiss <dreiss@facebook.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: add t9501 tests for checking HTTP status codes
Mark Rada [Tue, 25 Aug 2009 05:03:48 +0000 (01:03 -0400)]
gitweb: add t9501 tests for checking HTTP status codes

Adds a new test file, t9501, that checks HTTP status codes and messages
from gitweb.

Currently, the only tests are for the snapshot feature.

Signed-off-by: Mark Rada <marada@uwaterloo.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogitweb: split test suite into library and tests
Mark Rada [Fri, 28 Aug 2009 02:07:07 +0000 (22:07 -0400)]
gitweb: split test suite into library and tests

To accommodate additions to the test cases for gitweb, the preamble
from t9500 is now in its own library so that new sets of tests for
gitweb can use the same setup without copying the code.

Signed-off-by: Mark Rada <marada@uwaterloo.ca>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'lt/block-sha1'
Junio C Hamano [Fri, 28 Aug 2009 00:00:35 +0000 (17:00 -0700)]
Merge branch 'lt/block-sha1'

* lt/block-sha1:
  remove ARM and Mozilla SHA1 implementations
  block-sha1: guard gcc extensions with __GNUC__
  make sure byte swapping is optimal for git
  block-sha1: make the size member first in the context struct

15 years agoMerge branch 'as/maint-graph-interesting-fix'
Junio C Hamano [Thu, 27 Aug 2009 23:59:56 +0000 (16:59 -0700)]
Merge branch 'as/maint-graph-interesting-fix'

* as/maint-graph-interesting-fix:
  Add tests for rev-list --graph with options that simplify history
  graph API: fix bug in graph_is_interesting()

15 years agoMerge branch 'jh/submodule-foreach'
Junio C Hamano [Thu, 27 Aug 2009 23:59:25 +0000 (16:59 -0700)]
Merge branch 'jh/submodule-foreach'

* jh/submodule-foreach:
  git clone: Add --recursive to automatically checkout (nested) submodules
  t7407: Use 'rev-parse --short' rather than bash's substring expansion notation
  git submodule status: Add --recursive to recurse into nested submodules
  git submodule update: Introduce --recursive to update nested submodules
  git submodule foreach: Add --recursive to recurse into nested submodules
  git submodule foreach: test access to submodule name as '$name'
  Add selftest for 'git submodule foreach'
  git submodule: Cleanup usage string and add option parsing to cmd_foreach()
  git submodule foreach: Provide access to submodule name, as '$name'

Conflicts:
Documentation/git-submodule.txt
git-submodule.sh

15 years agoMerge branch 'jc/maint-unpack-objects-strict'
Junio C Hamano [Thu, 27 Aug 2009 23:59:08 +0000 (16:59 -0700)]
Merge branch 'jc/maint-unpack-objects-strict'

* jc/maint-unpack-objects-strict:
  Fix "unpack-objects --strict"

Conflicts:
builtin-unpack-objects.c

15 years agoMerge branch 'wl/insta-mongoose'
Junio C Hamano [Thu, 27 Aug 2009 23:57:34 +0000 (16:57 -0700)]
Merge branch 'wl/insta-mongoose'

* wl/insta-mongoose:
  Add support for the Mongoose web server.

15 years agoMerge branch 'nd/sparse' (early part)
Junio C Hamano [Thu, 27 Aug 2009 23:56:33 +0000 (16:56 -0700)]
Merge branch 'nd/sparse' (early part)

* 'nd/sparse' (early part):
  Prevent diff machinery from examining assume-unchanged entries on worktree

15 years agoMake test case number unique
Johannes Sixt [Thu, 27 Aug 2009 07:35:55 +0000 (09:35 +0200)]
Make test case number unique

Signed-off-by: Johannes Sixt <j6t@kdbg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agocommit.c: rename variable named 'n' which masks previous declaration
Brandon Casey [Thu, 27 Aug 2009 16:16:34 +0000 (11:16 -0500)]
commit.c: rename variable named 'n' which masks previous declaration

The variable named 'n' was initially declared to be of type int.  The name
'n' was reused inside inner blocks as a different type.  Rename the uses
within inner blocks to avoid confusion and give them a slightly more
descriptive name.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoabspath.c: move declaration of 'len' into inner block and use appropriate type
Brandon Casey [Thu, 27 Aug 2009 16:16:33 +0000 (11:16 -0500)]
abspath.c: move declaration of 'len' into inner block and use appropriate type

The 'len' variable was declared at the beginning of the make_absolute_path
function and also in an inner 'if' block which masked the outer declaration.
It is only used in two 'if' blocks, so remove the outer declaration and
make a new declaration inside the other 'if' block that uses 'len'.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMakefile: remove pointless conditional assignment in SunOS section
Brandon Casey [Thu, 27 Aug 2009 15:35:46 +0000 (10:35 -0500)]
Makefile: remove pointless conditional assignment in SunOS section

It is true that NEEDS_RESOLV is needed on SunOS if NO_IPV6 is set since
hstrerror() resides in libresolv, but performing this test at its current
location is not very useful.  It will only have any effect if the user
modifies the make variables from the make command line, and will have no
effect if a config.mak file is used.  A better location for this
conditional would have been further down in the Makefile after the
config.mak and config.mak.autogen had been parsed.  Rather than adding
clutter to the Makefile for a conditional that will likely never be
triggered, just remove it, and any user on SunOS that manually sets NO_IPV6
can also set NEEDS_RESOLV.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agomailinfo.scissors: new configuration
Junio C Hamano [Thu, 27 Aug 2009 05:30:33 +0000 (22:30 -0700)]
mailinfo.scissors: new configuration

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoam/mailinfo: Disable scissors processing by default
Junio C Hamano [Thu, 27 Aug 2009 04:36:05 +0000 (21:36 -0700)]
am/mailinfo: Disable scissors processing by default

You can enable it by giving --scissors to "git am".

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoDocumentation: describe the scissors mark support of "git am"
Nanako Shiraishi [Tue, 25 Aug 2009 08:20:00 +0000 (17:20 +0900)]
Documentation: describe the scissors mark support of "git am"

Describe what a scissors mark looks like, and explain in what situation
it is often used.

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoTeach mailinfo to ignore everything before -- >8 -- mark
Junio C Hamano [Sun, 23 Aug 2009 08:56:19 +0000 (01:56 -0700)]
Teach mailinfo to ignore everything before -- >8 -- mark

This teaches mailinfo the scissors -- >8 -- mark; the command ignores
everything before it in the message body.

For lefties among us, we also support -- 8< -- ;-)

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agobuiltin-mailinfo.c: fix confusing internal API to mailinfo()
Junio C Hamano [Thu, 27 Aug 2009 05:17:25 +0000 (22:17 -0700)]
builtin-mailinfo.c: fix confusing internal API to mailinfo()

It fed two arguments to override the corresponding global variables,
but the caller always assigned the values to the global variables
first and then passed those global variables to this function.

Stop pretending to be a proper API to confuse people.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoclone: add --branch option to select a different HEAD
Jeff King [Wed, 26 Aug 2009 19:05:08 +0000 (15:05 -0400)]
clone: add --branch option to select a different HEAD

We currently point the HEAD of a newly cloned repo to the
same ref as the parent repo's HEAD. While a user can then
"git checkout -b foo origin/foo" whichever branch they
choose, it is more convenient and more efficient to tell
clone which branch you want in the first place.

Based on a patch by Kirill A. Korinskiy.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'maint'
Junio C Hamano [Wed, 26 Aug 2009 19:15:15 +0000 (12:15 -0700)]
Merge branch 'maint'

* maint:
  git-log: allow --decorate[=short|full]
  Minor improvement to the write-tree documentation
  git-bisect: call the found commit "*the* first bad commit"

15 years agogit-log: allow --decorate[=short|full]
Lars Hjemli [Sat, 15 Aug 2009 14:23:12 +0000 (16:23 +0200)]
git-log: allow --decorate[=short|full]

Commit de435ac0 changed the behavior of --decorate from printing the
full ref (e.g., "refs/heads/master") to a shorter, more human-readable
version (e.g., just "master"). While this is nice for human readers,
external tools using the output from "git log" may prefer the full
version.

This patch introduces an extension to --decorate to allow the caller to
specify either the short or the full versions.

Signed-off-by: Lars Hjemli <hjemli@gmail.com>
Acked-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMinor improvement to the write-tree documentation
David Kågedal [Wed, 26 Aug 2009 14:04:54 +0000 (16:04 +0200)]
Minor improvement to the write-tree documentation

Signed-off-by: David Kågedal <davidk@lysator.liu.se>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agogit-bisect: call the found commit "*the* first bad commit"
Nanako Shiraishi [Wed, 26 Aug 2009 08:38:50 +0000 (17:38 +0900)]
git-bisect: call the found commit "*the* first bad commit"

Signed-off-by: Nanako Shiraishi <nanako3@lavabit.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
15 years agoMerge branch 'js/maint-cover-letter-non-ascii' into maint
Junio C Hamano [Wed, 26 Aug 2009 19:05:57 +0000 (12:05 -0700)]
Merge branch 'js/maint-cover-letter-non-ascii' into maint

* js/maint-cover-letter-non-ascii:
  Correctly mark cover letters' encodings if they are not pure ASCII
  Expose the has_non_ascii() function

15 years agoMerge branch 'jc/maint-clean-nested-dir-safety' into maint
Junio C Hamano [Wed, 26 Aug 2009 19:05:57 +0000 (12:05 -0700)]
Merge branch 'jc/maint-clean-nested-dir-safety' into maint

* jc/maint-clean-nested-dir-safety:
  clean: require double -f options to nuke nested git repository and work tree

15 years agoMerge branch 'jk/maint-merge-msg-fix' into maint
Junio C Hamano [Wed, 26 Aug 2009 19:05:57 +0000 (12:05 -0700)]
Merge branch 'jk/maint-merge-msg-fix' into maint

* jk/maint-merge-msg-fix:
  merge: indicate remote tracking branches in merge message
  merge: fix incorrect merge message for ambiguous tag/branch
  add tests for merge message headings

15 years agoMerge branch 'jc/apply-epoch-patch' into maint
Junio C Hamano [Wed, 26 Aug 2009 19:05:57 +0000 (12:05 -0700)]
Merge branch 'jc/apply-epoch-patch' into maint

* jc/apply-epoch-patch:
  apply: notice creation/removal patches produced by GNU diff

15 years agoMerge branch 'jp/symlink-dirs' into maint
Junio C Hamano [Wed, 26 Aug 2009 19:05:57 +0000 (12:05 -0700)]
Merge branch 'jp/symlink-dirs' into maint

* jp/symlink-dirs:
  t6035-merge-dir-to-symlink depends on SYMLINKS prerequisite
  git-checkout: be careful about untracked symlinks
  lstat_cache: guard against full match of length of 'name' parameter
  Demonstrate bugs when a directory is replaced with a symlink