Browse Source

Merge branch 'fixes'

maint
Junio C Hamano 19 years ago
parent
commit
d67c4af41f
  1. 5
      Documentation/asciidoc.conf
  2. 4
      Documentation/cvs-migration.txt
  3. 13
      Documentation/diff-format.txt
  4. 19
      Documentation/diff-options.txt
  5. 6
      Documentation/diffcore.txt
  6. 2
      Documentation/git-add.txt
  7. 2
      Documentation/git-apply.txt
  8. 2
      Documentation/git-applymbox.txt
  9. 15
      Documentation/git-archimport.txt
  10. 2
      Documentation/git-bisect.txt
  11. 2
      Documentation/git-branch.txt
  12. 2
      Documentation/git-cat-file.txt
  13. 2
      Documentation/git-cherry-pick.txt
  14. 4
      Documentation/git-clone-pack.txt
  15. 2
      Documentation/git-commit-tree.txt
  16. 23
      Documentation/git-rev-parse.txt
  17. 24
      clone-pack.c
  18. 2
      diff.h
  19. 2
      git-commit.sh
  20. 6
      git-fetch.sh
  21. 10
      index.c
  22. 2
      refs.c
  23. 21
      rev-list.c
  24. 1
      rev-parse.c
  25. 50
      upload-pack.c

5
Documentation/asciidoc.conf

@ -7,6 +7,9 @@ @@ -7,6 +7,9 @@
# Show GIT link as: <command>(<section>); if section is defined, else just show
# the command.

[attributes]
caret=^

ifdef::backend-docbook[]
[gitlink-inlinemacro]
{0%{target}}
@ -19,3 +22,5 @@ ifdef::backend-xhtml11[] @@ -19,3 +22,5 @@ ifdef::backend-xhtml11[]
[gitlink-inlinemacro]
<a href="{target}.html">{target}{0?({0})}</a>
endif::backend-xhtml11[]



4
Documentation/cvs-migration.txt

@ -24,7 +24,7 @@ The good news is that most people don't do that, and in fact most sane @@ -24,7 +24,7 @@ The good news is that most people don't do that, and in fact most sane
people think it's a bug in CVS that makes it tag (and check in changes)
one file at a time. So most projects you'll ever see will use CVS
'as if' it was sane. In which case you'll find it very easy indeed to
move over to Git.
move over to git.

First off: this is not a git tutorial. See
link:tutorial.html[Documentation/tutorial.txt] for how git
@ -229,7 +229,7 @@ does rename or copy would not show in the output, and if the @@ -229,7 +229,7 @@ does rename or copy would not show in the output, and if the
"o-file.c", it would find the commit that changed the statement
when it was in "o-file.c".

NOTE: The current versions of "git-diff-tree -C" is not eager
NOTE: The current version of "git-diff-tree -C" is not eager
enough to find copies, and it will miss the fact that a-file.c
was created by copying o-file.c unless o-file.c was somehow
changed in the same commit.

13
Documentation/diff-format.txt

@ -1,8 +1,8 @@ @@ -1,8 +1,8 @@
The output format from "git-diff-index", "git-diff-tree" and
"git-diff-files" are very similar.

These commands all compare two sets of things; what are
compared are different:
These commands all compare two sets of things; what is
compared differs:

git-diff-index <tree-ish>::
compares the <tree-ish> and the files on the filesystem.
@ -46,7 +46,7 @@ That is, from the left to the right: @@ -46,7 +46,7 @@ That is, from the left to the right:
. path for "dst"; only exists for C or R.
. an LF or a NUL when '-z' option is used, to terminate the record.

<sha1> is shown as all 0's if new is a file on the filesystem
<sha1> is shown as all 0's if a file is new on the filesystem
and it is out of sync with the cache.

Example:
@ -91,7 +91,7 @@ For a path that is added, removed, or modified, @@ -91,7 +91,7 @@ For a path that is added, removed, or modified,
where:

