Code

git.git
16 years agoFix 'git show' on signed tag of signed tag of commit
Thomas Rast [Tue, 1 Jul 2008 09:47:04 +0000 (11:47 +0200)]
Fix 'git show' on signed tag of signed tag of commit

The cmd_show loop resolves tags by showing them, then pointing the
object to the 'tagged' member.  However, this object is not fully
initialized; it only contains the SHA1.  (This resulted in a segfault
if there were two levels of tags.)  We apply parse_object to get a
full object.

Noticed by Kalle Olavi Niemitalo on IRC.

Signed-off-by: Thomas Rast <trast@student.ethz.ch>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodoc/rev-parse: clarify reflog vs --until for specifying revisions
Jeff King [Mon, 30 Jun 2008 03:27:45 +0000 (23:27 -0400)]
doc/rev-parse: clarify reflog vs --until for specifying revisions

The rev-parse manpage introduces the branch@{date} syntax,
and mentions the reflog specifically. However, new users may
not be familiar with the distinction between the reflog and
the commit date, so let's help them out with a "you may be
interested in --until" pointer.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: don't sanitize remote names in config
Eric Wong [Sun, 29 Jun 2008 03:40:32 +0000 (20:40 -0700)]
git-svn: don't sanitize remote names in config

The original sanitization code was just taken from the
remotes2config.sh shell script in contrib.

Credit to Avery Pennarun for noticing this mistake, and Junio
for clarifying the rules for config section names:

Junio C Hamano wrote in <7vfxr23s6m.fsf@gitster.siamese.dyndns.org>:

> In
>
>  [foo "bar"] baz = value
>
> foo and baz must be config.c::iskeychar() (and baz must be isalpha()), but
> "bar" can be almost anything.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: avoid filling up the disk with temp files.
Avery Pennarun [Sat, 28 Jun 2008 23:33:56 +0000 (19:33 -0400)]
git-svn: avoid filling up the disk with temp files.

Commit ffe256f9bac8a40ff751a9341a5869d98f72c285 ("git-svn: Speed up fetch")
introduced changes that create a temporary file for each object fetched by
svn.  These files should be deleted automatically, but perl apparently
doesn't do this until the process exits (or perhaps when its garbage
collector runs).

This means that on a large fetch, especially with lots of branches, we
sometimes fill up /tmp completely, which prevents the next temp file from
being written completely.  This is aggravated by the fact that a new temp
file is created for each updated file, even if that update produces a file
identical to one already in git.  Thus, it can happen even if there's lots
of disk space to store the finished repository.

We weren't adequately checking for write errors, so this would result in an
invalid file getting committed, which caused git-svn to fail later with an
invalid checksum.

This patch adds a check to syswrite() so similar problems don't lead to
corruption in the future.  It also unlink()'s each temp file explicitly
when we're done with it, so the disk doesn't need to fill up.

Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
Tested-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit cat-file: Fix memory leak in batch mode
Björn Steinbrink [Sun, 29 Jun 2008 01:21:25 +0000 (03:21 +0200)]
git cat-file: Fix memory leak in batch mode

When run in batch mode, git cat-file never frees the memory for the blob
contents it is printing. This quickly adds up and causes git-svn to be
hardly usable for imports of large svn repos, because it uses cat-file in
batch mode and cat-file's memory usage easily reaches several hundred MB
without any good reason.

Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agofix git config example syntax
Joey Hess [Sat, 28 Jun 2008 20:02:47 +0000 (16:02 -0400)]
fix git config example syntax

git-config expects a space, not '=' between option and value.

Also, quote the value since it contains globs, which some shells will not
pass through unchanged, or will abort if the glob doesn't expand.

Signed-off-by: Joey Hess <joey@kitenet.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoavoid off-by-one error in run_upload_archive
Jochen Voss [Sat, 28 Jun 2008 16:04:24 +0000 (17:04 +0100)]
avoid off-by-one error in run_upload_archive

Make sure that buf has enough space to store the trailing \0 of
the command line argument, too.

Signed-off-by: Jochen Voss <voss@seehuhn.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint-1.5.5' into maint
Junio C Hamano [Fri, 27 Jun 2008 01:08:51 +0000 (18:08 -0700)]
Merge branch 'maint-1.5.5' into maint

* maint-1.5.5:
  GIT 1.5.5.5
  GIT 1.5.4.6
  git-shell: accept "git foo" form

Conflicts:

GIT-VERSION-GEN
RelNotes

16 years agoGIT 1.5.5.5 v1.5.5.5
Junio C Hamano [Fri, 27 Jun 2008 00:16:50 +0000 (17:16 -0700)]
GIT 1.5.5.5

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint-1.5.4' into maint-1.5.5
Junio C Hamano [Fri, 27 Jun 2008 00:14:03 +0000 (17:14 -0700)]
Merge branch 'maint-1.5.4' into maint-1.5.5

* maint-1.5.4:
  GIT 1.5.4.6
  git-shell: accept "git foo" form

Conflicts:

GIT-VERSION-GEN
RelNotes

16 years agoGIT 1.5.4.6 v1.5.4.6
Junio C Hamano [Fri, 27 Jun 2008 00:11:21 +0000 (17:11 -0700)]
GIT 1.5.4.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-shell: accept "git foo" form
Junio C Hamano [Sun, 2 Dec 2007 06:16:19 +0000 (22:16 -0800)]
git-shell: accept "git foo" form

This is a backport of 0a47dc110e042b5bcc63dc94c8d517e67efe9306
to 'maint' to be included in 1.5.6.2 so that older server side
can accept dashless form of request when clients are updated.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodiff --check: do not discard error status upon seeing a good line
Junio C Hamano [Thu, 26 Jun 2008 20:16:33 +0000 (13:16 -0700)]
diff --check: do not discard error status upon seeing a good line

