|
| 1 | + $ export RUST_BACKTRACE=1 |
| 2 | + $ git init -q 1> /dev/null |
| 3 | + |
| 4 | + $ echo contents1 > file1 |
| 5 | + $ git add . |
| 6 | + $ git commit -m "add file1" 1> /dev/null |
| 7 | + |
| 8 | + $ git log --graph --pretty=%s |
| 9 | + * add file1 |
| 10 | + |
| 11 | + $ git checkout -b branch2 |
| 12 | + Switched to a new branch 'branch2' |
| 13 | + |
| 14 | + $ echo contents2 > file1 |
| 15 | + $ git add . |
| 16 | + $ git commit -m "mod file1" 1> /dev/null |
| 17 | + |
| 18 | + $ echo contents3 > file3 |
| 19 | + $ git add . |
| 20 | + $ git commit -m "mod file3" 1> /dev/null |
| 21 | + |
| 22 | + $ git checkout master |
| 23 | + Switched to branch 'master' |
| 24 | + |
| 25 | + $ echo contents3 > file2 |
| 26 | + $ git add . |
| 27 | + $ git commit -m "add file2" 1> /dev/null |
| 28 | + |
| 29 | + $ git merge -q branch2 --no-ff |
| 30 | + |
| 31 | + $ git log --graph --pretty=%H |
| 32 | + * 1d69b7d2651f744be3416f2ad526aeccefb99310 |
| 33 | + |\ |
| 34 | + | * 86871b8775ad3baca86484337d1072aa1d386f7e |
| 35 | + | * 975d4c4975912729482cc864d321c5196a969271 |
| 36 | + * | e707f76bb6a1390f28b2162da5b5eb6933009070 |
| 37 | + |/ |
| 38 | + * 0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb |
| 39 | + $ josh-filter -s :prefix=x/y --update refs/heads/filtered |
| 40 | + [5] :prefix=x |
| 41 | + [5] :prefix=y |
| 42 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 43 | + * 37f8b29c9e892ea0eb7abac2759ddc6fb0337203:dcbbddf47649f8e73f59fae92896c0d2cd02b6ec |
| 44 | + |\ |
| 45 | + | * 714ed7037ce6a45f7342e2cc1a9bb644bb616c45:67e0ba73689ea02220cb270c5b5db564e520fce3 |
| 46 | + | * cc0382917c6488d69dca4d6a147d55251b06ac08:8408d8fc882cba8e945b16bc69e3b475d65ecbeb |
| 47 | + * | 08158c6ba260a65db99c1e9e6f519e1963dff07b:6d18321f410e431cd446258dd5e01999306d9d44 |
| 48 | + |/ |
| 49 | + * 9f0db868b59a422c114df33bc6a8b2950f80490b:a087bfbdb1a5bad499b40ccd1363d30db1313f54 |
| 50 | + |
| 51 | + $ josh-filter -s ":rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y)" --update refs/heads/filtered |
| 52 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 53 | + [5] :prefix=x |
| 54 | + [5] :prefix=y |
| 55 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 56 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 57 | + * 8b4097f3318cdf47e46266fc7fef5331bf189b6c:5f47d9fdffdc726bb8ebcfea67531d2574243c5d |
| 58 | + |\ |
| 59 | + | * ee931ac07e4a953d1d2e0f65968946f5c09b0f4c:5d0da4f47308da86193b53b3374f5630c5a0fa3e |
| 60 | + | * cc0382917c6488d69dca4d6a147d55251b06ac08:8408d8fc882cba8e945b16bc69e3b475d65ecbeb |
| 61 | + | * 9f0db868b59a422c114df33bc6a8b2950f80490b:a087bfbdb1a5bad499b40ccd1363d30db1313f54 |
| 62 | + * e707f76bb6a1390f28b2162da5b5eb6933009070:5d8a699f74b48c9c595f4615dd3755244e11d176 |
| 63 | + * 0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:3d77ff51363c9825cc2a221fc0ba5a883a1a2c72 |
| 64 | + |
| 65 | + |
| 66 | + $ josh-filter -s ":rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y)" --update refs/heads/filtered |
| 67 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 68 | + [5] :prefix=x |
| 69 | + [5] :prefix=y |
| 70 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 71 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 72 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 73 | + * dbc12216fd70cd41937b99940b1f74dde60b4f44:5f47d9fdffdc726bb8ebcfea67531d2574243c5d |
| 74 | + |\ |
| 75 | + | * 86871b8775ad3baca86484337d1072aa1d386f7e:5d0da4f47308da86193b53b3374f5630c5a0fa3e |
| 76 | + | * 975d4c4975912729482cc864d321c5196a969271:de6937d89a7433c80125962616db5dca6c206d9d |
| 77 | + | * 0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:3d77ff51363c9825cc2a221fc0ba5a883a1a2c72 |
| 78 | + * 08158c6ba260a65db99c1e9e6f519e1963dff07b:6d18321f410e431cd446258dd5e01999306d9d44 |
| 79 | + * 9f0db868b59a422c114df33bc6a8b2950f80490b:a087bfbdb1a5bad499b40ccd1363d30db1313f54 |
| 80 | + $ cat > filter.josh <<EOF |
| 81 | + > :rev( |
| 82 | + > e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y |
| 83 | + > 975d4c4975912729482cc864d321c5196a969271:prefix=x/y |
| 84 | + > ) |
| 85 | + > EOF |
| 86 | + $ josh-filter -s --file filter.josh --update refs/heads/filtered |
| 87 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 88 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 89 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 90 | + [5] :prefix=x |
| 91 | + [5] :prefix=y |
| 92 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 93 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 94 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 95 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 96 | + * 63fea1234f375bd09019b676da8291f28d2ddb43:5f47d9fdffdc726bb8ebcfea67531d2574243c5d |
| 97 | + |\ |
| 98 | + | * ee931ac07e4a953d1d2e0f65968946f5c09b0f4c:5d0da4f47308da86193b53b3374f5630c5a0fa3e |
| 99 | + | * cc0382917c6488d69dca4d6a147d55251b06ac08:8408d8fc882cba8e945b16bc69e3b475d65ecbeb |
| 100 | + * | 08158c6ba260a65db99c1e9e6f519e1963dff07b:6d18321f410e431cd446258dd5e01999306d9d44 |
| 101 | + |/ |
| 102 | + * 9f0db868b59a422c114df33bc6a8b2950f80490b:a087bfbdb1a5bad499b40ccd1363d30db1313f54 |
| 103 | + $ cat > filter.josh <<EOF |
| 104 | + > :rev( |
| 105 | + > e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y |
| 106 | + > 975d4c4975912729482cc864d321c5196a969271:prefix=x/z |
| 107 | + > ) |
| 108 | + > EOF |
| 109 | + $ josh-filter -s --file filter.josh --update refs/heads/filtered |
| 110 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 111 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/z) |
| 112 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 113 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 114 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 115 | + [5] :prefix=x |
| 116 | + [5] :prefix=y |
| 117 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 118 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 119 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 120 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 121 | + $ cat > filter.josh <<EOF |
| 122 | + > :rev( |
| 123 | + > e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y |
| 124 | + > 975d4c4975912729482cc864d321c5196a969271:prefix=x/z |
| 125 | + > ) |
| 126 | + > EOF |
| 127 | + $ josh-filter -s --file filter.josh --update refs/heads/filtered |
| 128 | + Warning: reference refs/heads/filtered wasn't updated |
| 129 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 130 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/z) |
| 131 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 132 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 133 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 134 | + [5] :prefix=x |
| 135 | + [5] :prefix=y |
| 136 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 137 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 138 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 139 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 140 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 141 | + * e8b8c260e894186db18bffef15da3f5d292902f8:5f47d9fdffdc726bb8ebcfea67531d2574243c5d |
| 142 | + |\ |
| 143 | + | * d817c466a639fca29059705144ef9f63e194c3b5:5d0da4f47308da86193b53b3374f5630c5a0fa3e |
| 144 | + | * 28b0f8962384c35ff4f370c0fb8d75bc9b035248:b9d380f578c1cb2bb5039977f64ccf1a804a91de |
| 145 | + | * 26cbb56df84c5e9fdce7afc7855025862e835ee2:105b58b790c53d350e23a51ad763a88e6b977ae7 |
| 146 | + * 08158c6ba260a65db99c1e9e6f519e1963dff07b:6d18321f410e431cd446258dd5e01999306d9d44 |
| 147 | + * 9f0db868b59a422c114df33bc6a8b2950f80490b:a087bfbdb1a5bad499b40ccd1363d30db1313f54 |
| 148 | + |
| 149 | + $ josh-filter -s :linear --update refs/heads/filtered |
| 150 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 151 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/z) |
| 152 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 153 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 154 | + [3] :linear |
| 155 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 156 | + [5] :prefix=x |
| 157 | + [5] :prefix=y |
| 158 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 159 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 160 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 161 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 162 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 163 | + * f8e8bc9daf54340c9fce647be467d2577b623bbe:5f47d9fdffdc726bb8ebcfea67531d2574243c5d |
| 164 | + * e707f76bb6a1390f28b2162da5b5eb6933009070:5d8a699f74b48c9c595f4615dd3755244e11d176 |
| 165 | + * 0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:3d77ff51363c9825cc2a221fc0ba5a883a1a2c72 |
| 166 | + |
| 167 | + $ git diff --stat ${EMPTY_TREE}..f8e8bc9daf54340c9fce647be467d2577b623bbe |
| 168 | + file1 | 1 + |
| 169 | + file2 | 1 + |
| 170 | + file3 | 1 + |
| 171 | + 3 files changed, 3 insertions(+) |
| 172 | + $ git diff --stat ${EMPTY_TREE}..e707f76bb6a1390f28b2162da5b5eb6933009070 |
| 173 | + file1 | 1 + |
| 174 | + file2 | 1 + |
| 175 | + 2 files changed, 2 insertions(+) |
| 176 | + $ git diff --stat ${EMPTY_TREE}..0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb |
| 177 | + file1 | 1 + |
| 178 | + 1 file changed, 1 insertion(+) |
| 179 | + |
| 180 | + $ cat > filter.josh <<EOF |
| 181 | + > :linear:rev( |
| 182 | + > 0000000000000000000000000000000000000000:prefix=x |
| 183 | + > e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=y |
| 184 | + > 0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:prefix=z |
| 185 | + > ) |
| 186 | + > EOF |
| 187 | + $ josh-filter -s --file filter.josh --update refs/heads/filtered |
| 188 | + [1] :rev(0000000000000000000000000000000000000000:prefix=z) |
| 189 | + [1] :rev(0000000000000000000000000000000000000000:prefix=z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=y) |
| 190 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 191 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,975d4c4975912729482cc864d321c5196a969271:prefix=x/z) |
| 192 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 193 | + [2] :rev(0000000000000000000000000000000000000000:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 194 | + [2] :rev(0000000000000000000000000000000000000000:prefix=y,0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:prefix=z) |
| 195 | + [3] :linear |
| 196 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x,0b4cf6c9efbbda1eada39fa9c1d21d2525b027bb:prefix=z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=y) |
| 197 | + [3] :rev(0000000000000000000000000000000000000000:prefix=x/y) |
| 198 | + [5] :prefix=x |
| 199 | + [5] :prefix=y |
| 200 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y) |
| 201 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/y,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 202 | + [5] :rev(975d4c4975912729482cc864d321c5196a969271:prefix=x/z,e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 203 | + [5] :rev(e707f76bb6a1390f28b2162da5b5eb6933009070:prefix=x/y) |
| 204 | + |
| 205 | + $ git log --graph --decorate --pretty=%H:%T refs/heads/filtered |
| 206 | + * 2944f04c33ea037f7696282bf20b2e570524552e:047b1b6f39e8d95b62ef7f136189005d0e3c80b3 |
| 207 | + * 3c2304baa035aa9c8e7e0f1fff5d7410be55f069:6300cae79def8ee31701b104857ff4338b6079aa |
| 208 | + * 67480de4b94241494bfb0d7f606d421d8ed4f7e6:2fd6d8f78756533e937e3f168eb58e0fd8b1512c |
| 209 | + |
| 210 | + $ git diff --stat ${EMPTY_TREE}..refs/heads/filtered |
| 211 | + x/file1 | 1 + |
| 212 | + x/file2 | 1 + |
| 213 | + x/file3 | 1 + |
| 214 | + 3 files changed, 3 insertions(+) |
| 215 | + $ git diff --stat ${EMPTY_TREE}..refs/heads/filtered~1 |
| 216 | + y/file1 | 1 + |
| 217 | + y/file2 | 1 + |
| 218 | + 2 files changed, 2 insertions(+) |
| 219 | + $ git diff --stat ${EMPTY_TREE}..refs/heads/filtered~2 |
| 220 | + z/file1 | 1 + |
| 221 | + 1 file changed, 1 insertion(+) |
0 commit comments