<old|new>-file:: are files GIT_EXTERNAL_DIFF can use to read the
contents of <old|ne>,
contents of <old|new>,
<old|new>-hex:: are the 40-hexdigit SHA1 hashes,
<old|new>-mode:: are the octal representation of the file modes.

@ -121,12 +121,11 @@ The `a/` and `b/` filenames are the same unless rename/copy is @@ -121,12 +121,11 @@ The `a/` and `b/` filenames are the same unless rename/copy is
involved. Especially, even for a creation or a deletion,
`/dev/null` is _not_ used in place of `a/` or `b/` filenames.
+
When rename/copy is involved, `file1` and `file2` shows the
When rename/copy is involved, `file1` and `file2` show the
name of the source file of the rename/copy and the name of
the file that rename/copy produces, respectively.

2. It is followed by extended header lines that are one or
more of:
2. It is followed by one or more extended header lines:

old mode <mode>
new mode <mode>

19
Documentation/diff-options.txt

@ -5,9 +5,8 @@ @@ -5,9 +5,8 @@
Synonym for "-p".

-r::
Look recursively in subdirectories; this flag does not
mean anything to commands other than "git-diff-tree";
other diff commands always look at all the subdirectories.
Look recursively in subdirectories; only used by "git-diff-tree";
other diff commands always work recursively.

-z::
\0 line termination on output
@ -28,26 +27,26 @@ @@ -28,26 +27,26 @@
Detect copies as well as renames.

--find-copies-harder::
By default, -C option finds copies only if the original
file of the copy was modified in the same changeset for
performance reasons. This flag makes the command
For performance reasons, by default, -C option finds copies only
if the original file of the copy was modified in the same
changeset. This flag makes the command
inspect unmodified files as candidates for the source of
copy. This is a very expensive operation for large
projects, so use it with caution.

-l<num>::
-M and -C options require O(n^2) processing time where n
in the number of potential rename/copy targets. This
is the number of potential rename/copy targets. This
option prevents rename/copy detection from running if
the number of rename/copy targets exceed the specified
the number of rename/copy targets exceeds the specified
number.

-S<string>::
Look for differences that contains the change in <string>.
Look for differences that contain the change in <string>.

--pickaxe-all::
When -S finds a change, show all the changes in that
changeset, not just the files that contains the change
changeset, not just the files that contain the change
in <string>.

-O<orderfile>::

6
Documentation/diffcore.txt

@ -177,7 +177,7 @@ diffcore-merge-broken @@ -177,7 +177,7 @@ diffcore-merge-broken
---------------------

This transformation is used to merge filepairs broken by
diffcore-break, and were not transformed into rename/copy by
diffcore-break, and not transformed into rename/copy by
diffcore-rename, back into a single modification. This always
runs when diffcore-break is used.

@ -206,10 +206,10 @@ like these: @@ -206,10 +206,10 @@ like these:
* -B/60 (the same as above, since diffcore-break defaults to 50%).

Note that earlier implementation left a broken pair as a separate
creation and deletion patches. This was unnecessary hack and
creation and deletion patches. This was an unnecessary hack and
the latest implementation always merges all the broken pairs
back into modifications, but the resulting patch output is
formatted differently to still let the reviewing easier for such
formatted differently for easier review in case of such
a complete rewrite by showing the entire contents of old version
prefixed with '-', followed by the entire contents of new
version prefixed with '+'.

2
Documentation/git-add.txt

@ -11,7 +11,7 @@ SYNOPSIS @@ -11,7 +11,7 @@ SYNOPSIS

DESCRIPTION
-----------
A simple wrapper to git-update-index to add files to the cache for people used
A simple wrapper for git-update-index to add files to the cache for people used
to do "cvs add".

OPTIONS

2
Documentation/git-apply.txt

@ -13,7 +13,7 @@ SYNOPSIS @@ -13,7 +13,7 @@ SYNOPSIS

DESCRIPTION
-----------
Reads supplied diff output and applies it on a GIT index file
Reads supplied diff output and applies it on a git index file
and a work tree.

OPTIONS

2
Documentation/git-applymbox.txt

