Merge fixes up to GIT 1.0.7
authorJunio C Hamano <junkio@cox.net>
Fri, 6 Jan 2006 04:54:42 +0000 (20:54 -0800)
committerJunio C Hamano <junkio@cox.net>
Fri, 6 Jan 2006 04:54:42 +0000 (20:54 -0800)
Signed-off-by: Junio C Hamano <junkio@cox.net>
60 files changed:
.gitignore
Documentation/cvs-migration.txt
Documentation/diff-format.txt
Documentation/diff-options.txt
Documentation/git-add.txt
Documentation/git-am.txt
Documentation/git-apply.txt
Documentation/git-archimport.txt
Documentation/git-cat-file.txt
Documentation/git-checkout-index.txt
Documentation/git-clone.txt
Documentation/git-commit-tree.txt
Documentation/git-commit.txt
Documentation/git-cvsexportcommit.txt
Documentation/git-cvsimport.txt
Documentation/git-daemon.txt
Documentation/git-diff-index.txt
Documentation/git-diff-tree.txt
Documentation/git-diff.txt
Documentation/git-format-patch.txt
Documentation/git-fsck-objects.txt
Documentation/git-grep.txt
Documentation/git-http-fetch.txt
Documentation/git-init-db.txt
Documentation/git-ls-files.txt
Documentation/git-pack-objects.txt
Documentation/git-repo-config.txt
Documentation/git-rev-list.txt
Documentation/git-show-branch.txt
Documentation/git-svnimport.txt
Documentation/git.txt
Documentation/glossary.txt
Documentation/howto/isolate-bugs-with-bisect.txt
Documentation/repository-layout.txt
apply.c
config.c
date.c
diff-index.c
diff.c
entry.c
epoch.c
fetch-clone.c
git-commit.sh
git-compat-util.h
git-fetch.sh
git-format-patch.sh
git-merge-one-file.sh
git-reset.sh
git-svnimport.perl
git.c
ident.c
ls-files.c
pack-objects.c
repo-config.c
t/t3300-funny-names.sh
t/t4000-diff-format.sh
t/t4006-diff-mode.sh
t/t4102-apply-rename.sh
t/t6001-rev-list-merge-order.sh
t/test-lib.sh

index 47d76f4..1a9090b 100644 (file)
@@ -120,3 +120,4 @@ git-core.spec
 *.exe
 libgit.a
 *.o
