Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2006-01-05 20:52:50 -08:00
Родитель 17dff84b5e c1fe2fe4fe
Коммит 92e802c6cc
61 изменённых файлов: 203 добавлений и 116 удалений

1
.gitignore поставляемый
Просмотреть файл

@ -119,3 +119,4 @@ git-core.spec
*.exe *.exe
libgit.a libgit.a
*.o *.o
*.py[co]

Просмотреть файл

@ -138,7 +138,7 @@ mailing list archives for details).
git has a couple of alternatives, though, that you may find sufficient git has a couple of alternatives, though, that you may find sufficient
or even superior depending on your use. One is called "git-whatchanged" 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 (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 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 a good overview of what has changed in a file or a directory (or an

Просмотреть файл

@ -117,7 +117,7 @@ git specific extension to diff format
What -p option produces is slightly different from the What -p option produces is slightly different from the
traditional diff format. 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: this:
diff --git a/file1 b/file2 diff --git a/file1 b/file2

Просмотреть файл

@ -21,7 +21,7 @@
--abbrev[=<n>]:: --abbrev[=<n>]::
Instead of showing the full 40-byte hexadecimal object Instead of showing the full 40-byte hexadecimal object
name in diff-raw format output and diff-tree header 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 independent of --full-index option above, which controls
the diff-patch output format. Non default number of the diff-patch output format. Non default number of
digits can be specified with --abbrev=<n>. digits can be specified with --abbrev=<n>.

Просмотреть файл

@ -31,7 +31,7 @@ DISCUSSION
---------- ----------
The list of <file> given to the command is fed to `git-ls-files` 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 are not ignored/excluded by `$GIT_DIR/info/exclude` file or
`.gitignore` file in each directory. This means two things: `.gitignore` file in each directory. This means two things:

Просмотреть файл

@ -8,6 +8,7 @@ git-am - Apply a series of patches in a mailbox
SYNOPSIS SYNOPSIS
-------- --------
[verse]
'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>... 'git-am' [--signoff] [--dotest=<dir>] [--utf8] [--binary] [--3way] <mbox>...
'git-am' [--skip | --resolved] 'git-am' [--skip | --resolved]

Просмотреть файл

@ -8,7 +8,10 @@ git-apply - Apply patch on a git index file and a work tree
SYNOPSIS 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 DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,15 +8,15 @@ git-archimport - Import an Arch repository into git
SYNOPSIS SYNOPSIS
-------- --------
`git-archimport` [ -h ] [ -v ] [ -o ] [ -a ] [ -f ] [ -T ] [verse]
[ -D depth ] [ -t tempdir ] `git-archimport` [-h] [-v] [-o] [-a] [-f] [-T] [-D depth] [-t tempdir]
<archive/branch> [ <archive/branch> ] <archive/branch> [ <archive/branch> ]
DESCRIPTION DESCRIPTION
----------- -----------
Imports a project from one or more Arch repositories. It will follow branches Imports a project from one or more Arch repositories. It will follow branches
and repositories within the namespaces defined by the <archive/branch> 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 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). as a merge whenever possible (see discussion below).

Просмотреть файл

@ -8,7 +8,7 @@ git-cat-file - Provide content or type information for repository objects
SYNOPSIS SYNOPSIS
-------- --------
'git-cat-file' (-t | -s | -e | <type>) <object> 'git-cat-file' [-t | -s | -e | <type>] <object>
DESCRIPTION DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,8 +8,9 @@ git-checkout-index - Copy files from the index to the working directory
SYNOPSIS SYNOPSIS
-------- --------
[verse]
'git-checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>] 'git-checkout-index' [-u] [-q] [-a] [-f] [-n] [--prefix=<string>]
[--stage=<number>] [--] <file>... [--stage=<number>] [--] <file>...
DESCRIPTION DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,7 +8,9 @@ git-clone - Clones a repository.
SYNOPSIS SYNOPSIS
-------- --------
'git-clone' [-l [-s]] [-q] [-n] [-u <upload-pack>] <repository> [<directory>] [verse]
'git-clone' [-l [-s]] [-q] [-n] [-u <upload-pack>]
<repository> [<directory>]
DESCRIPTION DESCRIPTION
----------- -----------

Просмотреть файл

@ -60,7 +60,8 @@ either `.git/config` file, or using the following environment variables.
(nb "<", ">" and "\n"s are stripped) (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] [user]
name = "Your Name" name = "Your Name"

Просмотреть файл

@ -7,7 +7,9 @@ git-commit - Record your changes
SYNOPSIS 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 DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,8 +8,7 @@ git-cvsexportcommit - Export a commit to a CVS checkout
SYNOPSIS SYNOPSIS
-------- --------
git-cvsexportcommmit.perl 'git-cvsexportcommmit' [-h] [-v] [-c] [-p] [PARENTCOMMIT] COMMITID
[ -h ] [ -v ] [ -c ] [ -p ] [PARENTCOMMIT] COMMITID
DESCRIPTION DESCRIPTION

Просмотреть файл

@ -8,10 +8,10 @@ git-cvsimport - Import a CVS repository into git
SYNOPSIS SYNOPSIS
-------- --------
'git-cvsimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [verse]
[ -d <CVSROOT> ] [ -p <options-for-cvsps> ] 'git-cvsimport' [-o <branch-for-HEAD>] [-h] [-v] [-d <CVSROOT>] [-s <subst>]
[ -C <git_repository> ] [ -i ] [ -P <file> ] [ -k ] [-p <options-for-cvsps>] [-C <git_repository>] [-i] [-P <file>]
[ -s <subst> ] [ -m ] [ -M regex ] [ <CVS_module> ] [-m] [-M regex] [<CVS_module>]
DESCRIPTION DESCRIPTION

Просмотреть файл

@ -7,8 +7,9 @@ git-daemon - A really simple server for git repositories.
SYNOPSIS SYNOPSIS
-------- --------
[verse]
'git-daemon' [--verbose] [--syslog] [--inetd | --port=n] [--export-all] '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 DESCRIPTION
----------- -----------

Просмотреть файл

@ -53,7 +53,7 @@ If '--cached' is specified, it allows you to ask:
contents (the ones I'd write with a "git-write-tree") 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 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 *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 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 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 `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 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" 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 and "is still dirty in the working directory" together. You can always

Просмотреть файл

@ -8,7 +8,9 @@ git-diff-tree - Compares the content and mode of blobs found via two tree object
SYNOPSIS 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 DESCRIPTION
----------- -----------
@ -62,7 +64,7 @@ separated with a single space are given.
-s:: -s::
By default, "git-diff-tree --stdin" shows differences, By default, "git-diff-tree --stdin" shows differences,
either in machine-readable form (without '-p') or in patch 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. only useful with '-v' flag.
-v:: -v::

Просмотреть файл

@ -67,7 +67,7 @@ $ git diff HEAD^ HEAD <3>
<1> instead of using the tip of the current branch, compare with the <1> instead of using the tip of the current branch, compare with the
tip of "test" branch. tip of "test" branch.
<2> instead of comparing with the tip of "test" branch, compare with <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". file "test".
<3> compare the version before the last commit and the last commit. <3> compare the version before the last commit and the last commit.
------------ ------------

Просмотреть файл

@ -8,7 +8,9 @@ git-format-patch - Prepare patches for e-mail submission.
SYNOPSIS 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 DESCRIPTION
----------- -----------
@ -96,7 +98,7 @@ git-format-patch -M -B origin::
See Also See Also
-------- --------
gitlink:git-am[1], gitlink:git-send-email gitlink:git-am[1], gitlink:git-send-email[1]
Author Author

Просмотреть файл

@ -8,7 +8,9 @@ git-fsck-objects - Verifies the connectivity and validity of the objects in the
SYNOPSIS 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 DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,7 +8,7 @@ git-grep - print lines matching a pattern
SYNOPSIS SYNOPSIS
-------- --------
'git-grep' <option>... <pattern> <path>... 'git-grep' [<option>...] <pattern> [<path>...]
DESCRIPTION DESCRIPTION
----------- -----------
@ -27,7 +27,6 @@ OPTIONS
The pattern to look for. The pattern to look for.
<path>...:: <path>...::
Optional paths to limit the set of files to be searched; Optional paths to limit the set of files to be searched;
passed to `git-ls-files`. passed to `git-ls-files`.

Просмотреть файл

@ -3,12 +3,12 @@ git-http-fetch(1)
NAME NAME
---- ----
git-http-fetch - Downloads a remote git repository via HTTP git-http-fetch - downloads a remote git repository via HTTP
SYNOPSIS 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 DESCRIPTION
----------- -----------

Просмотреть файл

@ -8,7 +8,7 @@ git-init-db - Creates an empty git repository
SYNOPSIS SYNOPSIS
-------- --------
'git-init-db' [--template=<template_directory>] 'git-init-db' [--template=<template_directory>] [--shared]
OPTIONS OPTIONS
@ -16,6 +16,9 @@ OPTIONS
--template=<template_directory>:: --template=<template_directory>::
Provide the directory in from which templates will be used. Provide the directory in from which templates will be used.
--shared::
Specify that the git repository is to be shared amongst several users.
DESCRIPTION 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 - environment variable then the sha1 directories are created underneath -
otherwise the default `$GIT_DIR/objects` directory is used. 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 EXAMPLES

Просмотреть файл

@ -74,7 +74,7 @@ OPTIONS
H:: cached H:: cached
M:: unmerged M:: unmerged
R:: removed/deleted R:: removed/deleted
C:: modifed/changed C:: modified/changed
K:: to be killed K:: to be killed
? other ? other

Просмотреть файл

@ -46,7 +46,7 @@ base-name::
output of the command. output of the command.
--stdout:: --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. .pack file) out to the standard output.
--window and --depth:: --window and --depth::

Просмотреть файл

@ -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 actually the section and the key separated by a dot, and the value will be
escaped. 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 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). (see EXAMPLES).
This command will fail if This command will fail if

