From 6d35cc76909512d386b503a3feb1b40c153c3195 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Fri, 2 Sep 2005 21:19:26 -0700 Subject: [PATCH 01/10] Document hooks. Signed-off-by: Junio C Hamano --- Documentation/Makefile | 1 + Documentation/git-applymbox.txt | 6 ++ Documentation/git-applypatch.txt | 4 + Documentation/git-commit-script.txt | 14 ++- Documentation/git-receive-pack.txt | 6 ++ Documentation/hooks.txt | 128 ++++++++++++++++++++++++++++ 6 files changed, 157 insertions(+), 2 deletions(-) create mode 100644 Documentation/hooks.txt diff --git a/Documentation/Makefile b/Documentation/Makefile index afdecc1a7f..b81a6a2c72 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -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 diff --git a/Documentation/git-applymbox.txt b/Documentation/git-applymbox.txt index 3d813ec4cf..f6d857cda4 100644 --- a/Documentation/git-applymbox.txt +++ b/Documentation/git-applymbox.txt @@ -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 diff --git a/Documentation/git-applypatch.txt b/Documentation/git-applypatch.txt index 14ce53aade..b8946321d3 100644 --- a/Documentation/git-applypatch.txt +++ b/Documentation/git-applypatch.txt @@ -16,6 +16,10 @@ Takes three files , , and 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 ------- diff --git a/Documentation/git-commit-script.txt b/Documentation/git-commit-script.txt index cf6b5c3da2..faa1870e34 100644 --- a/Documentation/git-commit-script.txt +++ b/Documentation/git-commit-script.txt @@ -8,7 +8,7 @@ git-commit-script - Record your changes SYNOPSIS -------- -'git commit' [-a] [-s] [-v] [(-c | -C) | -F | -m ] ... +'git commit' [-a] [-s] [-v] [(-c | -C) | -F | -m ] [-e] ... 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. + ...:: - Update specified paths in the index file. + Update specified paths in the index file before committing. Author diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt index 2f1a1f8ebb..2c6065fcb1 100644 --- a/Documentation/git-receive-pack.txt +++ b/Documentation/git-receive-pack.txt @@ -77,6 +77,12 @@ OPTIONS :: The repository to sync into. + +SEE ALSO +-------- +link:git-send-pack.html[git-send-pack] + + Author ------ Written by Linus Torvalds diff --git a/Documentation/hooks.txt b/Documentation/hooks.txt new file mode 100644 index 0000000000..45809ba13a --- /dev/null +++ b/Documentation/hooks.txt @@ -0,0 +1,128 @@ +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. From baeda3a749ddcb6feee8354cf2b6f8f55cbd7200 Mon Sep 17 00:00:00 2001 From: Paolo 'Blaisorblade' Giarrusso Date: Fri, 2 Sep 2005 11:56:52 +0200 Subject: [PATCH 02/10] [PATCH] Doc: replace read-cache with git-read-tree. Replace references to "read-cache" with references to git-read-tree in the documentation. I chose that because reference say "see read-cache about stages", and stages are explained in git-read-tree. Signed-off-by: Paolo 'Blaisorblade' Giarrusso Signed-off-by: Junio C Hamano --- Documentation/git-ls-files.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index d05827f611..9c5ef8e7a4 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -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 From 2ab141a26f93c4d97e243a6be8a38a7dd4eb35a3 Mon Sep 17 00:00:00 2001 From: Peter Hagervall Date: Fri, 2 Sep 2005 14:17:10 +0200 Subject: [PATCH 03/10] [PATCH] Possible cleanups for local-pull.c Hi. This patch contains the following possible cleanups: * Make some needlessly global functions in local-pull.c static * Change 'char *' to 'const char *' where appropriate Signed-off-by: Peter Hagervall Signed-off-by: Junio C Hamano --- cache.h | 2 +- local-pull.c | 10 +++++----- sha1_file.c | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cache.h b/cache.h index 0dcd2fe53b..f0c9b01aa3 100644 --- a/cache.h +++ b/cache.h @@ -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); diff --git a/local-pull.c b/local-pull.c index 8b16f50e33..ca0003ba2a 100644 --- a/local-pull.c +++ b/local-pull.c @@ -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]; diff --git a/sha1_file.c b/sha1_file.c index fa37f1e3ef..64eac592bb 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -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; From ce726ec8d80ccce4e4956a026d807cb02bdc6de9 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Sun, 4 Sep 2005 13:43:16 +0400 Subject: [PATCH 04/10] [PATCH] NUL terminate the object data in patch_delta() At least pretty_print_commit() expects to get NUL-terminated commit data to work properly. unpack_sha1_rest(), which reads objects from separate files, and unpack_non_delta_entry(), which reads non-delta-compressed objects from pack files, already add the NUL byte after the object data, but patch_delta() did not do it, which caused problems with, e.g., git-rev-list --pretty when there are delta-compressed commit objects. Signed-off-by: Sergey Vlasov Signed-off-by: Junio C Hamano --- patch-delta.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/patch-delta.c b/patch-delta.c index 26281ea123..98c27beb25 100644 --- a/patch-delta.c +++ b/patch-delta.c @@ -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) { From 3292ae4794012994560816e6111d27c809f5e86a Mon Sep 17 00:00:00 2001 From: Martin Langhoff Date: Sun, 4 Sep 2005 22:55:06 +1200 Subject: [PATCH 05/10] [PATCH] archimport autodetects import status, supports incremental imports If there is no GIT directory, archimport will assume it is an initial import. It now also supports incremental imports, skipping "seen" commits. You can now run it repeatedly to pull new commits from the Arch repository. Signed-off-by: Martin Langhoff Signed-off-by: Junio C Hamano --- git-archimport-script | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/git-archimport-script b/git-archimport-script index 6ff5d7dce0..3c8aab74be 100755 --- a/git-archimport-script +++ b/git-archimport-script @@ -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 <{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}`; @@ -225,13 +231,12 @@ foreach my $ps (@psets) { 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 +582,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") From 52586ecb16f2158de29daabb0ed72b094ca8d5cc Mon Sep 17 00:00:00 2001 From: Martin Langhoff Date: Sun, 4 Sep 2005 22:55:29 +1200 Subject: [PATCH 06/10] [PATCH] archimport: avoid committing on an Arch tag Arch tags are full commits (without any changed files) as well. Trust Arch to have put an unchanged tree in place (which seems to do reliably), and just add a tag & new branch. Speeds up Arch imports significantly, and leaves history in a much saner state. Signed-off-by: Martin Langhoff Signed-off-by: Junio C Hamano --- git-archimport-script | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/git-archimport-script b/git-archimport-script index 3c8aab74be..8f475fd66d 100755 --- a/git-archimport-script +++ b/git-archimport-script @@ -227,6 +227,14 @@ 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 $?; } From 07a95d0ed36dea806e32f23df309506be74915db Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 4 Sep 2005 10:37:07 -0700 Subject: [PATCH 07/10] git-applymbox: fix '-c'. Earlier round b50abe8843006e9856c633b5abeb4eab53b46629 broke it by carelessly rewriting the main loop. Signed-off-by: Junio C Hamano --- tools/git-applymbox | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tools/git-applymbox b/tools/git-applymbox index 2b32dab5f5..e58bb21467 100755 --- a/tools/git-applymbox +++ b/tools/git-applymbox @@ -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 From 433ef8a2fb93627e311217b2a41b3132933e6b0b Mon Sep 17 00:00:00 2001 From: Fredrik Kuivinen Date: Sun, 4 Sep 2005 19:29:02 +0200 Subject: [PATCH 08/10] [PATCH] Make git-apply understand incomplete lines in non-C locales The message "\ No newline at end of file" used by diff(1) to mark an incomplete line is locale dependent. We can't assume more than that it begins with "\ ". For example, given two files, "foo" and "bar", with appropriate contents, 'diff -u foo bar' will produce the following output on my system: --- foo 2005-09-04 18:59:38.000000000 +0200 +++ bar 2005-09-04 18:59:16.000000000 +0200 @@ -1 +1 @@ -foobar +foo \ Ingen nyrad vid filslut [jc: the check for the marker still uses the line length being no less than 12 bytes for a sanity check, but I think it is safe to assume that in other locales. I haven't checked the .po files from diff, tho'.] Signed-off-by: Fredrik Kuivinen Signed-off-by: Junio C Hamano --- apply.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apply.c b/apply.c index e87190ea38..964df2db10 100644 --- a/apply.c +++ b/apply.c @@ -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; From c743e6e3c0764ea784f9c13310d0eef5b57c52fb Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 4 Sep 2005 11:25:56 -0700 Subject: [PATCH 09/10] Add a link from update-server-info documentation to repository layout. Signed-off-by: Junio C Hamano --- Documentation/git-update-server-info.txt | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/Documentation/git-update-server-info.txt b/Documentation/git-update-server-info.txt index 830f398034..74c4364ad8 100644 --- a/Documentation/git-update-server-info.txt +++ b/Documentation/git-update-server-info.txt @@ -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 From 52be5fcd29e074cb549b9a92ff8caceb736e4851 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Sun, 4 Sep 2005 15:40:18 -0700 Subject: [PATCH 10/10] Add copy/rename check for git-apply. The new test pattern is taken from HPA's klibc and klibc-kbuild trees, which has many interesting renames (the commits 001eef5a19219e5b0601068a3d13874b88c0653e and 0037d1bc0deaf7daec3778496656cb04b4e4b9d0). The test pattern exposes problems in the apply.c changes currently in the proposed updates branch. Signed-off-by: Junio C Hamano --- t/t4112-apply-renames.sh | 148 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100755 t/t4112-apply-renames.sh diff --git a/t/t4112-apply-renames.sh b/t/t4112-apply-renames.sh new file mode 100755 index 0000000000..906188cdf6 --- /dev/null +++ b/t/t4112-apply-renames.sh @@ -0,0 +1,148 @@ +#!/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