"git diff --check" should return non-zero when there was any whitespace
error but the code only paid attention to the error status of the last
new line in the patch.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT 1.5.6.1 v1.5.6.1
Junio C Hamano [Thu, 26 Jun 2008 00:09:40 +0000 (17:09 -0700)]
GIT 1.5.6.1

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agofix update-hook-example to work with packed tag references
Dmitry Potapov [Wed, 25 Jun 2008 08:26:55 +0000 (12:26 +0400)]
fix update-hook-example to work with packed tag references

The update-hook-example used 'test -f' to check the tag present, which
does not work if the checked reference is packed. This check has been
changed to use 'git rev-parse $tag' instead.

Signed-off-by: Dmitry Potapov <dpotapov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoclone: create intermediate directories of destination repo
Jeff King [Wed, 25 Jun 2008 05:41:34 +0000 (01:41 -0400)]
clone: create intermediate directories of destination repo

The shell version used to use "mkdir -p" to create the repo
path, but the C version just calls "mkdir". Let's replicate
the old behavior. We have to create the git and worktree
leading dirs separately; while most of the time, the
worktree dir contains the git dir (as .git), the user can
override this using GIT_WORK_TREE.

We can reuse safe_create_leading_directories, but we need to
make a copy of our const buffer to do so. Since
merge-recursive uses the same pattern, we can factor this
out into a global function. This has two other cleanup
advantages for merge-recursive:

  1. mkdir_p wasn't a very good name. "mkdir -p foo/bar" actually
     creates bar, but this function just creates the leading
     directories.

  2. mkdir_p took a mode argument, but it was completely
     ignored.

Acked-by: Daniel Barkalow <barkalow@iabervon.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'jc/maint-combine-diff-pre-context' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:20:01 +0000 (11:20 -0700)]
Merge branch 'jc/maint-combine-diff-pre-context' into maint

* jc/maint-combine-diff-pre-context:
  diff -c/--cc: do not include uninteresting deletion before leading context

16 years agoMerge branch 'lt/maint-gitdir-relative' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:19:33 +0000 (11:19 -0700)]
Merge branch 'lt/maint-gitdir-relative' into maint

* lt/maint-gitdir-relative:
  Make git_dir a path relative to work_tree in setup_work_tree()

16 years agoMerge branch 'sb/maint-rebase' into maint
Junio C Hamano [Wed, 25 Jun 2008 18:18:39 +0000 (11:18 -0700)]
Merge branch 'sb/maint-rebase' into maint

* sb/maint-rebase:
  git-rebase.sh: Add check if rebase is in progress

16 years agofor-each-ref: implement missing tag values
Jeff King [Wed, 25 Jun 2008 16:08:15 +0000 (12:08 -0400)]
for-each-ref: implement missing tag values

The "type" and "object" fields for tags were accepted as
valid atoms, but never implemented. Consequently, they
simply returned the empty string, even for valid tags.

Noticed by Lea Wiemann.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: make rebuild respect rewriteRoot option
Jan Krüger [Tue, 24 Jun 2008 00:17:36 +0000 (02:17 +0200)]
git-svn: make rebuild respect rewriteRoot option

Suppose someone fetches git-svn-ified commits from another repo and then
attempts to use 'git-svn init --rewrite-root=foo bar'. Using git svn rebase
after that will fail badly:

 * For each commit tried by working_head_info, rebuild is called indirectly.
 * rebuild will iterate over all commits and skip all of them because the
   URL does not match. Because of that no rev_map file is generated at all.
 * Thus, rebuild will run once for every commit. This takes ages.
 * In the end there still isn't any rev_map file and thus working_head_info
   fails.

Addressing this behaviour fixes an apparently not too uncommon problem with
providing git-svn mirrors of Subversion repositories. Some repositories are
accessed using different URLs depending on whether the user has push
privileges or not. In the latter case, an anonymous URL is often used that
differs from the push URL. Providing a mirror that is usable in both cases
becomes a lot more possible with this change.

Signed-off-by: Jan Krüger <jk@jk.gs>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoWorkaround for AIX mkstemp()
Patrick Higgins [Mon, 23 Jun 2008 21:33:41 +0000 (15:33 -0600)]
Workaround for AIX mkstemp()

The AIX mkstemp will modify it's template parameter to an empty string if
the call fails. This caused a subsequent mkdir to fail.

Signed-off-by: Patrick Higgins <patrick.higgins@cexp.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoExtend parse-options test suite
Stephan Beyer [Sun, 22 Jun 2008 15:04:26 +0000 (17:04 +0200)]
Extend parse-options test suite

This patch serves two purposes:
 1. test-parse-option.c should be a more complete
    example for the parse-options API, and
 2. there have been no tests for OPT_CALLBACK,
    OPT_DATE, OPT_BIT, OPT_SET_INT and OPT_SET_PTR
    before.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoapi-parse-options.txt: Introduce documentation for parse options API
Stephan Beyer [Sun, 22 Jun 2008 15:04:25 +0000 (17:04 +0200)]
api-parse-options.txt: Introduce documentation for parse options API

Add some documentation of basics, macros and callback
implementation of the parse-options API.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoparse-options.c: fix documentation syntax of optional arguments
Michele Ballabio [Sun, 22 Jun 2008 14:39:04 +0000 (16:39 +0200)]
parse-options.c: fix documentation syntax of optional arguments

When an argument for an option is optional, short options don't need a
space between the option and the argument, and long options need a "=".
Otherwise, arguments are misinterpreted.