Просмотреть файл

@ -8,18 +8,19 @@ git-rev-list - Lists commit objects in reverse chronological order
SYNOPSIS SYNOPSIS
-------- --------
[verse]
'git-rev-list' [ \--max-count=number ] 'git-rev-list' [ \--max-count=number ]
[ \--max-age=timestamp ] [ \--max-age=timestamp ]
[ \--min-age=timestamp ] [ \--min-age=timestamp ]
[ \--sparse ] [ \--sparse ]
[ \--no-merges ] [ \--no-merges ]
[ \--all ] [ \--all ]
[ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] | ] [ [ \--merge-order [ \--show-breaks ] ] | [ \--topo-order ] ]
[ \--parents ] [ \--parents ]
[ \--objects [ \--unpacked ] ] [ \--objects [ \--unpacked ] ]
[ \--pretty | \--header | ] [ \--pretty | \--header ]
[ \--bisect ] [ \--bisect ]
<commit>... [ \-- <paths>... ] <commit>... [ \-- <paths>... ]
DESCRIPTION DESCRIPTION
----------- -----------
@ -129,7 +130,7 @@ the marked commit in the list.
+ +
Commits marked with (^) are not parents of the immediately preceding commit. Commits marked with (^) are not parents of the immediately preceding commit.
These "breaks" represent necessary discontinuities implied by trying to 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. `--show-breaks` is only valid if `--merge-order` is also specified.