+*.py[co]
index dc9387b..8fd1a33 100644 (file)
@@ -138,7 +138,7 @@ mailing list archives for details).
 git has a couple of alternatives, though, that you may find sufficient
 or even superior depending on your use.  One is called "git-whatchanged"
 (for obvious reasons) and the other one is called "pickaxe" ("a tool for
-the software archeologist"). 
+the software archaeologist"). 
 
 The "git-whatchanged" script is a truly trivial script that can give you
 a good overview of what has changed in a file or a directory (or an
index 97756ec..0398b40 100644 (file)
@@ -117,7 +117,7 @@ git specific extension to diff format
 What -p option produces is slightly different from the
 traditional diff format.
 
-1.   It is preceeded with a "git diff" header, that looks like
+1.   It is preceded with a "git diff" header, that looks like
      this:
 
      diff --git a/file1 b/file2
index 9e574a0..5c85167 100644 (file)
@@ -21,7 +21,7 @@
 --abbrev[=<n>]::
        Instead of showing the full 40-byte hexadecimal object
        name in diff-raw format output and diff-tree header
-       lines, show only handful dhexigits prefix.  This is
+       lines, show only handful hexdigits prefix.  This is
        independent of --full-index option above, which controls
        the diff-patch output format.  Non default number of
        digits can be specified with --abbrev=<n>.
index 4cae412..89e4614 100644 (file)
@@ -31,7 +31,7 @@ DISCUSSION
 ----------
 
 The list of <file> given to the command is fed to `git-ls-files`
-command to list files that are not registerd in the index and
+command to list files that are not registered in the index and
 are not ignored/excluded by `$GIT_DIR/info/exclude` file or
 `.gitignore` file in each directory.  This means two things:
 
index a415fe2..02cabc9 100644 (file)
@@ -8,6 +8,7 @@ git-am - Apply a series of patches in a mailbox
 
 SYNOPSIS
 --------
+[verse]
 'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>...
 'git-am' [--skip | --resolved]
 
index 626e281..51c7d47 100644 (file)
@@ -8,7 +8,10 @@ git-apply - Apply patch on a git index file and a work tree
 
 SYNOPSIS
 --------
-'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--no-add] [--index-info] [--allow-binary-replacement] [-z] [<patch>...]
+[verse]
+'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply]
+         [--no-add] [--index-info] [--allow-binary-replacement] [-z]
+         [<patch>...]
 
 DESCRIPTION
 -----------
index a2bd788..023d3ae 100644 (file)
@@ -8,15 +8,15 @@ git-archimport - Import an Arch repository into git
 
 SYNOPSIS
 --------
-`git-archimport` [ -h ] [ -v ] [ -o ] [ -a ] [ -f ] [ -T ]
-                 [ -D depth ] [ -t tempdir ] 
-                 <archive/branch> [ <archive/branch> ]
+[verse]
+`git-archimport` [-h] [-v] [-o] [-a] [-f] [-T] [-D depth] [-t tempdir]
+               <archive/branch> [ <archive/branch> ]
 
 DESCRIPTION
 -----------
 Imports a project from one or more Arch repositories. It will follow branches
 and repositories within the namespaces defined by the <archive/branch>
-parameters suppplied. If it cannot find the remote branch a merge comes from
+parameters supplied. If it cannot find the remote branch a merge comes from
 it will just import it as a regular commit. If it can find it, it will mark it 
 as a merge whenever possible (see discussion below). 
 
index 9a7700f..504eb1b 100644 (file)
@@ -8,7 +8,7 @@ git-cat-file - Provide content or type information for repository objects
 
 SYNOPSIS
 --------
-'git-cat-file' (-t | -s | -e | <type>) <object>
+'git-cat-file' [-t | -s | -e | <type>] <object>
 
 DESCRIPTION
 -----------
index 9f32c65..2a1e526 100644 (file)
@@ -8,8 +8,9 @@ git-checkout-index - Copy files from the index to the working directory
 
 SYNOPSIS
 --------
+[verse]
 'git-checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
-       [--stage=<number>] [--] <file>...
+                  [--stage=<number>] [--] <file>...
 
 DESCRIPTION
 -----------
index f943f26..790b87b 100644 (file)
@@ -8,7 +8,9 @@ git-clone - Clones a repository.
 
 SYNOPSIS
 --------
-'git-clone' [-l [-s]] [-q] [-n] [-o <name>] [-u <upload-pack>] <repository> [<directory>]
+[verse]
+'git-clone' [-l [-s]] [-q] [-n] [-o <name>] [-u <upload-pack>]
+         <repository> [<directory>]
 
 DESCRIPTION
 -----------
index a794192..41d1a1c 100644 (file)
@@ -60,7 +60,8 @@ either `.git/config` file, or using the following environment variables.
 
 (nb "<", ">" and "\n"s are stripped)
 
-In `.git/config` file, the following items are used:
+In `.git/config` file, the following items are used for GIT_AUTHOR_NAME and
+GIT_AUTHOR_EMAIL:
 
        [user]
                name = "Your Name"
index 8b91f22..e0ff74f 100644 (file)
@@ -7,7 +7,9 @@ git-commit - Record your changes
 
 SYNOPSIS
 --------
-'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] [--] <file>...
+[verse]
+'git-commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>]
+          [-e] [--] <file>...
 
 DESCRIPTION
 -----------
index 91def2b..13cbf3b 100644 (file)
@@ -8,8 +8,7 @@ git-cvsexportcommit - Export a commit to a CVS checkout
 
 SYNOPSIS
 --------
-git-cvsexportcommmit.perl 
-                        [ -h ] [ -v ] [ -c ] [ -p ] [PARENTCOMMIT] COMMITID 
+'git-cvsexportcommmit' [-h] [-v] [-c] [-p] [PARENTCOMMIT] COMMITID
 
 
 DESCRIPTION
index f89b251..01ca7ef 100644 (file)
@@ -8,10 +8,10 @@ git-cvsimport - Import a CVS repository into git
 
 SYNOPSIS
 --------
-'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ]
-                       [ -d <CVSROOT> ] [ -p <options-for-cvsps> ]
-                       [ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ]
-                       [ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ]
+[verse]
+'git-cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>] [-s <subst>]
+             [-p <options-for-cvsps>] [-C <git_repository>] [-i] [-P <file>]
+             [-m] [-M regex] [<CVS_module>]
 
 
 DESCRIPTION
index 2a8f371..33f3320 100644 (file)
@@ -7,8 +7,9 @@ git-daemon - A really simple server for git repositories.
 
 SYNOPSIS
 --------
+[verse]
 'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all]
-             [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
+           [--timeout=n] [--init-timeout=n] [--strict-paths] [directory...]
 
 DESCRIPTION
 -----------
index dba6d30..5d2096a 100644 (file)
@@ -53,7 +53,7 @@ If '--cached' is specified, it allows you to ask:
        contents (the ones I'd write with a "git-write-tree")
 
 For example, let's say that you have worked on your working directory, updated
-some files in the index and are ready to commit. You want to see eactly
+some files in the index and are ready to commit. You want to see exactly
 *what* you are going to commit is without having to write a new tree
 object and compare it that way, and to do that, you just do
 
@@ -110,7 +110,7 @@ NOTE: As with other commands of this type, "git-diff-index" does not
 actually look at the contents of the file at all. So maybe
 `kernel/sched.c` hasn't actually changed, and it's just that you
 touched it. In either case, it's a note that you need to
-"git-upate-index" it to make the index be in sync.
+"git-update-index" it to make the index be in sync.
 
 NOTE: You can have a mixture of files show up as "has been updated"
 and "is still dirty in the working directory" together. You can always
index 9a2947e..91fb130 100644 (file)
@@ -8,7 +8,9 @@ git-diff-tree - Compares the content and mode of blobs found via two tree object
 
 SYNOPSIS
 --------
-'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r] [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
+[verse]
+'git-diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty] [-t] [-r]
+             [--root] [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
 
 DESCRIPTION
 -----------
@@ -62,7 +64,7 @@ separated with a single space are given.
 -s::
        By default, "git-diff-tree --stdin" shows differences,
        either in machine-readable form (without '-p') or in patch
-       form (with '-p').  This output can be supressed.  It is
+       form (with '-p').  This output can be suppressed.  It is
        only useful with '-v' flag.
 
 -v::
index b04f393..ca41634 100644 (file)
@@ -67,7 +67,7 @@ $ git diff HEAD^ HEAD <3>
 <1> instead of using the tip of the current branch, compare with the
 tip of "test" branch.
 <2> instead of comparing with the tip of "test" branch, compare with
-the tip of the curren branch, but limit the comparison to the
+the tip of the current branch, but limit the comparison to the
 file "test".
 <3> compare the version before the last commit and the last commit.
 ------------
index d7ca2db..47705de 100644 (file)
@@ -8,7 +8,9 @@ git-format-patch - Prepare patches for e-mail submission.
 
 SYNOPSIS
 --------
-'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox] [--diff-options] <his> [<mine>]
+[verse]
+'git-format-patch' [-n | -k] [-o <dir> | --stdout] [-s] [-c] [--mbox]
+                [--diff-options] <his> [<mine>]
 
 DESCRIPTION
 -----------
@@ -96,7 +98,7 @@ git-format-patch -M -B origin::
 
 See Also
 --------
-gitlink:git-am[1], gitlink:git-send-email
+gitlink:git-am[1], gitlink:git-send-email[1]
 
 
 Author
index bab1f60..387b435 100644 (file)
@@ -8,7 +8,9 @@ git-fsck-objects - Verifies the connectivity and validity of the objects in the
 
 SYNOPSIS
 --------
-'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache] [--standalone | --full] [--strict] [<object>*]
+[verse]
+'git-fsck-objects' [--tags] [--root] [--unreachable] [--cache]
+                [--standalone | --full] [--strict] [<object>*]
 
 DESCRIPTION
 -----------
index 0175793..2bfd8ed 100644 (file)
@@ -8,7 +8,7 @@ git-grep - print lines matching a pattern
 
 SYNOPSIS
 --------
-'git-grep' <option>... <pattern> <path>...
+'git-grep' [<option>...] <pattern> [<path>...]
 
 DESCRIPTION
 -----------
@@ -27,7 +27,6 @@ OPTIONS
        The pattern to look for.
 
 <path>...::
-
        Optional paths to limit the set of files to be searched;
        passed to `git-ls-files`.
 
index 1116e85..bc1a132 100644 (file)
@@ -3,12 +3,12 @@ git-http-fetch(1)
 
 NAME
 ----
-git-http-fetch - Downloads a remote git repository via HTTP
+git-http-fetch - downloads a remote git repository via HTTP
 
 
 SYNOPSIS
 --------
-'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] commit-id url
+'git-http-fetch' [-c] [-t] [-a] [-d] [-v] [-w filename] [--recover] <commit> <url>
 
 DESCRIPTION
 -----------
index 6deef92..ea4d849 100644 (file)
@@ -8,7 +8,7 @@ git-init-db - Creates an empty git repository
 
 SYNOPSIS
 --------
-'git-init-db' [--template=<template_directory>]
+'git-init-db' [--template=<template_directory>] [--shared]
 
 
 OPTIONS
@@ -16,6 +16,9 @@ OPTIONS
 --template=<template_directory>::
        Provide the directory in from which templates will be used.
 
+--shared::
+       Specify that the git repository is to be shared amongst several users.
+
 
 DESCRIPTION
 -----------
@@ -30,7 +33,16 @@ If the object storage directory is specified via the `$GIT_OBJECT_DIRECTORY`
 environment variable then the sha1 directories are created underneath -
 otherwise the default `$GIT_DIR/objects` directory is used.
 
-`git-init-db` won't hurt an existing repository.
+A shared repository allows users belonging to the same group to push into that
+repository. When specifying `--shared` the config variable "core.sharedRepository" 
+is set to 'true' so that directories under `$GIT_DIR` are made group writable
+(and g+sx, since the git group may be not the primary group of all users).
+
+
+Running `git-init-db` in an existing repository is safe. It will not overwrite
+things that are already there. The primary reason for rerunning `git-init-db`
+is to pick up newly added templates.
+
 
 
 EXAMPLES
index 186f3bb..e42af5e 100644 (file)
@@ -74,7 +74,7 @@ OPTIONS
        H::     cached
        M::     unmerged
        R::     removed/deleted
-       C::     modifed/changed
+       C::     modified/changed
        K::     to be killed
        ?       other
 
index 009ec5a..2d67d39 100644 (file)
@@ -46,7 +46,7 @@ base-name::
        output of the command.
 
 --stdout::
-       Write the pack contents (what would have been writtin to
+       Write the pack contents (what would have been written to
        .pack file) out to the standard output.
 
 --window and --depth::
index 5eefe02..3069464 100644 (file)
@@ -21,9 +21,9 @@ You can query/set/replace/unset options with this command. The name is
 actually the section and the key separated by a dot, and the value will be
 escaped.
 
-If you want to set/unset an option which can occor on multiple lines, you
+If you want to set/unset an option which can occur on multiple lines, you
 should provide a POSIX regex for the value. If you want to handle the lines
-*not* matching the regex, just prepend a single exlamation mark in front
+*not* matching the regex, just prepend a single exclamation mark in front
 (see EXAMPLES).
 
 This command will fail if
index 064ccb1..f9146f1 100644 (file)
@@ -8,18 +8,19 @@ git-rev-list - Lists commit objects in reverse chronological order
 
 SYNOPSIS
 --------
+[verse]
 'git-rev-list' [ \--max-count=number ]
-       [ \--max-age=timestamp ]
-       [ \--min-age=timestamp ]
-       [ \--sparse ]
-       [ \--no-merges ]
-       [ \--all ]
-       [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] | ]
-       [ \--parents ]
-       [ \--objects [ \--unpacked ] ]
-       [ \--pretty | \--header | ]
-       [ \--bisect ]
-       <commit>... [ \-- <paths>... ]
+            [ \--max-age=timestamp ]
+            [ \--min-age=timestamp ]
+            [ \--sparse ]
+            [ \--no-merges ]
+            [ \--all ]
+            [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] ]
+            [ \--parents ]
+            [ \--objects [ \--unpacked ] ]
+            [ \--pretty | \--header ]
+            [ \--bisect ]
+            <commit>... [ \-- <paths>... ]
 
 DESCRIPTION
 -----------
@@ -129,7 +130,7 @@ the marked commit in the list.
 +
 Commits marked with (^) are not parents of the immediately preceding commit.
 These "breaks" represent necessary discontinuities implied by trying to
-represent an arbtirary DAG in a linear form.
+represent an arbitrary DAG in a linear form.
 +
 `--show-breaks` is only valid if `--merge-order` is also specified.
 
index ffe64d8..5b76f3b 100644 (file)
@@ -85,7 +85,7 @@ Following these N lines, one-line log for each commit is
 displayed, indented N places.  If a commit is on the I-th
 branch, the I-th indentation character shows a '+' sign;
 otherwise it shows a space.  Each commit shows a short name that
-can be used as an exended SHA1 to name that commit.
+can be used as an extended SHA1 to name that commit.
 
 The following example shows three branches, "master", "fixes"
 and "mhf":
index f8dbee7..db1ce38 100644 (file)
@@ -11,7 +11,7 @@ SYNOPSIS
 --------
 'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
                        [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
-                       [ -b branch_subdir ] [ -t trunk_subdir ] [ -T tag_subdir ]
+                       [ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
                        [ -s start_chg ] [ -m ] [ -M regex ]
                        <SVN_repository_URL> [ <path> ]
 
@@ -40,17 +40,17 @@ OPTIONS
 -s <start_rev>::
         Start importing at this SVN change number. The  default is 1.
 +
-When importing incementally, you might need to edit the .git/svn2git file.
+When importing incrementally, you might need to edit the .git/svn2git file.
 
 -i::
        Import-only: don't perform a checkout after importing.  This option
        ensures the working directory and index remain untouched and will
        not create them if they do not exist.
 
--t <trunk_subdir>::
+-T <trunk_subdir>::
        Name the SVN trunk. Default "trunk".
 
--T <tag_subdir>::
+-t <tag_subdir>::
        Name the SVN subdirectory for tags. Default "tags".
 
 -b <branch_subdir>::
index 90c5bfa..92cfe0e 100644 (file)
@@ -425,7 +425,7 @@ gitlink:git-rev-parse[1]::
 gitlink:git-send-email[1]::
        Send patch e-mails out of "format-patch --mbox" output.
 
-gitlink:git-symbolic-refs[1]::
+gitlink:git-symbolic-ref[1]::
        Read and modify symbolic refs.
 
 gitlink:git-stripspace[1]::
index 520f4c5..2331be5 100644 (file)
@@ -19,7 +19,7 @@ hash::
        In git's context, synonym to object name.
 
 object database::
-       Stores a set of "objects", and an individial object is identified
+       Stores a set of "objects", and an individual object is identified
        by its object name. The objects usually live in `$GIT_DIR/objects/`.
 
 blob object::
index 4009495..edbcd4c 100644 (file)
@@ -24,7 +24,7 @@ Then do
        git bisect bad master           <- mark "master" as the bad state
        git bisect good ORIG_HEAD       <- mark ORIG_HEAD as good (or
                                           whatever other known-good 
-                                          thing you booted laste)
+                                          thing you booted last)
 
 and at this point "git bisect" will churn for a while, and tell you what 
 the mid-point between those two commits are, and check that state out as 
index 1b5f228..0347cab 100644 (file)
@@ -21,7 +21,7 @@ outside world but sometimes useful for private repository.
 . You can be using `objects/info/alternates` mechanism, or
 `$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow'
 objects from other object stores.  A repository with this kind
-of incompete object store is not suitable to be published for
+of incomplete object store is not suitable to be published for
 use with dumb transports but otherwise is OK as long as
 `objects/info/alternates` points at the right object stores
 it borrows from.
@@ -106,7 +106,7 @@ info/refs::
        up-to-date if the repository is published for dumb
        transports.  The `git-receive-pack` command, which is
        run on a remote repository when you `git push` into it,
-       runs `hooks/update` hook to help you achive this.
+       runs `hooks/update` hook to help you achieve this.
 
 info/grafts::
        This file records fake commit ancestry information, to
diff --git a/apply.c b/apply.c
index d5e7bfd..c471a82 100644 (file)
--- a/apply.c
+++ b/apply.c
@@ -1588,7 +1588,7 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
 
        if (S_ISLNK(mode))
                return symlink(buf, path);
-       fd = open(path, O_CREAT | O_EXCL | O_WRONLY | O_TRUNC, (mode & 0100) ? 0777 : 0666);
+       fd = open(path, O_CREAT | O_EXCL | O_WRONLY, (mode & 0100) ? 0777 : 0666);
        if (fd < 0)
                return -1;
        while (size) {
@@ -1635,7 +1635,8 @@ static void create_one_file(const char *path, unsigned mode, const char *buf, un
                        }
                        if (errno != EEXIST)
                                break;
-               }                       
+                       ++nr;
+               }
        }
        die("unable to write file %s mode %o", path, mode);
 }
index 992e988..8355224 100644 (file)
--- a/config.c
+++ b/config.c
@@ -409,8 +409,7 @@ int git_config_set_multivar(const char* key, const char* value,
        const char* value_regex, int multi_replace)
 {
        int i;
-       struct stat st;
-       int fd;
+       int fd, in_fd;
        char* config_filename = strdup(git_path("config"));
        char* lock_file = strdup(git_path("config.lock"));
        const char* last_dot = strrchr(key, '.');
@@ -457,9 +456,17 @@ int git_config_set_multivar(const char* key, const char* value,
        /*
         * If .git/config does not exist yet, write a minimal version.
         */
-       if (stat(config_filename, &st)) {
+       in_fd = open(config_filename, O_RDONLY);
+       if ( in_fd < 0 ) {
                free(store.key);
 
+               if ( ENOENT != errno ) {
+                       error("opening %s: %s", config_filename,
+                             strerror(errno));
+                       close(fd);
+                       unlink(lock_file);
+                       return 3; /* same as "invalid config file" */
+               }
                /* if nothing to unset, error out */
                if (value == NULL) {
                        close(fd);
@@ -471,7 +478,7 @@ int git_config_set_multivar(const char* key, const char* value,
                store_write_section(fd, key);
                store_write_pair(fd, key, value);
        } else{
-               int in_fd;
+               struct stat st;
                char* contents;
                int i, copy_begin, copy_end, new_line = 0;
 
@@ -528,7 +535,7 @@ int git_config_set_multivar(const char* key, const char* value,
                        return 5;
                }
 
-               in_fd = open(config_filename, O_RDONLY, 0666);
+               fstat(in_fd, &st);
                contents = mmap(NULL, st.st_size, PROT_READ,
                        MAP_PRIVATE, in_fd, 0);
                close(in_fd);
diff --git a/date.c b/date.c
index 3e11500..416ea57 100644 (file)
--- a/date.c
+++ b/date.c
@@ -326,7 +326,7 @@ static int match_digit(const char *date, struct tm *tm, int *offset, int *tm_gmt
 
        /*
         * NOTE! We will give precedence to day-of-month over month or
-        * year numebers in the 1-12 range. So 05 is always "mday 5",
+        * year numbers in the 1-12 range. So 05 is always "mday 5",
         * unless we already have a mday..
         *
         * IOW, 01 Apr 05 parses as "April 1st, 2005".
@@ -640,7 +640,7 @@ unsigned long approxidate(const char *date)
        }
        if (number > 0 && number < 32)
                tm.tm_mday = number;
-       if (tm.tm_mon > now.tm_mon)
+       if (tm.tm_mon > now.tm_mon && tm.tm_year == now.tm_year)
                tm.tm_year--;
        return mktime(&tm);
 }
index 0054883..87e1061 100644 (file)
@@ -116,7 +116,7 @@ static int diff_cache(struct cache_entry **ac, int entries, const char **pathspe
                        /* We come here with ce pointing at stage 1
                         * (original tree) and ac[1] pointing at stage
                         * 3 (unmerged).  show-modified with
-                        * report-mising set to false does not say the
+                        * report-missing set to false does not say the
                         * file is deleted but reports true if work
                         * tree does not have it, in which case we
                         * fall through to report the unmerged state.
diff --git a/diff.c b/diff.c
index 66057e5..17d68fa 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -787,7 +787,7 @@ int diff_setup_done(struct diff_options *options)
                         * so it is safe for us to do this here.  Also
                         * it does not smudge active_cache or active_nr
                         * when it fails, so we do not have to worry about
-                        * cleaning it up oufselves either.
+                        * cleaning it up ourselves either.
                         */
                        read_cache();
        }
diff --git a/entry.c b/entry.c
index 15b34eb..410b758 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -60,7 +60,7 @@ static void remove_subtree(const char *path)
 static int create_file(const char *path, unsigned int mode)
 {
        mode = (mode & 0100) ? 0777 : 0666;
-       return open(path, O_WRONLY | O_TRUNC | O_CREAT | O_EXCL, mode);
+       return open(path, O_WRONLY | O_CREAT | O_EXCL, mode);
 }
 
 static int write_entry(struct cache_entry *ce, const char *path, struct checkout *state)
diff --git a/epoch.c b/epoch.c
index db44f5c..3a76748 100644 (file)
--- a/epoch.c
+++ b/epoch.c
@@ -190,7 +190,7 @@ static void free_mass_counter(struct mass_counter *counter)
  * enqueued, enqueuing the commit in a list of pending commits, in latest
  * commit date first order.
  *
- * The algorithm then preceeds to visit each commit in the pending queue.
+ * The algorithm then proceeds to visit each commit in the pending queue.
  * Upon each visit, the pending mass is added to the mass already seen for that
  * commit and then divided into N equal portions, where N is the number of
  * parents of the commit being visited. The divided portions are then injected
index 2b2aa15..f46fe6e 100644 (file)
@@ -47,7 +47,7 @@ static int finish_pack(const char *pack_tmp_name, const char *me)
                if (retval < 0) {
                        if (errno == EINTR)
                                continue;
-                       error("waitpid failed (%s)", strerror(retval));
+                       error("waitpid failed (%s)", strerror(errno));
                        goto error_die;
                }
                if (WIFSIGNALED(status)) {
index 7e39c10..193feeb 100755 (executable)
@@ -148,7 +148,7 @@ esac
 
 if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
        echo "#"
-       echo "# It looks like your may be committing a MERGE."
+       echo "# It looks like you may be committing a MERGE."
        echo "# If this is not correct, please remove the file"
        echo "# $GIT_DIR/MERGE_HEAD"
        echo "# and try again"
@@ -165,6 +165,7 @@ then
        then
                pick_author_script='
                /^author /{
+                       s/'\''/'\''\\'\'\''/g
                        h
                        s/^author \([^<]*\) <[^>]*> .*$/\1/
                        s/'\''/'\''\'\'\''/g
index 0c98c99..c353b27 100644 (file)
@@ -63,6 +63,8 @@ extern char *gitstrcasestr(const char *haystack, const char *needle);
 static inline void *xmalloc(size_t size)
 {
        void *ret = malloc(size);
+       if (!ret && !size)
+               ret = malloc(1);
        if (!ret)
                die("Out of memory, malloc failed");
        return ret;
@@ -71,6 +73,8 @@ static inline void *xmalloc(size_t size)
 static inline void *xrealloc(void *ptr, size_t size)
 {
        void *ret = realloc(ptr, size);
+       if (!ret && !size)
+               ret = realloc(ptr, 1);
        if (!ret)
                die("Out of memory, realloc failed");
        return ret;
@@ -79,6 +83,8 @@ static inline void *xrealloc(void *ptr, size_t size)
 static inline void *xcalloc(size_t nmemb, size_t size)
 {
        void *ret = calloc(nmemb, size);
+       if (!ret && (!nmemb || !size))
+               ret = calloc(1, 1);
        if (!ret)
                die("Out of memory, calloc failed");
        return ret;
index 125bcea..b46b3e5 100755 (executable)
@@ -188,11 +188,20 @@ esac
 reflist=$(get_remote_refs_for_fetch "$@")
 if test "$tags"
 then
-       taglist=$(git-ls-remote --tags "$remote" |
-               sed -e '
-                       /\^/d
-                       s/^[^   ]*      //
-                       s/.*/.&:&/')
+       taglist=$(IFS=" " &&
+                 git-ls-remote --tags "$remote" |
+                 while read sha1 name
+                 do
+                       case "$name" in
+                       (*^*) continue ;;
+                       esac
+                       if git-check-ref-format "$name"
+                       then
+                           echo ".${name}:${name}"
+                       else
+                           echo >&2 "warning: tag ${name} ignored"
+                       fi
+                 done)
        if test "$#" -gt 1
        then
                # remote URL plus explicit refspecs; we need to merge them.
index daa3cae..818059f 100755 (executable)
@@ -173,6 +173,7 @@ titleScript='
 
 whosepatchScript='
 /^author /{
+       s/'\''/'\''\\'\'\''/g
        s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p
        q
 }'
index 7dee88a..5349a1c 100755 (executable)
@@ -82,7 +82,7 @@ case "${1:-.}${2:-.}${3:-.}" in
                expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$orig
                ;;
        *)
-               echo "Auto-merging $4."
+               echo "Auto-merging $4"
                orig=`git-unpack-file $1`
                ;;
        esac
@@ -107,7 +107,7 @@ case "${1:-.}${2:-.}${3:-.}" in
        fi
 
        if [ $ret -ne 0 ]; then
-               echo "ERROR: Merge conflict in $4."
+               echo "ERROR: Merge conflict in $4"
                exit 1
        fi
        exec git-update-index -- "$4"
index eb44ee8..6c9e58a 100755 (executable)
@@ -3,7 +3,7 @@
 USAGE='[--mixed | --soft | --hard]  [<commit-ish>]'
 . git-sh-setup
 
-tmp=/var/tmp/reset.$$
+tmp=${GIT_DIR}/reset.$$
 trap 'rm -f $tmp-*' 0 1 2 3 15
 
 reset_type=--mixed
index cb241d1..6e3a44a 100755 (executable)
@@ -96,8 +96,10 @@ sub new {
 sub conn {
        my $self = shift;
        my $repo = $self->{'fullrep'};
-       my $s = SVN::Ra->new($repo);
-
+       my $auth = SVN::Core::auth_open ([SVN::Client::get_simple_provider,
+                         SVN::Client::get_ssl_server_trust_file_provider,
+                         SVN::Client::get_username_provider]);
+       my $s = SVN::Ra->new(url => $repo, auth => $auth);
        die "SVN connection to $repo: $!\n" unless defined $s;
        $self->{'svn'} = $s;
        $self->{'repo'} = $repo;
diff --git a/git.c b/git.c
index e795ddb..5e7da74 100644 (file)
--- a/git.c
+++ b/git.c
@@ -244,6 +244,11 @@ int main(int argc, char **argv, char **envp)
        for (i = 1; i < argc; i++) {
                char *arg = argv[i];
 
+               if (!strcmp(arg, "help")) {
+                       show_help = 1;
+                       continue;
+               }
+
                if (strncmp(arg, "--", 2))
                        break;
 
diff --git a/ident.c b/ident.c
index ac1c27f..0461b8b 100644 (file)
--- a/ident.c
+++ b/ident.c
@@ -140,7 +140,7 @@ static int copy(char *buf, int size, int offset, const char *src)
 
        /*
         * Copy the rest to the buffer, but avoid the special
-        * characters '\n' '<' and '>' that act as delimeters on
+        * characters '\n' '<' and '>' that act as delimiters on
         * a identification line
         */
        for (i = 0; i < len; i++) {
index 5e9ac71..cd87430 100644 (file)
@@ -169,7 +169,7 @@ static int excluded_1(const char *pathname,
                        }
                        else {
                                /* match with FNM_PATHNAME:
-                                * exclude has base (baselen long) inplicitly
+                                * exclude has base (baselen long) implicitly
                                 * in front of it.
                                 */
                                int baselen = x->baselen;
index caf3b6b..c3f2531 100644 (file)
@@ -119,7 +119,7 @@ static unsigned long write_one(struct sha1file *f,
                return offset;
        e->offset = offset;
        offset += write_object(f, e);
-       /* if we are delitified, write out its base object. */
+       /* if we are deltified, write out its base object. */
        if (e->delta)
                offset = write_one(f, e->delta, offset);
        return offset;
index b2569b7..c31e441 100644 (file)
@@ -6,7 +6,7 @@ static const char git_config_set_usage[] =
 
 static char* key = NULL;
 static char* value = NULL;
-static regex_t* regex = NULL;
+static regex_t* regexp = NULL;
 static int do_all = 0;
 static int do_not_match = 0;
 static int seen = 0;
@@ -14,9 +14,9 @@ static int seen = 0;
 static int show_config(const char* key_, const char* value_)
 {
        if (!strcmp(key_, key) &&
-                       (regex == NULL ||
+                       (regexp == NULL ||
                         (do_not_match ^
-                         !regexec(regex, value_, 0, NULL, 0)))) {
+                         !regexec(regexp, value_, 0, NULL, 0)))) {
                if (do_all) {
                        printf("%s\n", value_);
                        return 0;
@@ -46,8 +46,8 @@ static int get_value(const char* key_, const char* regex_)
                        regex_++;
                }
 
-               regex = (regex_t*)malloc(sizeof(regex_t));
-               if (regcomp(regex, regex_, REG_EXTENDED)) {
+               regexp = (regex_t*)malloc(sizeof(regex_t));
+               if (regcomp(regexp, regex_, REG_EXTENDED)) {
                        fprintf(stderr, "Invalid pattern: %s\n", regex_);
                        return -1;
                }
@@ -59,9 +59,9 @@ static int get_value(const char* key_, const char* regex_)
                free(value);
        }
        free(key);
-       if (regex) {
-               regfree(regex);
-               free(regex);
+       if (regexp) {
+               regfree(regexp);
+               free(regexp);
        }
 
        if (do_all)
index 6a85d67..72a93da 100755 (executable)
@@ -9,9 +9,6 @@ This test tries pathnames with funny characters in the working
 tree, index, and tree objects.
 '
 
-# since FAT/NTFS does not allow tabs in filenames, skip this test
-test "$(uname -o 2>/dev/null)" = Cygwin && exit 0
-
 . ./test-lib.sh
 
 p0='no-funny'
@@ -27,6 +24,12 @@ EOF
 cat >"$p1" "$p0"
 echo 'Foo Bar Baz' >"$p2"
 
+test -f "$p1" && cmp "$p0" "$p1" || {
+       # since FAT/NTFS does not allow tabs in filenames, skip this test
+       say 'Your filesystem does not allow tabs in filenames, test skipped.'
+       test_done
+}
+
 echo 'just space
 no-funny' >expected
 test_expect_success 'git-ls-files no-funny' \
index beb6d8f..67b9681 100755 (executable)
@@ -26,6 +26,14 @@ rm -f path1
 test_expect_success \
     'git-diff-files -p after editing work tree.' \
     'git-diff-files -p >current'
+
+# that's as far as it comes
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+       say 'filemode disabled on the filesystem'
+       test_done
+fi
+
 cat >expected <<\EOF
 diff --git a/path0 b/path0
 old mode 100644
index e2a67e9..8ad69d1 100755 (executable)
@@ -15,11 +15,21 @@ test_expect_success \
      tree=`git-write-tree` &&
      echo $tree'
 
-test_expect_success \
-    'chmod' \
-    'chmod +x rezrov &&
-     git-update-index rezrov &&
-     git-diff-index $tree >current'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+       say 'filemode disabled on the filesystem, using update-index --chmod=+x'
+       test_expect_success \
+           'git-update-index --chmod=+x' \
+           'git-update-index rezrov &&
+            git-update-index --chmod=+x rezrov &&
+            git-diff-index $tree >current'
+else
+       test_expect_success \
+           'chmod' \
+           'chmod +x rezrov &&
+            git-update-index rezrov &&
+            git-diff-index $tree >current'
+fi
 
 _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
 _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
index 0401d7b..fbb508d 100755 (executable)
@@ -31,7 +31,12 @@ test_expect_success setup \
 test_expect_success apply \
     'git-apply --index --stat --summary --apply test-patch'
 
-test_expect_success validate \
-    'test -f bar && ls -l bar | grep "^-..x......"'
+if [ "$(git repo-config --get core.filemode)" = false ]
+then
+       say 'filemode disabled on the filesystem'
+else
+       test_expect_success validate \
+           'test -f bar && ls -l bar | grep "^-..x......"'
+fi
 
 test_done
index 368b8d9..7724e8a 100755 (executable)
@@ -8,13 +8,6 @@ test_description='Tests git-rev-list --merge-order functionality'
 . ./test-lib.sh
 . ../t6000lib.sh # t6xxx specific functions
 
-if git-rev-list --merge-order 2>&1 | grep 'OpenSSL not linked' >/dev/null
-then
-    test_expect_success 'skipping merge-order test' :
-    test_done
-    exit
-fi    
-
 # test-case specific test function
 check_adjacency()
 {
@@ -114,6 +107,13 @@ test_output_expect_success 'rev-list has correct number of entries' 'git-rev-lis
 19
 EOF
 
+if git-rev-list --merge-order HEAD 2>&1 | grep 'OpenSSL not linked' >/dev/null
+then
+    test_expect_success 'skipping merge-order test' :
+    test_done
+    exit
+fi
+
 normal_adjacency_count=$(git-rev-list HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
 merge_order_adjacency_count=$(git-rev-list --merge-order HEAD | check_adjacency | grep -c "\^" | tr -d ' ')
 test_expect_success '--merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'
index a97d259..7534a76 100755 (executable)
@@ -195,7 +195,7 @@ test -d ../templates/blt || {
 test=trash
 rm -fr "$test"
 mkdir "$test"
-cd "$test"
+cd "$test" || error "Cannot setup test environment"
 "$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
 error "cannot run git init-db -- have you built things yet?"