Signed-off-by: Michele Ballabio <barra_cuda@katamail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoapi-builtin.txt: update and fix typo
Stephan Beyer [Sat, 21 Jun 2008 23:54:36 +0000 (01:54 +0200)]
api-builtin.txt: update and fix typo

Mention NEED_WORK_TREE flag and command-list.txt.
Fix "bulit-in" typo and AsciiDoc-formatting of a paragraph.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-rebase.sh: Add check if rebase is in progress
Stephan Beyer [Sun, 22 Jun 2008 14:07:02 +0000 (16:07 +0200)]
git-rebase.sh: Add check if rebase is in progress

"git rebase --continue" and friends gave nonsense errors when there is no
rebase in progress.

Signed-off-by: Stephan Beyer <s-beyer@gmx.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake git_dir a path relative to work_tree in setup_work_tree()
Linus Torvalds [Thu, 19 Jun 2008 19:34:06 +0000 (12:34 -0700)]
Make git_dir a path relative to work_tree in setup_work_tree()

Once we find the absolute paths for git_dir and work_tree, we can make
git_dir a relative path since we know pwd will be work_tree. This should
save the kernel some time traversing the path to work_tree all the time
if git_dir is inside work_tree.

Daniel's patch didn't apply for me as-is, so I recreated it with some
differences, and here are the numbers from ten runs each.

There is some IO for me - probably due to more-or-less random flushing of
the journal - so the variation is bigger than I'd like, but whatever:

Before:
real    0m8.135s
real    0m7.933s
real    0m8.080s
real    0m7.954s
real    0m7.949s
real    0m8.112s
real    0m7.934s
real    0m8.059s
real    0m7.979s
real    0m8.038s

After:
real    0m7.685s
real    0m7.968s
real    0m7.703s
real    0m7.850s
real    0m7.995s
real    0m7.817s
real    0m7.963s
real    0m7.955s
real    0m7.848s
real    0m7.969s

Now, going by "best of ten" (on the assumption that the longer numbers
are all due to IO), I'm saying a 7.933s -> 7.685s reduction, and it does
seem to be outside of the noise (ie the "after" case never broke 8s, while
the "before" case did so half the time).

So looks like about 3% to me.

Doing it for a slightly smaller test-case (just the "arch" subdirectory)
gets more stable numbers probably due to not filling the journal with
metadata updates, so we have:

Before:
real    0m1.633s
real    0m1.633s
real    0m1.633s
real    0m1.632s
real    0m1.632s
real    0m1.630s
real    0m1.634s
real    0m1.631s
real    0m1.632s
real    0m1.632s

After:
real    0m1.610s
real    0m1.609s
real    0m1.610s
real    0m1.608s
real    0m1.607s
real    0m1.610s
real    0m1.609s
real    0m1.611s
real    0m1.608s
real    0m1.611s

where I'ld just take the averages and say 1.632 vs 1.610, which is just
over 1% peformance improvement.

So it's not in the noise, but it's not as big as I initially thought and
measured.

(That said, it obviously depends on how deep the working directory path is
too, and whether it is behind NFS or something else that might need to
cause more work to look up).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: fix formatting in git-svn
Jan Krüger [Thu, 19 Jun 2008 22:41:42 +0000 (00:41 +0200)]
Documentation: fix formatting in git-svn

Due to a misplaced list block separator, general hints about the config
file options got indented at the same level as the description of the last
option, making it easy to miss them.

Signed-off-by: Jan Krüger <jk@jk.gs>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot7502-commit.sh: test_must_fail doesn't work with inline environment variables
Brandon Casey [Thu, 19 Jun 2008 17:32:02 +0000 (12:32 -0500)]
t7502-commit.sh: test_must_fail doesn't work with inline environment variables

When the arguments to test_must_fail() begin with a variable assignment,
test_must_fail() attempts to execute the variable assignment as a command.
This fails, and so test_must_fail returns with a successful status value
without running the command it was intended to test.

For example, the following script:

#!/bin/sh
test_must_fail () {
"$@"
test $? -gt 0 -a $? -le 129
}
foo='wo adrian'
test_must_fail foo='yo adrian' sh -c 'echo foo: $foo'

always exits zero and prints the message:

test.sh: line 3: foo=yo adrian: command not found

Test 16 calls test_must_fail in such a way and therefore has not been
testing whether git 'do[es] not fire editor in the presence of conflicts'.

A workaround is to set and export the variable in a normal way, not
using one-shot notation.  Because this would affect the remainder of
the process, the test is done inside a subshell.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocompletion: add --graph to log command completion
Dan McGee [Thu, 19 Jun 2008 21:15:53 +0000 (16:15 -0500)]
completion: add --graph to log command completion

Signed-off-by: Dan McGee <dpmcgee@gmail.com>
Acked-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-merge.sh: fix typo in usage message: sucesses --> succeeds
Brandon Casey [Wed, 18 Jun 2008 20:16:08 +0000 (15:16 -0500)]
git-merge.sh: fix typo in usage message: sucesses --> succeeds

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodiff -c/--cc: do not include uninteresting deletion before leading context
Junio C Hamano [Thu, 19 Jun 2008 06:59:41 +0000 (23:59 -0700)]
diff -c/--cc: do not include uninteresting deletion before leading context

When we include a few uninteresting lines before the interesting ones as
context, we are only interested in seeing the surviving lines themselves
and not the deleted lines that are before them.  Mark the added leading
context lines in give_context() and not show deleted lines form them.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT 1.5.6 v1.5.6
Junio C Hamano [Wed, 18 Jun 2008 20:09:43 +0000 (13:09 -0700)]
GIT 1.5.6

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoclean up error conventions of remote.c:match_explicit
Jeff King [Mon, 16 Jun 2008 16:15:02 +0000 (12:15 -0400)]
clean up error conventions of remote.c:match_explicit

