提交 f5f2c52b 编写于 作者: J Junio C Hamano

Merge branch 'master' of .

......@@ -8,6 +8,7 @@ ARTICLES += cvs-migration
ARTICLES += diffcore
ARTICLES += howto-index
ARTICLES += repository-layout
ARTICLES += hooks
# with their own formatting rules.
SP_ARTICLES = glossary howto/revert-branch-rebase
......
......@@ -64,6 +64,12 @@ OPTIONS
generated "Signed-off-by" line based on your committer
identity.
SEE ALSO
--------
link:git-applypatch.html[git-applypatch].
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
......
......@@ -16,6 +16,10 @@ Takes three files <msg>, <patch>, and <info> prepared from an
e-mail message by 'git-mailinfo', and creates a commit. It is
usually not necessary to use this command directly.
This command can run `applypatch-msg`, `pre-applypatch`, and
`post-applypatch` hooks. See link:hooks.html[hooks] for more
information.
OPTIONS
-------
......
......@@ -8,7 +8,7 @@ git-commit-script - Record your changes
SYNOPSIS
--------
'git commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] <file>...
'git commit' [-a] [-s] [-v] [(-c | -C) <commit> | -F <file> | -m <msg>] [-e] <file>...
DESCRIPTION
-----------
......@@ -17,6 +17,10 @@ Updates the index file for given paths, or all modified files if
VISUAL and EDITOR environment variables to edit the commit log
message.
This command can run `commit-msg`, `pre-commit`, and
`post-commit` hooks. See link:hooks.html[hooks] for more
information.
OPTIONS
-------
-a::
......@@ -47,8 +51,14 @@ OPTIONS
has a SP character immediately followed by a TAB
character.
-e::
The message taken from file with `-F`, command line with
`-m`, and from file with `-C` are usually used as the
commit log message unmodified. This option lets you
further edit the message taken from these sources.
<file>...::
Update specified paths in the index file.
Update specified paths in the index file before committing.
Author
......
......@@ -88,7 +88,7 @@ For an unmerged path, instead of recording a single mode/SHA1 pair,
the dircache records up to three such pairs; one from tree O in stage
1, A in stage 2, and B in stage 3. This information can be used by
the user (or the porcelain) to see what should eventually be recorded at the
path. (see read-cache for more information on state)
path. (see git-read-tree for more information on state)
Exclude Patterns
......@@ -180,7 +180,7 @@ An example:
See Also
--------
link:read-cache.html[read-cache]
link:git-read-tree.html[git-read-tree]
Author
......
......@@ -77,6 +77,12 @@ OPTIONS
<directory>::
The repository to sync into.
SEE ALSO
--------
link:git-send-pack.html[git-send-pack]
Author
------
Written by Linus Torvalds <torvalds@osdl.org>
......
......@@ -24,8 +24,27 @@ OPTIONS
-------
--force::
Update the info files even when they do not appear
stale.
Update the info files from scratch.
OUTPUT
------
Currently the command updates the following files. Please see
link:repository-layout.html[repository-layout] for description
of what they are for:
* objects/info/packs
* info/refs
* info/rev-cache
BUGS
----
When you remove an existing ref, the command fails to update
info/refs file unless `--force` flag is given.
Author
......
Hooks used by GIT
=================
v0.99.6, Sep 2005
Hooks are little scripts you can place in `$GIT_DIR/hooks`
directory to trigger action at certain points. When
`git-init-db` is run, a handful example hooks are copied in the
`hooks` directory of the new repository, but by default they are
all disabled. To enable a hook, make it executable with `chmod
+x`.
This document describes the currently defined hooks.
applypatch-msg
--------------
This hook is invoked by `git-applypatch` script, which is
typically invoked by `git-applymbox`. It takes a single
parameter, the name of the file that holds the proposed commit
log message. Exiting with non-zero status causes the
'git-applypatch' to abort before applying the patch.
The hook is allowed to edit the message file in place, and can
be used to normalize the message into some project standard
format (if the project has one). It can also be used to refuse
the commit after inspecting the message file.
The default applypatch-msg hook, when enabled, runs the
commit-msg hook, if the latter is enabled.
pre-applypatch
--------------
This hook is invoked by `git-applypatch` script, which is
typically invoked by `git-applymbox`. It takes no parameter,
and is invoked after the patch is applied, but before a commit
is made. Exiting with non-zero status causes the working tree
after application of the patch not committed.
It can be used to inspect the current working tree and refuse to
make a commit if it does not pass certain test.
The default pre-applypatch hook, when enabled, runs the
pre-commit hook, if the latter is enabled.
post-applypatch
---------------
This hook is invoked by `git-applypatch` script, which is
typically invoked by `git-applymbox`. It takes no parameter,
and is invoked after the patch is applied and a commit is made.
This hook is meant primarily for notification, and cannot affect
the outcome of `git-applypatch`.
pre-commit
----------
This hook is invoked by `git-commit-script`, and can be bypassed
with `--no-verify` option. It takes no parameter, and is
invoked before obtaining the proposed commit log message and
making a commit. Exiting with non-zero status from this script
causes the `git-commit-script` to abort.
The default pre-commit hook, when enabled, catches introduction
of lines with trailing whitespaces and aborts the commit when
a such line is found.
commit-msg
----------
This hook is invoked by `git-commit-script`, and can be bypassed
with `--no-verify` option. It takes a single parameter, the
name of the file that holds the proposed commit log message.
Exiting with non-zero status causes the `git-commit-script` to
abort.
The hook is allowed to edit the message file in place, and can
be used to normalize the message into some project standard
format (if the project has one). It can also be used to refuse
the commit after inspecting the message file.
The default commit-msg hook, when enabled, detects duplicate
Signed-off-by: lines, and aborts the commit when one is found.
post-commit
-----------
This hook is invoked by `git-commit-script`. It takes no
parameter, and is invoked after a commit is made.
This hook is meant primarily for notification, and cannot affect
the outcome of `git-commit-script`.
The default post-commit hook, when enabled, demonstrates how to
send out a commit notification e-mail.
update
------
This hook is invoked by `git-receive-pack`, which is invoked
when a `git push` is done against the repository. It takes
three parameters, name of the ref being updated, old object name
stored in the ref, and the new objectname to be stored in the
ref. Exiting with non-zero status from this hook prevents
`git-receive-pack` from updating the ref.
This can be used to prevent 'forced' update on certain refs by
making sure that the object name is a commit object that is a
descendant of the commit object named by the old object name.
Another use suggested on the mailing list is to use this hook to
implement access control which is finer grained than the one
based on filesystem group.
post-update
-----------
This hook is invoked by `git-receive-pack`, which is invoked
when a `git push` is done against the repository. It takes
variable number of parameters; each of which is the name of ref
that was actually updated.
This hook is meant primarily for notification, and cannot affect
the outcome of `git-receive-pack`.
The default post-update hook, when enabled, runs
`git-update-server-info` to keep the information used by dumb
transport up-to-date.
......@@ -672,9 +672,13 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
added++;
newlines--;
break;
/* We allow "\ No newline at end of file" */
/* We allow "\ No newline at end of file". Depending
* on locale settings when the patch was produced we
* don't know what this line looks like. The only
* thing we do know is that it begins with "\ ". */
case '\\':
if (len < 12 || memcmp(line, "\\ No newline", 12))
if (len < 12 || memcmp(line, "\\ ", 2))
return -1;
break;
}
......@@ -683,7 +687,7 @@ static int parse_fragment(char *line, unsigned long size, struct patch *patch, s
* it in the above loop because we hit oldlines == newlines == 0
* before seeing it.
*/
if (12 < size && !memcmp(line, "\\ No newline", 12))
if (12 < size && !memcmp(line, "\\ ", 2))
offset += linelen(line, size);
patch->lines_added += added;
......
......@@ -327,7 +327,7 @@ extern int get_ack(int fd, unsigned char *result_sha1);
extern struct ref **get_remote_heads(int in, struct ref **list, int nr_match, char **match);
extern struct packed_git *parse_pack_index(unsigned char *sha1);
extern struct packed_git *parse_pack_index_file(unsigned char *sha1,
extern struct packed_git *parse_pack_index_file(const unsigned char *sha1,
char *idx_path);
extern void prepare_packed_git(void);
......
......@@ -49,12 +49,12 @@ $SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC";
our($opt_h,$opt_v, $opt_T,
$opt_C,$opt_t, $opt_i);
$opt_C,$opt_t);
sub usage() {
print STDERR <<END;
Usage: ${\basename $0} # fetch/update GIT from Arch
[ -h ] [ -v ] [ -i ] [ -T ]
[ -h ] [ -v ] [ -T ]
[ -C GIT_repository ] [ -t tempdir ]
repository/arch-branch [ repository/arch-branch] ...
END
......@@ -173,21 +173,19 @@ foreach my $root (@arch_roots) {
## TODO cleanup irrelevant patches
## and put an initial import
## or a full tag
if ($opt_i) { # initial import
my $import = 0;
unless (-d '.git') { # initial import
if ($psets[0]{type} eq 'i' || $psets[0]{type} eq 't') {
print "Starting import from $psets[0]{id}\n";
`git-init-db`;
die $! if $?;
$import = 1;
} else {
die "Need to start from an import or a tag -- cannot use $psets[0]{id}";
}
`git-init-db`;
die $! if $?;
}
# process
my $lastbranch = branchname($psets[0]{id}); # only good for initial import
my $importseen = $opt_i ? 0 : 1; # start at 1 if opt_i
# process patchsets
foreach my $ps (@psets) {
$ps->{branch} = branchname($ps->{id});
......@@ -201,14 +199,22 @@ foreach my $ps (@psets) {
}
die $! if $?;
#
# skip commits already in repo
#
if (ptag($ps->{id})) {
$opt_v && print "Skipping already imported: $ps->{id}\n";
next;
}
#
# create the branch if needed
#
if ($ps->{type} eq 'i' && $importseen) {
die "Should not have more than one 'Initial import' per GIT import";
if ($ps->{type} eq 'i' && !$import) {
die "Should not have more than one 'Initial import' per GIT import: $ps->{id}";
}
unless ($opt_i && !$importseen) { # skip for first commit
unless ($import) { # skip for import
if ( -e ".git/refs/heads/$ps->{branch}") {
# we know about this branch
`git checkout $ps->{branch}`;
......@@ -221,17 +227,24 @@ foreach my $ps (@psets) {
# find where we are supposed to branch from
`git checkout -b $ps->{branch} $branchpoint`;
# If we trust Arch with the fact that this is just
# a tag, and it does not affect the state of the tree
# then we just tag and move on
tag($ps->{id}, $branchpoint);
ptag($ps->{id}, $branchpoint);
print " * Tagged $ps->{id} at $branchpoint\n";
next;
}
die $! if $?;
}
#
# Apply the import/changeset/merge into the working tree
#
if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
$importseen = 1;
apply_import($ps) or die $!;
$import=0;
} elsif ($ps->{type} eq 's') {
apply_cset($ps);
}
......@@ -577,8 +590,6 @@ sub ptag {
} else { # read
# if the tag isn't there, return 0
unless ( -s ".git/archimport/tags/$tag") {
warn "Could not find tag $tag -- perhaps it isn't in the repos we have?\n"
if $opt_v;
return 0;
}
open(C,"<.git/archimport/tags/$tag")
......
......@@ -17,7 +17,7 @@ void prefetch(unsigned char *sha1)
static struct packed_git *packs = NULL;
void setup_index(unsigned char *sha1)
static void setup_index(unsigned char *sha1)
{
struct packed_git *new_pack;
char filename[PATH_MAX];
......@@ -30,7 +30,7 @@ void setup_index(unsigned char *sha1)
packs = new_pack;
}
int setup_indices()
static int setup_indices(void)
{
DIR *dir;
struct dirent *de;
......@@ -49,7 +49,7 @@ int setup_indices()
return 0;
}
int copy_file(const char *source, const char *dest, const char *hex)
static int copy_file(const char *source, const char *dest, const char *hex)
{
if (use_link) {
if (!link(source, dest)) {
......@@ -97,7 +97,7 @@ int copy_file(const char *source, const char *dest, const char *hex)
return -1;
}
int fetch_pack(unsigned char *sha1)
static int fetch_pack(const unsigned char *sha1)
{
struct packed_git *target;
char filename[PATH_MAX];
......@@ -125,7 +125,7 @@ int fetch_pack(unsigned char *sha1)
return 0;
}
int fetch_file(unsigned char *sha1)
static int fetch_file(const unsigned char *sha1)
{
static int object_name_start = -1;
static char filename[PATH_MAX];
......
......@@ -34,9 +34,10 @@ void *patch_delta(void *src_buf, unsigned long src_size,
/* now the result size */
size = get_delta_hdr_size(&data);
dst_buf = malloc(size);
dst_buf = malloc(size + 1);
if (!dst_buf)
return NULL;
dst_buf[size] = 0;
out = dst_buf;
while (data < top) {
......
......@@ -487,7 +487,7 @@ struct packed_git *parse_pack_index(unsigned char *sha1)
return parse_pack_index_file(sha1, path);
}
struct packed_git *parse_pack_index_file(unsigned char *sha1, char *idx_path)
struct packed_git *parse_pack_index_file(const unsigned char *sha1, char *idx_path)
{
struct packed_git *p;
unsigned long idx_size;
......
#!/bin/sh
#
# Copyright (c) 2005 Junio C Hamano
#
test_description='git-apply should not get confused with rename/copy.
'
. ./test-lib.sh
# setup
mkdir -p include/arch/x86_64/klibc klibc/arch/x86_64/include/klibc
cat >include/arch/x86_64/klibc/archsetjmp.h <<\EOF
/*
* arch/x86_64/include/klibc/archsetjmp.h
*/
#ifndef _KLIBC_ARCHSETJMP_H
#define _KLIBC_ARCHSETJMP_H
struct __jmp_buf {
unsigned long __rbx;
unsigned long __rsp;
unsigned long __rbp;
unsigned long __r12;
unsigned long __r13;
unsigned long __r14;
unsigned long __r15;
unsigned long __rip;
};
typedef struct __jmp_buf jmp_buf[1];
#endif /* _SETJMP_H */
EOF
cat >klibc/arch/x86_64/include/klibc/archsetjmp.h <<\EOF
/*
* arch/x86_64/include/klibc/archsetjmp.h
*/
#ifndef _KLIBC_ARCHSETJMP_H
#define _KLIBC_ARCHSETJMP_H
struct __jmp_buf {
unsigned long __rbx;
unsigned long __rsp;
unsigned long __rbp;
unsigned long __r12;
unsigned long __r13;
unsigned long __r14;
unsigned long __r15;
unsigned long __rip;
};
typedef struct __jmp_buf jmp_buf[1];
#endif /* _SETJMP_H */
EOF
cat >patch <<\EOF
diff --git a/klibc/arch/x86_64/include/klibc/archsetjmp.h b/include/arch/cris/klibc/archsetjmp.h
similarity index 76%
copy from klibc/arch/x86_64/include/klibc/archsetjmp.h
copy to include/arch/cris/klibc/archsetjmp.h
--- a/klibc/arch/x86_64/include/klibc/archsetjmp.h
+++ b/include/arch/cris/klibc/archsetjmp.h
@@ -1,21 +1,24 @@
/*
- * arch/x86_64/include/klibc/archsetjmp.h
+ * arch/cris/include/klibc/archsetjmp.h
*/
#ifndef _KLIBC_ARCHSETJMP_H
#define _KLIBC_ARCHSETJMP_H
struct __jmp_buf {
- unsigned long __rbx;
- unsigned long __rsp;
- unsigned long __rbp;
- unsigned long __r12;
- unsigned long __r13;
- unsigned long __r14;
- unsigned long __r15;
- unsigned long __rip;
+ unsigned long __r0;
+ unsigned long __r1;
+ unsigned long __r2;
+ unsigned long __r3;
+ unsigned long __r4;
+ unsigned long __r5;
+ unsigned long __r6;
+ unsigned long __r7;
+ unsigned long __r8;
+ unsigned long __sp;
+ unsigned long __srp;
};
typedef struct __jmp_buf jmp_buf[1];
-#endif /* _SETJMP_H */
+#endif /* _KLIBC_ARCHSETJMP_H */
diff --git a/klibc/arch/x86_64/include/klibc/archsetjmp.h b/include/arch/m32r/klibc/archsetjmp.h
similarity index 66%
rename from klibc/arch/x86_64/include/klibc/archsetjmp.h
rename to include/arch/m32r/klibc/archsetjmp.h
--- a/klibc/arch/x86_64/include/klibc/archsetjmp.h
+++ b/include/arch/m32r/klibc/archsetjmp.h
@@ -1,21 +1,21 @@
/*
- * arch/x86_64/include/klibc/archsetjmp.h
+ * arch/m32r/include/klibc/archsetjmp.h
*/
#ifndef _KLIBC_ARCHSETJMP_H
#define _KLIBC_ARCHSETJMP_H
struct __jmp_buf {
- unsigned long __rbx;
- unsigned long __rsp;
- unsigned long __rbp;
+ unsigned long __r8;
+ unsigned long __r9;
+ unsigned long __r10;
+ unsigned long __r11;
unsigned long __r12;
unsigned long __r13;
unsigned long __r14;
unsigned long __r15;
- unsigned long __rip;
};
typedef struct __jmp_buf jmp_buf[1];
-#endif /* _SETJMP_H */
+#endif /* _KLIBC_ARCHSETJMP_H */
EOF
find include klibc -type f -print | xargs git-update-cache --add --
test_expect_success 'check rename/copy patch' 'git-apply --check patch'
test_expect_success 'apply rename/copy patch' 'git-apply --index patch'
test_done
......@@ -68,7 +68,8 @@ do
i="$1"
case "$resume,$continue" in
f,$i) resume=t;;
f,*) continue;;
f,*) shift
continue;;
*)
git-mailinfo $keep_subject $utf8 \
.dotest/msg .dotest/patch <$i >.dotest/info || exit 1
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册