@ -22,7 +22,7 @@ OPTIONS @@ -22,7 +22,7 @@ OPTIONS
-q::
Apply patches interactively. The user will be given
opportunity to edit the log message and the patch before
attempting to apply patch in each e-mail message.
attempting to apply it.

-k::
Usually the program 'cleans up' the Subject: header line

15
Documentation/git-archimport.txt

@ -20,20 +20,23 @@ it will just import it as a regular commit. If it can find it, it will mark it @@ -20,20 +20,23 @@ 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).

The script expects you to provide the key roots where it can start the import
from an 'initial import' or 'tag' type of Arch commit. It will follow and import
new branches within the provided roots.
from an 'initial import' or 'tag' type of Arch commit. It will follow and
import new branches within the provided roots.

It expects to be dealing with one project only. If it sees
branches that have different roots, it will refuse to run. In that case, edit your
<archive/branch> parameters to define clearly the scope of the import.
branches that have different roots, it will refuse to run. In that case,
edit your <archive/branch> parameters to define clearly the scope of the
import.

`git-archimport` uses `tla` extensively in the background to access the Arch repository.
`git-archimport` uses `tla` extensively in the background to access the
Arch repository.
Make sure you have a recent version of `tla` available in the path. `tla` must
know about the repositories you pass to `git-archimport`.

For the initial import `git-archimport` expects to find itself in an empty
directory. To follow the development of a project that uses Arch, rerun
`git-archimport` with the same parameters as the initial import to perform incremental imports.
`git-archimport` with the same parameters as the initial import to perform
incremental imports.

MERGES
------

2
Documentation/git-bisect.txt

@ -76,7 +76,7 @@ During the bisection process, you can say @@ -76,7 +76,7 @@ During the bisection process, you can say

to see the currently remaining suspects in `gitk`.