match_explicit is called for each push refspec to try to
fully resolve the source and destination sides of the
refspec.  Currently, we look at each refspec and report
errors on both the source and the dest side before aborting.

It makes sense to report errors for each refspec, since an
error in one is independent of an error in the other.
However, reporting errors on the 'dst' side of a refspec if
there has been an error on the 'src' side does not
necessarily make sense, since the interpretation of the
'dst' side depends on the 'src' side (for example, when
creating a new unqualified remote ref, we use the same type
as the src ref).

This patch lets match_explicit return early when the src
side of the refspec is bogus. We still look at all of the
refspecs before aborting the push, though.

At the same time, we clean up the call signature, which
previously took an extra "errs" flag. This was pointless, as
we didn't act on that flag, but rather just passed it back
to the caller. Instead, we now use the more traditional
"return -1" to signal an error, and the caller aggregates
the error count.

This change fixes two bugs, as well:

  - the early return avoids a segfault when passing a NULL
    matched_src to guess_ref()

  - the check for multiple sources pointing to a single dest
    aborted if the "err" flag was set. Presumably the intent
    was not to bother with the check if we had no
    matched_src. However, since the err flag was passed in
    from the caller, we might abort the check just because a
    previous refspec had a problem, which doesn't make
    sense.

    In practice, this didn't matter, since due to the error
    flag we end up aborting the push anyway.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoFix approxidate("never") to always return 0
Olivier Marin [Tue, 17 Jun 2008 16:34:57 +0000 (18:34 +0200)]
Fix approxidate("never") to always return 0

Commit af66366a9feb0194ed04b1f538998021ece268a8 introduced the keyword
"never" to be used with approxidate() but defined it with a fixed date
without taking care of timezone. As a result approxidate() will return
a timestamp in the future with a negative timezone.

With this patch, approxidate("never") always return 0 whatever your
timezone is.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-am: head -1 is obsolete and doesn't work on some new systems
Alejandro Mery [Tue, 17 Jun 2008 11:43:57 +0000 (13:43 +0200)]
git-am: head -1 is obsolete and doesn't work on some new systems

head -<n> was deprecated by POSIX, and as modern versions of coreutils
package don't support it at least one exports _POSIX2_VERSION=199209
it's fails on some systems.

head -n<n> is portable, but sed <n>q is even more.

Signed-off-by: Alejandro Mery <amery@geeks.cl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobuiltin-rerere: fix a small leak
Junio C Hamano [Tue, 17 Jun 2008 07:23:31 +0000 (00:23 -0700)]
builtin-rerere: fix a small leak

The data read from MERGE_RR file is kept in path-list by hanging textual
40-byte conflict signature to path of the blob that contains the
conflict.  The signature is strdup'ed twice, and the second copy is given
to the path-list, leaking the first copy.

Signed-off-by: Junio C Hamano <junio@pobox.com>
Acked-by: Johannes Schindelin <Johannes.Schindelin@gmx.de>
16 years agogitweb: remove unused parse_ref method
Lea Wiemann [Tue, 17 Jun 2008 06:25:28 +0000 (08:25 +0200)]
gitweb: remove unused parse_ref method

The parse_ref method became unused in cd1464083c, but the author
decided to leave it in.  Now it gets in the way of refactoring, so
let's remove it.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitweb: quote commands properly when calling the shell
Lea Wiemann [Tue, 17 Jun 2008 21:46:35 +0000 (23:46 +0200)]
gitweb: quote commands properly when calling the shell

This eliminates the function git_cmd_str, which was used for composing
command lines, and adds a quote_command function, which quotes all of
its arguments (as in quote.c).

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agosha1_file.c: simplify parse_pack_index()
Junio C Hamano [Tue, 17 Jun 2008 05:19:00 +0000 (22:19 -0700)]
sha1_file.c: simplify parse_pack_index()

It was implemented as a thin wrapper around an otherwise unused
helper function parse_pack_index_file().  The code becomes simpler
and easier to read by consolidating the two.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocreate_tempfile: make sure that leading directories can be accessible by peers
Junio C Hamano [Tue, 17 Jun 2008 05:02:12 +0000 (22:02 -0700)]
create_tempfile: make sure that leading directories can be accessible by peers

In a shared repository, we should make sure adjust_shared_perm() is called
after creating the initial fan-out directories under objects/ directory.

Earlier an logico called the function only when mkdir() failed; we should
do so when mkdir() succeeded.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agowrite_loose_object: don't bother trying to read an old object
Linus Torvalds [Tue, 17 Jun 2008 00:17:10 +0000 (17:17 -0700)]
write_loose_object: don't bother trying to read an old object

Before even calling this, all callers have done a "has_sha1_file(sha1)"
or "has_loose_object(sha1)" check, so there is no point in doing a
second check.

If something races with us on object creation, we handle that in the
final link() that moves it to the right place.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agopath-list documentation: document all functions and data structures
Miklos Vajna [Sun, 15 Jun 2008 12:06:43 +0000 (14:06 +0200)]
path-list documentation: document all functions and data structures

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agorun-command documentation: fix "memset()" parameter
Miklos Vajna [Sat, 14 Jun 2008 01:01:59 +0000 (03:01 +0200)]
run-command documentation: fix "memset()" parameter

When initializing the struct async and struct child_process structures,
the documentation suggested "clearing" the structure with '0' instead of
'\0'.  It is enough to use integer zero here.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Tue, 17 Jun 2008 00:39:50 +0000 (17:39 -0700)]
Merge branch 'maint'