Просмотреть файл

@ -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 displayed, indented N places. If a commit is on the I-th
branch, the I-th indentation character shows a '+' sign; branch, the I-th indentation character shows a '+' sign;
otherwise it shows a space. Each commit shows a short name that 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" The following example shows three branches, "master", "fixes"
and "mhf": and "mhf":

Просмотреть файл

@ -11,7 +11,7 @@ SYNOPSIS
-------- --------
'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ] 'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
[ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev] [ -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 ] [ -s start_chg ] [ -m ] [ -M regex ]
<SVN_repository_URL> [ <path> ] <SVN_repository_URL> [ <path> ]
@ -40,17 +40,17 @@ OPTIONS
-s <start_rev>:: -s <start_rev>::
Start importing at this SVN change number. The default is 1. 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:: -i::
Import-only: don't perform a checkout after importing. This option Import-only: don't perform a checkout after importing. This option
ensures the working directory and index remain untouched and will ensures the working directory and index remain untouched and will
not create them if they do not exist. not create them if they do not exist.
-t <trunk_subdir>:: -T <trunk_subdir>::
Name the SVN trunk. Default "trunk". Name the SVN trunk. Default "trunk".
-T <tag_subdir>:: -t <tag_subdir>::
Name the SVN subdirectory for tags. Default "tags". Name the SVN subdirectory for tags. Default "tags".
-b <branch_subdir>:: -b <branch_subdir>::

Просмотреть файл