The good/bad you told the command is logged, and `git bisect
The good/bad input is logged, and `git bisect
log` shows what you have done so far. You can truncate its
output somewhere and save it in a file, and run


2
Documentation/git-branch.txt

@ -23,7 +23,7 @@ OPTIONS @@ -23,7 +23,7 @@ OPTIONS
The name of the branch to create.

start-point::
Where to make the branch; defaults to HEAD.
Where to create the branch; defaults to HEAD.

Author
------

2
Documentation/git-cat-file.txt

@ -32,7 +32,7 @@ OPTIONS @@ -32,7 +32,7 @@ OPTIONS

<type>::
Typically this matches the real type of <object> but asking
for a type that can trivially dereferenced from the given
for a type that can trivially be dereferenced from the given
<object> is also permitted. An example is to ask for a
"tree" with <object> being a commit object that contains it,
or to ask for a "blob" with <object> being a tag object that

2
Documentation/git-cherry-pick.txt

@ -22,7 +22,7 @@ OPTIONS @@ -22,7 +22,7 @@ OPTIONS
Commit to cherry-pick.

-r::
Usuall the command appends which commit was
Usually the command appends which commit was
cherry-picked after the original commit message when
making a commit. This option, '--replay', causes it to
use the original commit message intact. This is useful

4
Documentation/git-clone-pack.txt

@ -26,8 +26,8 @@ OPTIONS @@ -26,8 +26,8 @@ OPTIONS

--exec=<git-upload-pack>::
Use this to specify the path to 'git-upload-pack' on the
remote side, if is not found on your $PATH.
Installations of sshd ignores the user's environment
remote side, if it is not found on your $PATH.
Installations of sshd ignore the user's environment
setup scripts for login shells (e.g. .bash_profile) and
your privately installed GIT may not be found on the system
default $PATH. Another workaround suggested is to set

2
Documentation/git-commit-tree.txt

@ -36,7 +36,7 @@ OPTIONS @@ -36,7 +36,7 @@ OPTIONS
An existing tree object

-p <parent commit>::
Each '-p' indicates a the id of a parent commit object.
Each '-p' indicates the id of a parent commit object.

Commit Information

23
Documentation/git-rev-parse.txt

@ -54,13 +54,13 @@ OPTIONS @@ -54,13 +54,13 @@ OPTIONS
`git-diff-\*`).

--not::
When showing object names, prefix them with '^' and
strip '^' prefix from the object names that already have
When showing object names, prefix them with '{caret}' and
strip '{caret}' prefix from the object names that already have
one.

--symbolic::
Usually the object names are output in SHA1 form (with
possible '^' prefix); this option makes them output in a
possible '{caret}' prefix); this option makes them output in a
form as close to the original input as possible.


@ -93,22 +93,23 @@ what is called an 'extended SHA1' syntax. @@ -93,22 +93,23 @@ what is called an 'extended SHA1' syntax.
happen to have both heads/master and tags/master, you can
explicitly say 'heads/master' to tell GIT which one you mean.

* A suffix '^' to a revision parameter means the first parent of
that commit object. '^<n>' means the <n>th parent (i.e.
'rev^'
is equivalent to 'rev^1'). As a special rule,
'rev^0' means the commit itself and is used when 'rev' is the
* A suffix '{caret}' to a revision parameter means the first parent of
that commit object. '{caret}<n>' means the <n>th parent (i.e.
'rev{caret}'
is equivalent to 'rev{caret}1'). As a special rule,
'rev{caret}0' means the commit itself and is used when 'rev' is the
object name of a tag object that refers to a commit object.

* A suffix '~<n>' to a revision parameter means the commit
object that is the <n>th generation grand-parent of the named
commit object, following only the first parent. I.e. rev~3 is
equivalent to rev^^^ which is equivalent to rev^1^1^1.
equivalent to rev{caret}{caret}{caret} which is equivalent to\
rev{caret}1{caret}1{caret}1.

'git-rev-parse' also accepts a prefix '^' to revision parameter,
'git-rev-parse' also accepts a prefix '{caret}' to revision parameter,
which is passed to 'git-rev-list'. Two revision parameters
concatenated with '..' is a short-hand for writing a range
between them. I.e. 'r1..r2' is equivalent to saying '^r1 r2'
between them. I.e. 'r1..r2' is equivalent to saying '{caret}r1 r2'


Author

24
clone-pack.c

@ -51,6 +51,7 @@ static void write_refs(struct ref *ref) @@ -51,6 +51,7 @@ static void write_refs(struct ref *ref)
struct ref *head = NULL, *head_ptr, *master_ref;
char *head_path;

/* Upload-pack must report HEAD first */
if (!strcmp(ref->name, "HEAD")) {
head = ref;
ref = ref->next;
@ -60,17 +61,21 @@ static void write_refs(struct ref *ref) @@ -60,17 +61,21 @@ static void write_refs(struct ref *ref)
while (ref) {
if (is_master(ref))
master_ref = ref;
if (head && !memcmp(ref->old_sha1, head->old_sha1, 20)) {
if (!head_ptr || ref == master_ref)
head_ptr = ref;
}
if (head &&
!memcmp(ref->old_sha1, head->old_sha1, 20) &&
!strncmp(ref->name, "refs/heads/",11) &&
(!head_ptr || ref == master_ref))
head_ptr = ref;

write_one_ref(ref);
ref = ref->next;
}
if (!head)
if (!head) {
fprintf(stderr, "No HEAD in remote.\n");
return;
}

head_path = git_path("HEAD");
head_path = strdup(git_path("HEAD"));
if (!head_ptr) {
/*
* If we had a master ref, and it wasn't HEAD, we need to undo the
@ -82,6 +87,7 @@ static void write_refs(struct ref *ref) @@ -82,6 +87,7 @@ static void write_refs(struct ref *ref)
unlink(head_path);
}
write_one_ref(head);
free(head_path);
return;
}

@ -89,13 +95,15 @@ static void write_refs(struct ref *ref) @@ -89,13 +95,15 @@ static void write_refs(struct ref *ref)
if (master_ref)
return;

fprintf(stderr, "Setting HEAD to %s\n", head_ptr->name);

/*
* Uhhuh. Other end didn't have master. We start HEAD off with
* the first branch with the same value.
*/
unlink(head_path);
if (symlink(head_ptr->name, head_path) < 0)
if (create_symref(head_path, head_ptr->name) < 0)
die("unable to link HEAD to %s", head_ptr->name);
free(head_path);
}

static int clone_pack(int fd[2], int nr_match, char **match)

2
diff.h

@ -103,7 +103,7 @@ extern void diff_flush(struct diff_options*); @@ -103,7 +103,7 @@ extern void diff_flush(struct diff_options*);
/* these are not diff-raw status letters proper, but used by
* diffcore-filter insn to specify additional restrictions.
*/
#define DIFF_STATUS_FILTER_AON 'A'
#define DIFF_STATUS_FILTER_AON '*'
#define DIFF_STATUS_FILTER_BROKEN 'B'

#endif /* DIFF_H */

2
git-commit.sh

@ -198,7 +198,7 @@ else @@ -198,7 +198,7 @@ else
PARENTS=""
fi
git-status >>.editmsg
if [ "$?" != "0" -a ! -f $GIT_DIR/MERGE_HEAD ]
if [ "$?" != "0" -a ! -f "$GIT_DIR/MERGE_HEAD" ]
then
rm -f .editmsg
git-status

6
git-fetch.sh

@ -49,7 +49,7 @@ rsync_slurped_objects= @@ -49,7 +49,7 @@ rsync_slurped_objects=

if test "" = "$append"
then
: >$GIT_DIR/FETCH_HEAD
: >"$GIT_DIR/FETCH_HEAD"
fi

append_fetch_head () {
@ -86,11 +86,11 @@ append_fetch_head () { @@ -86,11 +86,11 @@ append_fetch_head () {
if git-cat-file commit "$head_" >/dev/null 2>&1
then
headc_=$(git-rev-parse --verify "$head_^0") || exit
echo "$headc_ $not_for_merge_ $note_" >>$GIT_DIR/FETCH_HEAD
echo "$headc_ $not_for_merge_ $note_" >>"$GIT_DIR/FETCH_HEAD"
echo >&2 "* committish: $head_"
echo >&2 " $note_"
else
echo "$head_ not-for-merge $note_" >>$GIT_DIR/FETCH_HEAD
echo "$head_ not-for-merge $note_" >>"$GIT_DIR/FETCH_HEAD"
echo >&2 "* non-commit: $head_"
echo >&2 " $note_"
fi

10
index.c

@ -22,14 +22,16 @@ static void remove_lock_file_on_signal(int signo) @@ -22,14 +22,16 @@ static void remove_lock_file_on_signal(int signo)

int hold_index_file_for_update(struct cache_file *cf, const char *path)
{
int fd;
sprintf(cf->lockfile, "%s.lock", path);
cf->next = cache_file_list;
cache_file_list = cf;
if (!cf->next) {
fd = open(cf->lockfile, O_RDWR | O_CREAT | O_EXCL, 0666);
if (fd >=0 && !cf->next) {
cf->next = cache_file_list;
cache_file_list = cf;
signal(SIGINT, remove_lock_file_on_signal);
atexit(remove_lock_file);
}
return open(cf->lockfile, O_RDWR | O_CREAT | O_EXCL, 0666);
return fd;
}

int commit_index_file(struct cache_file *cf)

2
refs.c

@ -46,7 +46,7 @@ int validate_symref(const char *path) @@ -46,7 +46,7 @@ int validate_symref(const char *path)
len -= 4;
while (len && isspace(*buf))
buf++, len--;
if (len >= 5 && !memcmp("refs/", buffer, 5))
if (len >= 5 && !memcmp("refs/", buf, 5))
return 0;
return -1;
}

21
rev-list.c

@ -1,4 +1,5 @@ @@ -1,4 +1,5 @@
#include "cache.h"
#include "refs.h"
#include "tag.h"
#include "commit.h"
#include "tree.h"
@ -489,6 +490,22 @@ static void handle_one_commit(struct commit *com, struct commit_list **lst) @@ -489,6 +490,22 @@ static void handle_one_commit(struct commit *com, struct commit_list **lst)
commit_list_insert(com, lst);
}

/* for_each_ref() callback does not allow user data -- Yuck. */
static struct commit_list **global_lst;

static int include_one_commit(const char *path, const unsigned char *sha1)
{
struct commit *com = get_commit_reference(path, 0);
handle_one_commit(com, global_lst);
return 0;
}

static void handle_all(struct commit_list **lst)
{
global_lst = lst;
for_each_ref(include_one_commit);
global_lst = NULL;
}

int main(int argc, char **argv)
{
@ -542,6 +559,10 @@ int main(int argc, char **argv) @@ -542,6 +559,10 @@ int main(int argc, char **argv)
bisect_list = 1;
continue;
}
if (!strcmp(arg, "--all")) {
handle_all(&list);
continue;
}
if (!strcmp(arg, "--objects")) {
tag_objects = 1;
tree_objects = 1;

1
rev-parse.c

@ -32,6 +32,7 @@ static int revs_count = 0; @@ -32,6 +32,7 @@ static int revs_count = 0;
static int is_rev_argument(const char *arg)
{
static const char *rev_args[] = {
"--all",
"--bisect",
"--header",
"--max-age=",

50
upload-pack.c

@ -30,10 +30,18 @@ static void create_pack_file(void) @@ -30,10 +30,18 @@ static void create_pack_file(void)

if (!pid) {
int i;
int args = nr_has + nr_needs + 5;
char **argv = xmalloc(args * sizeof(char *));
char *buf = xmalloc(args * 45);
char **p = argv;
int args;
char **argv;
char *buf;
char **p;

if (MAX_NEEDS <= nr_needs)
args = nr_has + 10;
else
args = nr_has + nr_needs + 5;
argv = xmalloc(args * sizeof(char *));
buf = xmalloc(args * 45);
p = argv;

dup2(fd[1], 1);
close(0);
@ -41,10 +49,14 @@ static void create_pack_file(void) @@ -41,10 +49,14 @@ static void create_pack_file(void)
close(fd[1]);
*p++ = "git-rev-list";
*p++ = "--objects";
for (i = 0; i < nr_needs; i++) {
*p++ = buf;
memcpy(buf, sha1_to_hex(needs_sha1[i]), 41);
buf += 41;
if (MAX_NEEDS <= nr_needs)
*p++ = "--all";
else {
for (i = 0; i < nr_needs; i++) {
*p++ = buf;
memcpy(buf, sha1_to_hex(needs_sha1[i]), 41);
buf += 41;
}
}
for (i = 0; i < nr_has; i++) {
*p++ = buf;
@ -129,18 +141,24 @@ static int receive_needs(void) @@ -129,18 +141,24 @@ static int receive_needs(void)

needs = 0;
for (;;) {
unsigned char dummy[20], *sha1_buf;
len = packet_read_line(0, line, sizeof(line));
if (!len)
return needs;

/*
* This is purely theoretical right now: git-fetch-pack only
* ever asks for a single HEAD
*/
if (needs >= MAX_NEEDS)
die("I'm only doing a max of %d requests", MAX_NEEDS);
if (strncmp("want ", line, 5) || get_sha1_hex(line+5, needs_sha1[needs]))
die("git-upload-pack: protocol error, expected to get sha, not '%s'", line);
sha1_buf = dummy;
if (needs == MAX_NEEDS) {
fprintf(stderr,
"warning: supporting only a max of %d requests. "
"sending everything instead.\n",
MAX_NEEDS);
}
else if (needs < MAX_NEEDS)
sha1_buf = needs_sha1[needs];

if (strncmp("want ", line, 5) || get_sha1_hex(line+5, sha1_buf))
die("git-upload-pack: protocol error, "
"expected to get sha, not '%s'", line);
needs++;
}
}

Loading…
Cancel
Save