]>
Commit | Line | Data |
---|---|---|
5d2f8b27 JH |
1 | #!/bin/sh |
2 | # Copyright (C) 2005 Junio C Hamano | |
3 | # | |
4 | # Applying diff between two trees to the work tree can be | |
5 | # done with the following single command: | |
6 | # | |
7 | # GIT_EXTERNAL_DIFF=git-apply-patch-script git-diff-tree -p $tree1 $tree2 | |
8 | # | |
9 | ||
10 | case "$#" in | |
11 | 2) exit 1 ;; # do not feed unmerged diff to me! | |
12 | esac | |
13 | name="$1" tmp1="$2" hex1="$3" mode1="$4" tmp2="$5" hex2="$6" mode2="$7" | |
14 | case "$mode1" in *7??) mode1=+x ;; *6??) mode1=-x ;; esac | |
15 | case "$mode2" in *7??) mode2=+x ;; *6??) mode2=-x ;; esac | |
16 | ||
17 | if test -f "$name.orig" || test -f "$name.rej" | |
18 | then | |
19 | echo >&2 "Unresolved patch conflicts in the previous run found." | |
20 | exit 1 | |
21 | fi | |
5d2f8b27 | 22 | |
6fa28064 JH |
23 | case "$mode1,$mode2" in |
24 | .,?x) | |
25 | # newly created | |
26 | dir=$(dirname "$name") | |
27 | case "$dir" in '' | .) ;; *) mkdir -p "$dir" esac || { | |
28 | echo >&2 "cannot create leading path for $name." | |
29 | exit 1 | |
30 | } | |
31 | case "$mode2" in | |
32 | +x) | |
33 | echo >&2 "created $name with mode +x." | |
34 | chmod "$mode2" "$name" | |
5d2f8b27 | 35 | ;; |
6fa28064 JH |
36 | -x) |
37 | echo >&2 "created $name." | |
5d2f8b27 | 38 | ;; |
6fa28064 JH |
39 | esac |
40 | git-update-cache --add -- "$name" | |
41 | ;; | |
42 | ?x,.) | |
43 | # deleted | |
44 | echo >&2 "deleted $name." | |
45 | rm -f "$name" || { | |
46 | echo >&2 "cannot remove $name"; | |
47 | exit 1 | |
48 | } | |
49 | git-update-cache --remove -- "$name" | |
50 | ;; | |
51 | *) | |
52 | # changed | |
53 | dir=$(dirname "$name") | |
54 | case "$dir" in '' | .) ;; *) mkdir -p "$dir" esac || { | |
55 | echo >&2 "cannot create leading path for $name." | |
56 | exit 1 | |
57 | } | |
58 | # This will say "patching ..." so we do not say anything outselves. | |
59 | diff -u -L "a/$name" -L "b/$name" "$tmp1" "$tmp2" | patch -p1 || exit | |
60 | ||
61 | case "$mode1,$mode2" in | |
62 | "$mode2,$mode1") ;; | |
5d2f8b27 | 63 | *) |
6fa28064 JH |
64 | echo >&2 "changing mode from $mode1 to $mode2." |
65 | chmod "$mode2" "$name" | |
66 | ;; | |
5d2f8b27 | 67 | esac |
6fa28064 JH |
68 | git-update-cache -- "$name" |
69 | esac |