* maint:
  diff.c: fix emit_line() again not to add extra line

16 years agodiff.c: fix emit_line() again not to add extra line
Junio C Hamano [Tue, 17 Jun 2008 00:37:21 +0000 (17:37 -0700)]
diff.c: fix emit_line() again not to add extra line

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'maint'
Junio C Hamano [Mon, 16 Jun 2008 23:14:22 +0000 (16:14 -0700)]
Merge branch 'maint'

* maint:
  diff: reset color before printing newline

16 years agodiff: reset color before printing newline
SZEDER Gábor [Mon, 16 Jun 2008 22:00:02 +0000 (00:00 +0200)]
diff: reset color before printing newline

It worked that way since commit 50f575fc (Tweak diff colors,
2006-06-22), but commit c1795bb0 (Unify whitespace checking, 2007-12-13)
changed it.  This patch restores the old behaviour.

Besides Linus' arguments in the log message of 50f575fc, resetting color
before printing newline is also important to keep 'git add --patch'
happy.  If the last line(s) of a file are removed, then that hunk will
end with a colored line.  However, if the newline comes before the color
reset, then the diff output will have an additional line at the end
containing only the reset sequence.  This causes trouble in
git-add--interactive.perl's parse_diff function, because @colored will
have one more element than @diff, and that last element will contain the
color reset.  The elements of these arrays will then be copied to @hunk,
but only as many as the number of elements in @diff.  As a result the
last color reset is lost and all subsequent terminal output will be
printed in color.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake git reflog expire honour core.sharedRepository.
Pierre Habouzit [Sun, 15 Jun 2008 21:37:42 +0000 (23:37 +0200)]
Make git reflog expire honour core.sharedRepository.

Signed-off-by: Pierre Habouzit <madcoder@debian.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUpdate RPM spec to drop curl executable requirement
Junio C Hamano [Sun, 15 Jun 2008 20:47:14 +0000 (13:47 -0700)]
Update RPM spec to drop curl executable requirement

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoThe "curl" executable is no longer required
Johan Herland [Sun, 15 Jun 2008 10:16:01 +0000 (12:16 +0200)]
The "curl" executable is no longer required

git-clone.sh was the last user of the "curl" executable. Relevant git
commands now use libcurl instead. This should be reflected in the
install requirements.

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMakefile: update check-docs target
Junio C Hamano [Sun, 15 Jun 2008 20:43:32 +0000 (13:43 -0700)]
Makefile: update check-docs target

Earlier series to rename documentation pages around did not update this
target and left check-docs broken.  This should fix it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoConsistency: Use "libcurl" instead of "cURL library" and "curl"
Johan Herland [Sun, 15 Jun 2008 10:14:12 +0000 (12:14 +0200)]
Consistency: Use "libcurl" instead of "cURL library" and "curl"

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocpio is no longer used by git-clone
Johan Herland [Sun, 15 Jun 2008 10:13:22 +0000 (12:13 +0200)]
cpio is no longer used by git-clone

Signed-off-by: Johan Herland <johan@herland.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: RelNotes-1.5.6: talk about renamed HTML files
Christian Couder [Sun, 15 Jun 2008 13:39:20 +0000 (15:39 +0200)]
Documentation: RelNotes-1.5.6: talk about renamed HTML files

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoGIT 1.5.6-rc3 v1.5.6-rc3
Junio C Hamano [Sat, 14 Jun 2008 19:57:18 +0000 (12:57 -0700)]
GIT 1.5.6-rc3

Just a lot of small fixes, mostly documentation.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoSimplify and rename find_sha1_file()
Linus Torvalds [Sat, 14 Jun 2008 18:43:01 +0000 (11:43 -0700)]
Simplify and rename find_sha1_file()

Now that we've made the loose SHA1 file reading more careful and
streamlined, we only use the old find_sha1_file() function for checking
whether a loose object file exists at all.

As such, the whole 'return stat information' part of it was just
pointless (nobody cares any more), and the naming of the function is not
really all that relevant either.

So simplify it to not do a 'stat()', but just an existence check (which
is what the callers want), and rename it to 'has_loose_object()' which
matches the use.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMake loose object file reading more careful
Linus Torvalds [Sat, 14 Jun 2008 18:32:37 +0000 (11:32 -0700)]
Make loose object file reading more careful

We used to do 'stat()+open()+mmap()+close()' to read the loose object
file data, which does work fine, but has a couple of problems:

 - it unnecessarily walks the filename twice (at 'stat()' time and then
   again to open it)

 - NFS generally has open-close consistency guarantees, which means that
   the initial 'stat()' was technically done outside of the normal
   consistency rules.

So change it to do 'open()+fstat()+mmap()+close()' instead, which avoids
both these issues.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAvoid cross-directory renames and linking on object creation
Linus Torvalds [Sat, 14 Jun 2008 17:50:12 +0000 (10:50 -0700)]
Avoid cross-directory renames and linking on object creation

Instead of creating new temporary objects in the top-level git object
directory, create them in the same directory they will finally end up in
anyway.  This avoids making the final atomic "rename to stable name"
operation be a cross-directory event, which makes it a lot easier for
various filesystems.

Several filesystems do things like change the inode number when moving
files across directories (or refuse to do it entirely).

In particular, it can also cause problems for NFS implementations that
change the filehandle of a file when it moves to a different directory,
like the old user-space NFS server did, and like the Linux knfsd still
does if you don't export your filesystems with 'no_subtree_check' or if
you export a filesystem that doesn't have stable inode numbers across
renames).