@ -422,7 +422,7 @@ gitlink:git-rev-parse[1]::
gitlink:git-send-email[1]:: gitlink:git-send-email[1]::
Send patch e-mails out of "format-patch --mbox" output. 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. Read and modify symbolic refs.
gitlink:git-stripspace[1]:: gitlink:git-stripspace[1]::

Просмотреть файл

@ -19,7 +19,7 @@ hash::
In git's context, synonym to object name. In git's context, synonym to object name.
object database:: 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/`. by its object name. The objects usually live in `$GIT_DIR/objects/`.
blob object:: blob object::

Просмотреть файл

@ -24,7 +24,7 @@ Then do
git bisect bad master <- mark "master" as the bad state git bisect bad master <- mark "master" as the bad state
git bisect good ORIG_HEAD <- mark ORIG_HEAD as good (or git bisect good ORIG_HEAD <- mark ORIG_HEAD as good (or
whatever other known-good 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 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 the mid-point between those two commits are, and check that state out as

Просмотреть файл

@ -21,7 +21,7 @@ outside world but sometimes useful for private repository.
. You can be using `objects/info/alternates` mechanism, or . You can be using `objects/info/alternates` mechanism, or
`$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow' `$GIT_ALTERNATE_OBJECT_DIRECTORIES` mechanism to 'borrow'
objects from other object stores. A repository with this kind 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 use with dumb transports but otherwise is OK as long as
`objects/info/alternates` points at the right object stores `objects/info/alternates` points at the right object stores
it borrows from. it borrows from.
@ -106,7 +106,7 @@ info/refs::
up-to-date if the repository is published for dumb up-to-date if the repository is published for dumb
transports. The `git-receive-pack` command, which is transports. The `git-receive-pack` command, which is
run on a remote repository when you `git push` into it, 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:: info/grafts::
This file records fake commit ancestry information, to This file records fake commit ancestry information, to

Просмотреть файл

@ -55,7 +55,7 @@ all:
# Define USE_STDEV below if you want git to care about the underlying device # Define USE_STDEV below if you want git to care about the underlying device
# change being considered an inode change from the update-cache perspective. # change being considered an inode change from the update-cache perspective.
GIT_VERSION = 1.0.6 GIT_VERSION = 1.0.7
# CFLAGS and LDFLAGS are for the users to override from the command line. # CFLAGS and LDFLAGS are for the users to override from the command line.

Просмотреть файл

@ -1588,7 +1588,7 @@ static int try_create_file(const char *path, unsigned int mode, const char *buf,
if (S_ISLNK(mode)) if (S_ISLNK(mode))
return symlink(buf, path); 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) if (fd < 0)
return -1; return -1;
while (size) { while (size) {
@ -1635,6 +1635,7 @@ static void create_one_file(const char *path, unsigned mode, const char *buf, un
} }
if (errno != EEXIST) if (errno != EEXIST)
break; break;
++nr;
} }
} }
die("unable to write file %s mode %o", path, mode); die("unable to write file %s mode %o", path, mode);

Просмотреть файл

@ -409,8 +409,7 @@ int git_config_set_multivar(const char* key, const char* value,
const char* value_regex, int multi_replace) const char* value_regex, int multi_replace)
{ {
int i; int i;
struct stat st; int fd, in_fd;
int fd;
char* config_filename = strdup(git_path("config")); char* config_filename = strdup(git_path("config"));
char* lock_file = strdup(git_path("config.lock")); char* lock_file = strdup(git_path("config.lock"));
const char* last_dot = strrchr(key, '.'); 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 .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); 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 nothing to unset, error out */
if (value == NULL) { if (value == NULL) {
close(fd); close(fd);
@ -471,7 +478,7 @@ int git_config_set_multivar(const char* key, const char* value,
store_write_section(fd, key); store_write_section(fd, key);
store_write_pair(fd, key, value); store_write_pair(fd, key, value);
} else{ } else{
int in_fd; struct stat st;
char* contents; char* contents;
int i, copy_begin, copy_end, new_line = 0; 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; return 5;
} }
in_fd = open(config_filename, O_RDONLY, 0666); fstat(in_fd, &st);
contents = mmap(NULL, st.st_size, PROT_READ, contents = mmap(NULL, st.st_size, PROT_READ,
MAP_PRIVATE, in_fd, 0); MAP_PRIVATE, in_fd, 0);
close(in_fd); close(in_fd);

4
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 * 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.. * unless we already have a mday..
* *
* IOW, 01 Apr 05 parses as "April 1st, 2005". * IOW, 01 Apr 05 parses as "April 1st, 2005".
@ -640,7 +640,7 @@ unsigned long approxidate(const char *date)
} }
if (number > 0 && number < 32) if (number > 0 && number < 32)
tm.tm_mday = number; 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--; tm.tm_year--;
return mktime(&tm); return mktime(&tm);
} }