This change also obviously implies creating the object fan-out
subdirectory at tempfile creation time, rather than at the final
move_temp_to_file() time.  Which actually accounts for most of the size
of the patch.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoUse 'trash directory' thoroughly in t/test-lib.sh
Jakub Narebski [Sat, 14 Jun 2008 18:14:12 +0000 (20:14 +0200)]
Use 'trash directory' thoroughly in t/test-lib.sh

...also in comments.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDon't allocate too much memory in quote_ref_url
Mike Hommey [Sat, 14 Jun 2008 10:02:22 +0000 (12:02 +0200)]
Don't allocate too much memory in quote_ref_url

In c13b263, http_fetch_ref got "refs/" included in the ref passed to it,
which, incidentally, makes the allocation in quote_ref_url too big, now.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogitweb: Make it work with $GIT containing spaces
Jakub Narebski [Sat, 14 Jun 2008 18:37:59 +0000 (20:37 +0200)]
gitweb: Make it work with $GIT containing spaces

This fixes single point where $GIT (which can contain full path
to git binary) with embedded spaces gave errors.

Signed-off-by: Jakub Narebski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agocompletion: add more 'git add' options
SZEDER Gábor [Sat, 14 Jun 2008 09:48:01 +0000 (11:48 +0200)]
completion: add more 'git add' options

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit add: add long equivalents of '-u' and '-f' options
SZEDER Gábor [Sat, 14 Jun 2008 09:48:00 +0000 (11:48 +0200)]
git add: add long equivalents of '-u' and '-f' options

The option -u stands for --update and it is a good idea to make it clear
especially because this is the only mode of operation of "git add" that
does something different from "adding".  Give longer --force synonym to -f
while we are at it as well.

Signed-off-by: SZEDER Gábor <szeder@ira.uka.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'rs/attr'
Junio C Hamano [Sat, 14 Jun 2008 18:48:59 +0000 (11:48 -0700)]
Merge branch 'rs/attr'

* rs/attr:
  Ignore .gitattributes in bare repositories

16 years agogit-svn: test that extra blank lines aren't inserted in commit messages.
Avery Pennarun [Thu, 12 Jun 2008 23:10:51 +0000 (19:10 -0400)]
git-svn: test that extra blank lines aren't inserted in commit messages.

Improve the git-svn-author test to check that extra newlines aren't inserted
into commit messages as they take a round trip from git to svn and back.

We test both with and without the --add-author-from option to git-svn.

git-svn: test that svn repo doesn't have extra newlines.

Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-svn: don't append extra newlines at the end of commit messages.
Avery Pennarun [Thu, 12 Jun 2008 23:10:50 +0000 (19:10 -0400)]
git-svn: don't append extra newlines at the end of commit messages.

In git, all commits end in exactly one newline character.  In svn, commits
end in zero or more newlines.  Thus, when importing commits from svn into
git, git-svn always appends two extra newlines to ensure that the
git-svn-id: line is separated from the main commit message by at least one
blank line.

Combined with the terminating newline that's always present in svn commits
produced by git, you usually end up with two blank lines instead of one
between the commit message and git-svn-id: line, which is undesirable.

Instead, let's remove all trailing whitespace from the git commit on the way
through to svn.

Signed-off-by: Avery Pennarun <apenwarr@gmail.com>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-submodule - Fix errors regarding resolve_relative_url
Mark Levedahl [Sat, 14 Jun 2008 17:09:41 +0000 (13:09 -0400)]
git-submodule - Fix errors regarding resolve_relative_url

git-submodule was invoking "die" from within resolve-relative-url, but
this does not actually cause the script to exit. Fix this by returning
the error to the caller and have the caller exit.

While we're at it, clean up the quoting on invocation of
resolve_relative_url as it was wrong.

Signed-off-by: Mark Levedahl <mlevedahl@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodocumentation: bisect: remove bits talking about a bisection branch
Christian Couder [Sat, 14 Jun 2008 07:21:36 +0000 (09:21 +0200)]
documentation: bisect: remove bits talking about a bisection branch

... because we are now bisecting using a detached HEAD.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agosha1_file.c: dead code removal
Junio C Hamano [Sat, 14 Jun 2008 06:00:51 +0000 (23:00 -0700)]
sha1_file.c: dead code removal

write_sha1_from_fd() and write_sha1_to_fd() were dead code nobody called,
neither the latter's helper repack_object() was.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-instaweb: improve auto-discovery of httpd and call conventions.
Flavio Poletti [Thu, 12 Jun 2008 21:54:55 +0000 (23:54 +0200)]
git-instaweb: improve auto-discovery of httpd and call conventions.

This patch allows calling:

   git-instaweb -d apache2

and have the script Do The Right Thing. In particular, the auto-discovery
mechanism has been extended in order to be used for module listing as
well, and the call convention is that if the daemon is apache2/lighttpd
and the parameter to the "-d" option does not end by "-f", the "-f" is
added to the end of the option itself.

Change all backticks to $( ... ) as per Documentation/CodingGuidelines.

Signed-off-by: Flavio Poletti <flavio@polettix.it>
Acked-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot4126: fix test that happened to work due to timing
Junio C Hamano [Sat, 14 Jun 2008 00:16:02 +0000 (17:16 -0700)]
t4126: fix test that happened to work due to timing

The test did "reset --hard" (where the HEAD commit has an empty
blob at path "empty") followed by "> empty", expecting that
the index does not notice the file _changed_ since git wrote
it out upon "reset" if the redirection is done quickly enough.

There was no need to do the emptying, and it gave a wrong result
if "reset --hard" happened on time T and then ">empty" happened on
the next second T+1.  This fixes it.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'om/remote-fix'
Junio C Hamano [Fri, 13 Jun 2008 05:55:44 +0000 (22:55 -0700)]
Merge branch 'om/remote-fix'

* om/remote-fix:
  "remote prune": be quiet when there is nothing to prune
  remote show: list tracked remote branches with -n
  remote prune: print the list of pruned branches
  builtin-remote: split show_or_prune() in two separate functions
  remote show: fix the -n option

16 years agofast-export: Correctly generate initial commits with no parents
Shawn O. Pearce [Fri, 13 Jun 2008 04:38:55 +0000 (00:38 -0400)]
fast-export: Correctly generate initial commits with no parents

If we are exporting a commit which has no parents we may be doing
it to a branch that already exists, causing fast-import to assume
the branch's current revision should be the sole parent of the
new commit.  This can cause `git fast-export | git fast-import`
to produce an incorrect graph for:

   A-------M----o------o  refs/heads/master
          /
       B-+

In this graph A and B are initial commits (no parents) but if A was
output first to refs/heads/master and then B is output fast-import
would assume the graph was this instead:

   A-------M----o------o  refs/heads/master
    \     /
     +-B-+

Which would cause B, M, and all later commits to have a different
SHA-1, and obviously be quite a different graph.

Sending a reset command prior to B informs fast-import to clear
the implied parent of A, allowing B to remain an initial commit.

Reported-by: Ben Lynn <benlynn@gmail.com>
Deemed-obviously-correct-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agot/.gitattributes: only ignore whitespace errors in test files
Lea Wiemann [Thu, 12 Jun 2008 22:35:59 +0000 (00:35 +0200)]
t/.gitattributes: only ignore whitespace errors in test files

Only ignore whitespace errors in t/tNNNN-*.sh and the t/tNNNN
subdirectories.  Other files (like test libraries) should still be
checked.

Also fix a whitespace error in t/test-lib.sh.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodocument --pretty=tformat: option
Jeff King [Thu, 12 Jun 2008 06:14:28 +0000 (02:14 -0400)]
document --pretty=tformat: option

This was introduced in 4da45bef, but never documented anywhere.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoImprove sed portability
Chris Ridd [Wed, 11 Jun 2008 13:09:19 +0000 (14:09 +0100)]
Improve sed portability

The behaviour of "sed" on an incomplete line is unspecified by POSIX, and
On Solaris it apparently fails to process input that doesn't end in a LF.

Consequently constructs like

  re=$(printf '%s' foo | sed -e 's/bar/BAR/g' $)

cause re to be set to the empty string. Such a construct is used in
git-submodule.sh.

Because the LF at the end of command output are stripped away by the
command substitution, it is a safe and sane change to add a LF at the end
of the printf format specifier.

Signed-off-by: Chris Ridd <chris.ridd@isode.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agouser-manual: describe how higher stages are set during a merge
Junio C Hamano [Thu, 12 Jun 2008 21:30:37 +0000 (14:30 -0700)]
user-manual: describe how higher stages are set during a merge

Higher stages store the blobs involved from their side verbatim.  Removal
of uninteresting hunks are done by "diff --cc" upon demand and not stored
in the index.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agodoc: adding gitman.info and *.texi to .gitignore
Geoffrey Irving [Thu, 12 Jun 2008 14:29:42 +0000 (07:29 -0700)]
doc: adding gitman.info and *.texi to .gitignore

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation: exclude @pxref{[REMOTES]} from texinfo intermediate output
Junio C Hamano [Thu, 12 Jun 2008 21:21:05 +0000 (14:21 -0700)]
Documentation: exclude @pxref{[REMOTES]} from texinfo intermediate output

We already had a hack to exclude @pxref{[URLS]} from the texi stream that
refers to nonexistent anchor.

This allows "make info" to produce gitman.info again.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation/git-pull.txt: Use more standard [NOTE] markup
Junio C Hamano [Thu, 12 Jun 2008 21:19:09 +0000 (14:19 -0700)]
Documentation/git-pull.txt: Use more standard [NOTE] markup

Unlike other manual pages (e.g. git-blame.txt), this used *NOTE:*
to show a side note headed with boldface string "NOTE".  Use a paragraph
headed by [NOTE] like others instead.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years ago"remote prune": be quiet when there is nothing to prune
Junio C Hamano [Thu, 12 Jun 2008 06:43:25 +0000 (23:43 -0700)]
"remote prune": be quiet when there is nothing to prune

The previous commit made it always say "Pruning $remote" but reported the
URL only when there is something to prune.  Make it consistent by not
saying anything at all when there is nothing to prune.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoTypo in RelNotes.
Mikael Magnusson [Thu, 12 Jun 2008 02:38:38 +0000 (04:38 +0200)]
Typo in RelNotes.

Signed-off-by: Mikael Magnusson <mikachu@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge git://git.kernel.org/pub/scm/gitk/gitk
Junio C Hamano [Wed, 11 Jun 2008 23:22:53 +0000 (16:22 -0700)]
Merge git://git.kernel.org/pub/scm/gitk/gitk

* git://git.kernel.org/pub/scm/gitk/gitk:
  gitk: Handle detached heads better

16 years agoMerge branch 'maint'
Junio C Hamano [Wed, 11 Jun 2008 23:21:56 +0000 (16:21 -0700)]
Merge branch 'maint'

* maint:
  fix typo in tutorial

16 years agofix typo in tutorial
Fred Maranhão [Wed, 11 Jun 2008 23:09:48 +0000 (19:09 -0400)]
fix typo in tutorial

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoremote show: list tracked remote branches with -n
Olivier Marin [Tue, 10 Jun 2008 22:54:49 +0000 (00:54 +0200)]
remote show: list tracked remote branches with -n

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoremote prune: print the list of pruned branches
Olivier Marin [Tue, 10 Jun 2008 14:51:35 +0000 (16:51 +0200)]
remote prune: print the list of pruned branches