Просмотреть файл

@ -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 /* We come here with ce pointing at stage 1
* (original tree) and ac[1] pointing at stage * (original tree) and ac[1] pointing at stage
* 3 (unmerged). show-modified with * 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 * file is deleted but reports true if work
* tree does not have it, in which case we * tree does not have it, in which case we
* fall through to report the unmerged state. * fall through to report the unmerged state.

2
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 * so it is safe for us to do this here. Also
* it does not smudge active_cache or active_nr * it does not smudge active_cache or active_nr
* when it fails, so we do not have to worry about * when it fails, so we do not have to worry about
* cleaning it up oufselves either. * cleaning it up ourselves either.
*/ */
read_cache(); read_cache();
} }

Просмотреть файл

@ -60,7 +60,7 @@ static void remove_subtree(const char *path)
static int create_file(const char *path, unsigned int mode) static int create_file(const char *path, unsigned int mode)
{ {
mode = (mode & 0100) ? 0777 : 0666; 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) static int write_entry(struct cache_entry *ce, const char *path, struct checkout *state)

Просмотреть файл

@ -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 * enqueued, enqueuing the commit in a list of pending commits, in latest
* commit date first order. * 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 * 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 * 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 * parents of the commit being visited. The divided portions are then injected

Просмотреть файл

@ -47,7 +47,7 @@ static int finish_pack(const char *pack_tmp_name, const char *me)
if (retval < 0) { if (retval < 0) {
if (errno == EINTR) if (errno == EINTR)
continue; continue;
error("waitpid failed (%s)", strerror(retval)); error("waitpid failed (%s)", strerror(errno));
goto error_die; goto error_die;
} }
if (WIFSIGNALED(status)) { if (WIFSIGNALED(status)) {

Просмотреть файл

@ -148,7 +148,7 @@ esac
if [ -f "$GIT_DIR/MERGE_HEAD" ]; then if [ -f "$GIT_DIR/MERGE_HEAD" ]; then
echo "#" 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 "# If this is not correct, please remove the file"
echo "# $GIT_DIR/MERGE_HEAD" echo "# $GIT_DIR/MERGE_HEAD"
echo "# and try again" echo "# and try again"
@ -165,6 +165,7 @@ then
then then
pick_author_script=' pick_author_script='
/^author /{ /^author /{
s/'\''/'\''\\'\'\''/g
h h
s/^author \([^<]*\) <[^>]*> .*$/\1/ s/^author \([^<]*\) <[^>]*> .*$/\1/
s/'\''/'\''\'\'\''/g s/'\''/'\''\'\'\''/g

Просмотреть файл

@ -63,6 +63,8 @@ extern char *gitstrcasestr(const char *haystack, const char *needle);
static inline void *xmalloc(size_t size) static inline void *xmalloc(size_t size)
{ {
void *ret = malloc(size); void *ret = malloc(size);
if (!ret && !size)
ret = malloc(1);
if (!ret) if (!ret)
die("Out of memory, malloc failed"); die("Out of memory, malloc failed");
return ret; return ret;
@ -71,6 +73,8 @@ static inline void *xmalloc(size_t size)
static inline void *xrealloc(void *ptr, size_t size) static inline void *xrealloc(void *ptr, size_t size)
{ {
void *ret = realloc(ptr, size); void *ret = realloc(ptr, size);
if (!ret && !size)
ret = realloc(ptr, 1);
if (!ret) if (!ret)
die("Out of memory, realloc failed"); die("Out of memory, realloc failed");
return ret; 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) static inline void *xcalloc(size_t nmemb, size_t size)
{ {
void *ret = calloc(nmemb, size); void *ret = calloc(nmemb, size);
if (!ret && (!nmemb || !size))
ret = calloc(1, 1);
if (!ret) if (!ret)
die("Out of memory, calloc failed"); die("Out of memory, calloc failed");
return ret; return ret;

Просмотреть файл

@ -188,11 +188,20 @@ esac
reflist=$(get_remote_refs_for_fetch "$@") reflist=$(get_remote_refs_for_fetch "$@")
if test "$tags" if test "$tags"
then then
taglist=$(git-ls-remote --tags "$remote" | taglist=$(IFS=" " &&
sed -e ' git-ls-remote --tags "$remote" |
/\^/d while read sha1 name
s/^[^ ]* // do
s/.*/.&:&/') 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 if test "$#" -gt 1
then then
# remote URL plus explicit refspecs; we need to merge them. # remote URL plus explicit refspecs; we need to merge them.

Просмотреть файл

@ -173,6 +173,7 @@ titleScript='
whosepatchScript=' whosepatchScript='
/^author /{ /^author /{
s/'\''/'\''\\'\'\''/g
s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p s/author \(.*>\) \(.*\)$/au='\''\1'\'' ad='\''\2'\''/p
q q
}' }'

Просмотреть файл

@ -82,7 +82,7 @@ case "${1:-.}${2:-.}${3:-.}" in
expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$orig expr "$sz0" \< "$sz1" \* 2 >/dev/null || : >$orig
;; ;;
*) *)
echo "Auto-merging $4." echo "Auto-merging $4"
orig=`git-unpack-file $1` orig=`git-unpack-file $1`
;; ;;
esac esac
@ -107,7 +107,7 @@ case "${1:-.}${2:-.}${3:-.}" in
fi fi
if [ $ret -ne 0 ]; then if [ $ret -ne 0 ]; then
echo "ERROR: Merge conflict in $4." echo "ERROR: Merge conflict in $4"
exit 1 exit 1
fi fi
exec git-update-index -- "$4" exec git-update-index -- "$4"

Просмотреть файл

@ -3,7 +3,7 @@
USAGE='[--mixed | --soft | --hard] [<commit-ish>]' USAGE='[--mixed | --soft | --hard] [<commit-ish>]'
. git-sh-setup . git-sh-setup
tmp=/var/tmp/reset.$$ tmp=${GIT_DIR}/reset.$$
trap 'rm -f $tmp-*' 0 1 2 3 15 trap 'rm -f $tmp-*' 0 1 2 3 15
reset_type=--mixed reset_type=--mixed

Просмотреть файл

@ -96,8 +96,10 @@ sub new {
sub conn { sub conn {
my $self = shift; my $self = shift;
my $repo = $self->{'fullrep'}; 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; die "SVN connection to $repo: $!\n" unless defined $s;
$self->{'svn'} = $s; $self->{'svn'} = $s;
$self->{'repo'} = $repo; $self->{'repo'} = $repo;

5
git.c
Просмотреть файл

@ -244,6 +244,11 @@ int main(int argc, char **argv, char **envp)
for (i = 1; i < argc; i++) { for (i = 1; i < argc; i++) {
char *arg = argv[i]; char *arg = argv[i];
if (!strcmp(arg, "help")) {
show_help = 1;
continue;
}
if (strncmp(arg, "--", 2)) if (strncmp(arg, "--", 2))
break; break;

Просмотреть файл

@ -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 * 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 * a identification line
*/ */
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {

Просмотреть файл

@ -169,7 +169,7 @@ static int excluded_1(const char *pathname,
} }
else { else {
/* match with FNM_PATHNAME: /* match with FNM_PATHNAME:
* exclude has base (baselen long) inplicitly * exclude has base (baselen long) implicitly
* in front of it. * in front of it.
*/ */
int baselen = x->baselen; int baselen = x->baselen;

Просмотреть файл

@ -119,7 +119,7 @@ static unsigned long write_one(struct sha1file *f,
return offset; return offset;
e->offset = offset; e->offset = offset;
offset += write_object(f, e); 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) if (e->delta)
offset = write_one(f, e->delta, offset); offset = write_one(f, e->delta, offset);
return offset; return offset;

Просмотреть файл

@ -6,7 +6,7 @@ static const char git_config_set_usage[] =
static char* key = NULL; static char* key = NULL;
static char* value = NULL; static char* value = NULL;
static regex_t* regex = NULL; static regex_t* regexp = NULL;
static int do_all = 0; static int do_all = 0;
static int do_not_match = 0; static int do_not_match = 0;
static int seen = 0; static int seen = 0;
@ -14,9 +14,9 @@ static int seen = 0;
static int show_config(const char* key_, const char* value_) static int show_config(const char* key_, const char* value_)
{ {
if (!strcmp(key_, key) && if (!strcmp(key_, key) &&
(regex == NULL || (regexp == NULL ||
(do_not_match ^ (do_not_match ^
!regexec(regex, value_, 0, NULL, 0)))) { !regexec(regexp, value_, 0, NULL, 0)))) {
if (do_all) { if (do_all) {
printf("%s\n", value_); printf("%s\n", value_);
return 0; return 0;
@ -46,8 +46,8 @@ static int get_value(const char* key_, const char* regex_)
regex_++; regex_++;
} }
regex = (regex_t*)malloc(sizeof(regex_t)); regexp = (regex_t*)malloc(sizeof(regex_t));
if (regcomp(regex, regex_, REG_EXTENDED)) { if (regcomp(regexp, regex_, REG_EXTENDED)) {
fprintf(stderr, "Invalid pattern: %s\n", regex_); fprintf(stderr, "Invalid pattern: %s\n", regex_);
return -1; return -1;
} }
@ -59,9 +59,9 @@ static int get_value(const char* key_, const char* regex_)
free(value); free(value);
} }
free(key); free(key);
if (regex) { if (regexp) {
regfree(regex); regfree(regexp);
free(regex); free(regexp);
} }
if (do_all) if (do_all)

Просмотреть файл

@ -9,9 +9,6 @@ This test tries pathnames with funny characters in the working
tree, index, and tree objects. 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 . ./test-lib.sh
p0='no-funny' p0='no-funny'
@ -27,6 +24,12 @@ EOF
cat >"$p1" "$p0" cat >"$p1" "$p0"
echo 'Foo Bar Baz' >"$p2" 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 echo 'just space
no-funny' >expected no-funny' >expected
test_expect_success 'git-ls-files no-funny' \ test_expect_success 'git-ls-files no-funny' \

Просмотреть файл

@ -26,6 +26,14 @@ rm -f path1
test_expect_success \ test_expect_success \
'git-diff-files -p after editing work tree.' \ 'git-diff-files -p after editing work tree.' \
'git-diff-files -p >current' '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 cat >expected <<\EOF
diff --git a/path0 b/path0 diff --git a/path0 b/path0
old mode 100644 old mode 100644

Просмотреть файл

@ -15,11 +15,21 @@ test_expect_success \
tree=`git-write-tree` && tree=`git-write-tree` &&
echo $tree' echo $tree'
test_expect_success \ if [ "$(git repo-config --get core.filemode)" = false ]
'chmod' \ then
'chmod +x rezrov && say 'filemode disabled on the filesystem, using update-index --chmod=+x'
git-update-index rezrov && test_expect_success \
git-diff-index $tree >current' '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='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"

Просмотреть файл

@ -31,7 +31,12 @@ test_expect_success setup \
test_expect_success apply \ test_expect_success apply \
'git-apply --index --stat --summary --apply test-patch' 'git-apply --index --stat --summary --apply test-patch'
test_expect_success validate \ if [ "$(git repo-config --get core.filemode)" = false ]
'test -f bar && ls -l bar | grep "^-..x......"' then
say 'filemode disabled on the filesystem'
else
test_expect_success validate \
'test -f bar && ls -l bar | grep "^-..x......"'
fi
test_done test_done

Просмотреть файл

@ -8,13 +8,6 @@ test_description='Tests git-rev-list --merge-order functionality'
. ./test-lib.sh . ./test-lib.sh
. ../t6000lib.sh # t6xxx specific functions . ../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 # test-case specific test function
check_adjacency() check_adjacency()
{ {
@ -114,6 +107,13 @@ test_output_expect_success 'rev-list has correct number of entries' 'git-rev-lis
19 19
EOF 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 ' ') 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 ' ') 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 ]' test_expect_success '--merge-order produces as many or fewer discontinuities' '[ $merge_order_adjacency_count -le $normal_adjacency_count ]'

Просмотреть файл

@ -195,7 +195,7 @@ test -d ../templates/blt || {
test=trash test=trash
rm -fr "$test" rm -fr "$test"
mkdir "$test" mkdir "$test"
cd "$test" cd "$test" || error "Cannot setup test environment"
"$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null || "$GIT_EXEC_PATH/git" init-db --template=../../templates/blt/ 2>/dev/null ||
error "cannot run git init-db -- have you built things yet?" error "cannot run git init-db -- have you built things yet?"