This command is really too quiet which make it unconfortable to use.

Also implement a --dry-run option, in place of the original -n one, to
list stale tracking branches that will be pruned, but do not actually
prune them.

Add a test case for --dry-run.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agobuiltin-remote: split show_or_prune() in two separate functions
Olivier Marin [Tue, 10 Jun 2008 14:51:21 +0000 (16:51 +0200)]
builtin-remote: split show_or_prune() in two separate functions

This allow us to add different features to each of them and keep the
code simple at the same time. Also create a get_remote_ref_states()
to avoid duplicated code.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoremote show: fix the -n option
Olivier Marin [Tue, 10 Jun 2008 14:51:08 +0000 (16:51 +0200)]
remote show: fix the -n option

The perl version accepted a -n flag, to show local informations only
without querying remote heads, that seems to have been lost in the C
revrite.

This restores the older behaviour and add a test case.

Signed-off-by: Olivier Marin <dkr@freesurf.fr>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-cvsimport: do not fail when CVSROOT is /
Philippe Bruhat (BooK) [Tue, 10 Jun 2008 12:32:06 +0000 (14:32 +0200)]
git-cvsimport: do not fail when CVSROOT is /

For CVS repositories with unusual CVSROOT, git-cvsimport would fail:

    $ git-cvsimport -v -C foo -d :pserver:anon:@cvs.example.com:/ foo
    AuthReply: error 0 : no such repository

This patch ensures that the path is never empty, but at least '/'.

Signed-off-by: Philippe Bruhat (BooK) <book@cpan.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoConsolidate SHA1 object file close
Linus Torvalds [Wed, 11 Jun 2008 01:47:18 +0000 (18:47 -0700)]
Consolidate SHA1 object file close

This consolidates the common operations for closing the new temporary file
that we have written, before we move it into place with the final name.

There's some common code there (make it read-only and check for errors on
close), but more importantly, this also gives a single place to add an
fsync_or_die() call if we want to add a safe mode.

This was triggered due to Denis Bueno apparently twice being able to
corrupt his git repository on OS X due to an unlucky combination of kernel
crashes and a not-very-robust filesystem.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoDocumentation/git-cat-file.txt: add missing line break
Lea Wiemann [Tue, 3 Jun 2008 11:06:12 +0000 (13:06 +0200)]
Documentation/git-cat-file.txt: add missing line break

Without [verse], the line break between the two synopsis lines does
not make it into the man page.

Signed-off-by: Lea Wiemann <LeWiemann@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoMerge branch 'js/merge-recursive'
Junio C Hamano [Mon, 9 Jun 2008 23:13:10 +0000 (16:13 -0700)]
Merge branch 'js/merge-recursive'

* js/merge-recursive:
  merge-recursive: respect core.autocrlf when writing out the result
  Add testcase for merging in a CRLF repo

16 years agoMerge branch 'maint'
Junio C Hamano [Mon, 9 Jun 2008 23:13:08 +0000 (16:13 -0700)]
Merge branch 'maint'

* maint:
  git-read-tree: document -v option.
  Remove exec bit from builtin-fast-export.c

16 years agomerge-recursive: respect core.autocrlf when writing out the result
Johannes Schindelin [Mon, 9 Jun 2008 21:23:16 +0000 (22:23 +0100)]
merge-recursive: respect core.autocrlf when writing out the result

The code forgot to convert the blob contents into work tree
representation before writing it out.  Also fixes leaks -- earlier
the updated blobs were never freed.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agogit-read-tree: document -v option.
Miklos Vajna [Mon, 9 Jun 2008 20:25:15 +0000 (22:25 +0200)]
git-read-tree: document -v option.

Signed-off-by: Miklos Vajna <vmiklos@frugalware.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoAdd testcase for merging in a CRLF repo
Marius Storm-Olsen [Mon, 9 Jun 2008 21:22:37 +0000 (22:22 +0100)]
Add testcase for merging in a CRLF repo

If you work on a repo with core.autocrlf == true, you would expect
every text file to have CRLF EOLs. However, if you by some operation,
get a conflict, then the conflicted file has LF EOLs.

Now, of course you'd go about resolving the files conflict, and then 'git
add <file>'. When you do that, you'll get the warning saying that LF will
be replaced by CRLF. Then you commit. The end result is that you have a
workingdir with a mix of LF and CRLF files, which after some more
operations may trigger a "whole file changed" diff, due to the workingdir
file now having LF EOLs.

An LF only conflict file results in the resolved file being in LF,
the commit is in LF and a warning saying that LF will be replaced
by CRLF, and the working dir ends up with a mix of CRLF and LF files.

Signed-off-by: Marius Storm-Olsen <marius@trolltech.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
16 years agoIgnore .gitattributes in bare repositories
René Scharfe [Sun, 8 Jun 2008 15:16:11 +0000 (17:16 +0200)]
Ignore .gitattributes in bare repositories

Attributes can be specified at three different places: the internal
table of default values, the file $GIT_DIR/info/attributes and files
named .gitattributes in the work tree.  Since bare repositories don't
have a work tree, git should ignore any .gitattributes files there.

This patch makes git do that, so the only way left for a user to specify
attributes in a bare repository is the file info/attributes (in addition
to changing the defaults and recompiling).

In addition, git-check-attr is now allowed to run without a work tree.
Like any user of the code in attr.c, it ignores the .gitattributes files
when run in a bare repository.  It can still read from info/attributes.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>