eac_git 0.1.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/eac_git/executables.rb +24 -4
- data/lib/eac_git/local.rb +5 -1
- data/lib/eac_git/local/dirty_files.rb +37 -0
- data/lib/eac_git/rspec.rb +17 -0
- data/lib/eac_git/version.rb +1 -1
- data/vendor/git-subrepo/Changes +110 -0
- data/vendor/git-subrepo/Intro.pod +509 -0
- data/vendor/git-subrepo/License +21 -0
- data/vendor/git-subrepo/Makefile +82 -0
- data/vendor/git-subrepo/Meta +28 -0
- data/vendor/git-subrepo/ReadMe.pod +698 -0
- data/vendor/git-subrepo/doc/comparison.swim +35 -0
- data/vendor/git-subrepo/doc/git-subrepo.swim +608 -0
- data/vendor/git-subrepo/doc/intro-to-subrepo.swim +387 -0
- data/vendor/git-subrepo/ext/bashplus/Changes +15 -0
- data/vendor/git-subrepo/ext/bashplus/License +21 -0
- data/vendor/git-subrepo/ext/bashplus/Makefile +45 -0
- data/vendor/git-subrepo/ext/bashplus/Meta +28 -0
- data/vendor/git-subrepo/ext/bashplus/ReadMe.pod +77 -0
- data/vendor/git-subrepo/ext/bashplus/bin/bash+ +43 -0
- data/vendor/git-subrepo/ext/bashplus/doc/bash+.swim +61 -0
- data/vendor/git-subrepo/ext/bashplus/lib/bash+.bash +92 -0
- data/vendor/git-subrepo/ext/bashplus/man/man1/bash+.1 +134 -0
- data/vendor/git-subrepo/ext/bashplus/man/man3/bash+.3 +134 -0
- data/vendor/git-subrepo/ext/bashplus/test/base.t +12 -0
- data/vendor/git-subrepo/ext/bashplus/test/fcopy.t +22 -0
- data/vendor/git-subrepo/ext/bashplus/test/lib/foo/bar.bash +3 -0
- data/vendor/git-subrepo/ext/bashplus/test/lib/foo/foo.bash +3 -0
- data/vendor/git-subrepo/ext/bashplus/test/source-bash+-std.t +18 -0
- data/vendor/git-subrepo/ext/bashplus/test/source-bash+.t +23 -0
- data/vendor/git-subrepo/ext/bashplus/test/test.bash +70 -0
- data/vendor/git-subrepo/ext/bashplus/test/use.t +19 -0
- data/vendor/git-subrepo/ext/test-more-bash/Changes +15 -0
- data/vendor/git-subrepo/ext/test-more-bash/License +21 -0
- data/vendor/git-subrepo/ext/test-more-bash/Makefile +20 -0
- data/vendor/git-subrepo/ext/test-more-bash/Meta +30 -0
- data/vendor/git-subrepo/ext/test-more-bash/ReadMe.pod +115 -0
- data/vendor/git-subrepo/ext/test-more-bash/doc/test-more.swim +89 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Changes +15 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/License +21 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Makefile +45 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Meta +28 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/ReadMe.pod +77 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/bin/bash+ +43 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/doc/bash+.swim +61 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/lib/bash+.bash +92 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man1/bash+.1 +134 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man3/bash+.3 +134 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/base.t +12 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/fcopy.t +22 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/bar.bash +3 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/foo.bash +3 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+-std.t +18 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+.t +23 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/test.bash +70 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/use.t +19 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Changes +15 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/License +21 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Makefile +37 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Meta +28 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/ReadMe.pod +66 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/doc/test-tap.swim +48 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/lib/test/tap.bash +153 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/man/man3/test-tap.3 +119 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/bail_out.t +13 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/done.t +10 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail.t +20 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail_fast.t +15 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/helper.bash +9 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/pass.t +9 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/plan.t +10 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/skip_all.t +20 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/tap.t +13 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/bail.t +14 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail.t +7 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail_fast.t +12 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-init.t +8 -0
- data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-plan.t +9 -0
- data/vendor/git-subrepo/ext/test-more-bash/lib/test/more.bash +95 -0
- data/vendor/git-subrepo/ext/test-more-bash/man/man3/test-more.3 +173 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/fail.t +20 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/more.t +20 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/pass.t +9 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/setup +8 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/skip_all.t +11 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/test/fail1.t +12 -0
- data/vendor/git-subrepo/ext/test-more-bash/test/test/skip_all.t +10 -0
- data/vendor/git-subrepo/lib/git-subrepo +1903 -0
- data/vendor/git-subrepo/lib/git-subrepo.d/bash+.bash +1 -0
- data/vendor/git-subrepo/lib/git-subrepo.d/help-functions.bash +339 -0
- data/vendor/git-subrepo/man/man1/git-subrepo.1 +743 -0
- data/vendor/git-subrepo/note/0.4.0 +12 -0
- data/vendor/git-subrepo/note/AllGitCmds +148 -0
- data/vendor/git-subrepo/note/Cases +32 -0
- data/vendor/git-subrepo/note/Commands +33 -0
- data/vendor/git-subrepo/note/Dags +199 -0
- data/vendor/git-subrepo/note/Gists +7 -0
- data/vendor/git-subrepo/note/Links +25 -0
- data/vendor/git-subrepo/note/Plugins +10 -0
- data/vendor/git-subrepo/note/Spec +39 -0
- data/vendor/git-subrepo/note/Story1 +57 -0
- data/vendor/git-subrepo/note/ToDo +55 -0
- data/vendor/git-subrepo/note/design.swim +137 -0
- data/vendor/git-subrepo/note/design2.swim +85 -0
- data/vendor/git-subrepo/note/init-test +38 -0
- data/vendor/git-subrepo/note/pull-dance.txt +18 -0
- data/vendor/git-subrepo/note/recreate-rebase-conflict.sh +56 -0
- data/vendor/git-subrepo/note/subtree-rebase-fail-example/test.bash +29 -0
- data/vendor/git-subrepo/note/test-subrepo-push.sh +69 -0
- data/vendor/git-subrepo/note/test.sh +58 -0
- data/vendor/git-subrepo/pkg/bin/generate-completion.pl +210 -0
- data/vendor/git-subrepo/pkg/bin/generate-help-functions.pl +89 -0
- data/vendor/git-subrepo/share/completion.bash +42 -0
- data/vendor/git-subrepo/share/enable-completion.sh +50 -0
- data/vendor/git-subrepo/share/git-completion.bash +2738 -0
- data/vendor/git-subrepo/share/zsh-completion/_git-subrepo +81 -0
- data/vendor/git-subrepo/test/branch-all.t +41 -0
- data/vendor/git-subrepo/test/branch-rev-list-one-path.t +43 -0
- data/vendor/git-subrepo/test/branch-rev-list.t +47 -0
- data/vendor/git-subrepo/test/branch.t +52 -0
- data/vendor/git-subrepo/test/clean.t +43 -0
- data/vendor/git-subrepo/test/clone-annotated-tag.t +45 -0
- data/vendor/git-subrepo/test/clone.t +107 -0
- data/vendor/git-subrepo/test/compile.t +19 -0
- data/vendor/git-subrepo/test/config.t +58 -0
- data/vendor/git-subrepo/test/encode.t +91 -0
- data/vendor/git-subrepo/test/error.t +171 -0
- data/vendor/git-subrepo/test/fetch.t +43 -0
- data/vendor/git-subrepo/test/gitignore.t +61 -0
- data/vendor/git-subrepo/test/init.t +64 -0
- data/vendor/git-subrepo/test/issue29.t +98 -0
- data/vendor/git-subrepo/test/issue95.t +98 -0
- data/vendor/git-subrepo/test/issue96.t +96 -0
- data/vendor/git-subrepo/test/pull-all.t +38 -0
- data/vendor/git-subrepo/test/pull-merge.t +113 -0
- data/vendor/git-subrepo/test/pull-message.t +88 -0
- data/vendor/git-subrepo/test/pull-new-branch.t +58 -0
- data/vendor/git-subrepo/test/pull-ours.t +90 -0
- data/vendor/git-subrepo/test/pull-theirs.t +82 -0
- data/vendor/git-subrepo/test/pull-twice.t +44 -0
- data/vendor/git-subrepo/test/pull-worktree.t +40 -0
- data/vendor/git-subrepo/test/pull.t +99 -0
- data/vendor/git-subrepo/test/push-after-init.t +51 -0
- data/vendor/git-subrepo/test/push-force.t +56 -0
- data/vendor/git-subrepo/test/push-new-branch.t +61 -0
- data/vendor/git-subrepo/test/push-no-changes.t +29 -0
- data/vendor/git-subrepo/test/push-squash.t +56 -0
- data/vendor/git-subrepo/test/push.t +176 -0
- data/vendor/git-subrepo/test/reclone.t +45 -0
- data/vendor/git-subrepo/test/repo/bar/HEAD +1 -0
- data/vendor/git-subrepo/test/repo/bar/config +4 -0
- data/vendor/git-subrepo/test/repo/bar/objects/1f/0c4b264caed0126814a0ede851a1e0b4e16ae6 +0 -0
- data/vendor/git-subrepo/test/repo/bar/objects/87/46903fdb1b9c2101377880125917c2e05b4d69 +0 -0
- data/vendor/git-subrepo/test/repo/bar/objects/94/c86ffc745232d89f78c6f895e11e71272518db +0 -0
- data/vendor/git-subrepo/test/repo/bar/objects/c6/76c57b6576743fa56278527aa60ebd2e202a7c +0 -0
- data/vendor/git-subrepo/test/repo/bar/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/vendor/git-subrepo/test/repo/bar/objects/f6/2a8ff3feadf39b0a98f1a86ec6d1eb33858ee9 +0 -0
- data/vendor/git-subrepo/test/repo/bar/refs/heads/master +1 -0
- data/vendor/git-subrepo/test/repo/bar/refs/tags/A +1 -0
- data/vendor/git-subrepo/test/repo/foo/HEAD +1 -0
- data/vendor/git-subrepo/test/repo/foo/config +4 -0
- data/vendor/git-subrepo/test/repo/foo/objects/a0/f4cdaaf533a936296cdebbed8206c3b9ededa8 +0 -0
- data/vendor/git-subrepo/test/repo/foo/objects/e2/1291a1ad392a9d4c51dd9586804f1467b28afd +0 -0
- data/vendor/git-subrepo/test/repo/foo/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
- data/vendor/git-subrepo/test/repo/foo/refs/heads/master +1 -0
- data/vendor/git-subrepo/test/repo/init/HEAD +1 -0
- data/vendor/git-subrepo/test/repo/init/config +5 -0
- data/vendor/git-subrepo/test/repo/init/objects/11/523f5dcf03b4c89b592dc8a3d0308f68da2386 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/14/2addf8ec5f37334e837440122c62f2c68a29ad +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/32/5180321750a21cd7a4e7ecda319e557a4f6a09 +2 -0
- data/vendor/git-subrepo/test/repo/init/objects/3d/918c6901c02f43af5d31779dd5e1f9166aeb36 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/3e/4cb596066dce63ba4d047abddb677389b65e19 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/4b/6e53022e7a04f07887697e4f3d7c377fd9822b +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/58/931fc1bd559b59c41ea738fc7ad04f9ad01bd3 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/5e/c0c28e1b806f25efdca18fcf7a74b49c3755bd +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/75/fa6584e748f57eff06eebdc55e9ac21d4fcbf2 +1 -0
- data/vendor/git-subrepo/test/repo/init/objects/80/2d5edbd5e1cb7fca82b5bd38e7c8a0a496fb20 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/94/7b3d714c38791e95ad6f928b48c98bb8708acd +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/95/e1f2df3f4d5f3d7a60588c25a7ca8a913d3c2a +1 -0
- data/vendor/git-subrepo/test/repo/init/objects/b1/5f4a7666baf40d949548ead946a3370e273479 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/c3/ee8978c4c5d84c3b7d00ba8e5906933d027882 +0 -0
- data/vendor/git-subrepo/test/repo/init/objects/c8/b0bffbc405ef3fad7354ff833fbec36d67ddfa +3 -0
- data/vendor/git-subrepo/test/repo/init/objects/dd/8bdb934ec848137f011fe423b185505c343626 +2 -0
- data/vendor/git-subrepo/test/repo/init/objects/e2/9be58c767cfeb27235c995d293a7d71aac0135 +2 -0
- data/vendor/git-subrepo/test/repo/init/objects/ee/1224401fc6aac595145fa727dcf6706ac8aec1 +1 -0
- data/vendor/git-subrepo/test/repo/init/objects/f1/cc1a657b2e805c400f5dcaaa76bd29c6178b1b +0 -0
- data/vendor/git-subrepo/test/repo/init/refs/heads/master +1 -0
- data/vendor/git-subrepo/test/setup +205 -0
- data/vendor/git-subrepo/test/status.t +68 -0
- data/vendor/git-subrepo/test/submodule.t +45 -0
- metadata +190 -4
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -e
|
|
4
|
+
set -x
|
|
5
|
+
|
|
6
|
+
# Make a directory to work in:
|
|
7
|
+
{
|
|
8
|
+
ROOT=${BASH_SOURCE%.sh}
|
|
9
|
+
[ -n "$ROOT" ] || exit 1
|
|
10
|
+
rm -fr "$ROOT"
|
|
11
|
+
mkdir "$ROOT"
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
(
|
|
15
|
+
cd "$ROOT"
|
|
16
|
+
|
|
17
|
+
# Start a new repo:
|
|
18
|
+
git init
|
|
19
|
+
|
|
20
|
+
# Make an empty file called `file`:
|
|
21
|
+
touch file
|
|
22
|
+
git add file
|
|
23
|
+
|
|
24
|
+
# Make 3 commits to `file`:
|
|
25
|
+
for n in {1..3}; do
|
|
26
|
+
echo "Line $n" >> file
|
|
27
|
+
git commit -a -m "Commit #$n"
|
|
28
|
+
done
|
|
29
|
+
|
|
30
|
+
# Now `file` has 3 lines.
|
|
31
|
+
|
|
32
|
+
# Make a new branch with one commit where the file has 3 lines:
|
|
33
|
+
git checkout --orphan subrepo-fake
|
|
34
|
+
git commit -a -m 'Initial commit on subrepo-fake branch'
|
|
35
|
+
|
|
36
|
+
# Return to master and lop off the last commit, so that the `file` has 2
|
|
37
|
+
# lines (and 2 commits):
|
|
38
|
+
git checkout master
|
|
39
|
+
git reset --hard HEAD^
|
|
40
|
+
|
|
41
|
+
# Now we rebase like `git subrepo push` does where master is the upstream
|
|
42
|
+
# with 2 commits, and `subrepo-fake` is our fake subrepo branch with one
|
|
43
|
+
# commit:
|
|
44
|
+
git rebase master subrepo-fake || true
|
|
45
|
+
|
|
46
|
+
# Command fails on conflict but `|| true` prevents `set -e` from stopping
|
|
47
|
+
# here.
|
|
48
|
+
|
|
49
|
+
# Show the current branch status:
|
|
50
|
+
git status
|
|
51
|
+
|
|
52
|
+
# Show the rebase conflict:
|
|
53
|
+
cat file
|
|
54
|
+
|
|
55
|
+
# This is exactly what is happening with a `git subrepo push`.
|
|
56
|
+
)
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -ex
|
|
4
|
+
|
|
5
|
+
rm -fr repo{1,2,3}
|
|
6
|
+
mkdir repo{1,2}
|
|
7
|
+
(
|
|
8
|
+
cd repo1/
|
|
9
|
+
git init
|
|
10
|
+
touch foo
|
|
11
|
+
git add foo
|
|
12
|
+
git commit -m "First commit"
|
|
13
|
+
)
|
|
14
|
+
(
|
|
15
|
+
cd repo2
|
|
16
|
+
git init
|
|
17
|
+
touch bar
|
|
18
|
+
git add bar
|
|
19
|
+
git commit -m "add bar"
|
|
20
|
+
)
|
|
21
|
+
git clone repo1 repo3
|
|
22
|
+
(
|
|
23
|
+
cd repo3/
|
|
24
|
+
git subrepo clone ../repo2 subrepo
|
|
25
|
+
bash
|
|
26
|
+
git rebase -i HEAD^
|
|
27
|
+
git log -p
|
|
28
|
+
ls
|
|
29
|
+
)
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -ex
|
|
4
|
+
|
|
5
|
+
# Make a directory to work in:
|
|
6
|
+
{
|
|
7
|
+
ROOT=${BASH_SOURCE%.sh}
|
|
8
|
+
[ -n "$ROOT" ] || exit 1
|
|
9
|
+
rm -fr "$ROOT"
|
|
10
|
+
mkdir "$ROOT"
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
(
|
|
14
|
+
cd "$ROOT"
|
|
15
|
+
|
|
16
|
+
# Create "bare" repos to act as pushable upstreams
|
|
17
|
+
git init --bare parent-upstream
|
|
18
|
+
git init --bare child-upstream
|
|
19
|
+
|
|
20
|
+
# Clone the upstreams into local repos
|
|
21
|
+
git clone parent-upstream parent
|
|
22
|
+
git clone child-upstream child
|
|
23
|
+
|
|
24
|
+
(
|
|
25
|
+
cd parent
|
|
26
|
+
echo 'Initial parent commit' > parent.txt
|
|
27
|
+
git add parent.txt
|
|
28
|
+
git commit -m 'initial parent commit'
|
|
29
|
+
git push
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
(
|
|
33
|
+
cd child
|
|
34
|
+
echo 'Initial child commit' > child.txt
|
|
35
|
+
git add child.txt
|
|
36
|
+
git commit -m 'Initial child commit'
|
|
37
|
+
git push
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
(
|
|
41
|
+
cd parent
|
|
42
|
+
git subrepo clone ../child-upstream childrepo
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
(
|
|
46
|
+
cd child
|
|
47
|
+
echo 'Commit from child' >> child.txt
|
|
48
|
+
git commit -a -m 'commit from child'
|
|
49
|
+
git push
|
|
50
|
+
)
|
|
51
|
+
|
|
52
|
+
(
|
|
53
|
+
cd parent
|
|
54
|
+
git subrepo pull childrepo
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
(
|
|
58
|
+
cd parent
|
|
59
|
+
echo 'Commit from parent for pushing' >> childrepo/child.txt
|
|
60
|
+
echo 'Commit from parent for pushing' >> parent.txt
|
|
61
|
+
git commit -a -m 'Commit from parent for pushing'
|
|
62
|
+
git push
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
(
|
|
66
|
+
cd parent
|
|
67
|
+
git subrepo push childrepo -d || bash -i
|
|
68
|
+
)
|
|
69
|
+
)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -x
|
|
4
|
+
|
|
5
|
+
# Take some random github repo
|
|
6
|
+
repo=${1:-ingydotnet/boolean-pm}
|
|
7
|
+
|
|
8
|
+
# Delete test dir
|
|
9
|
+
rm -fr test-repo
|
|
10
|
+
|
|
11
|
+
# Clone repo into test dir
|
|
12
|
+
git clone "git@github.com:$repo" test-repo
|
|
13
|
+
|
|
14
|
+
(
|
|
15
|
+
# cd into test-repo
|
|
16
|
+
cd test-repo
|
|
17
|
+
# Tag original head
|
|
18
|
+
git tag o
|
|
19
|
+
# Pick a commit in the middle of the commit history
|
|
20
|
+
S=$(git rev-parse HEAD^^^^)
|
|
21
|
+
# Reset to the middle commit
|
|
22
|
+
git reset --hard $S
|
|
23
|
+
# Tag that history as 'a'
|
|
24
|
+
git tag a
|
|
25
|
+
# Reset to original
|
|
26
|
+
git reset --hard o
|
|
27
|
+
# Take the tail of the history.
|
|
28
|
+
git filter-branch -f --parent-filter "sed 's/-p $S//'" $S..HEAD
|
|
29
|
+
# Mark that sequence as 'b'
|
|
30
|
+
git tag b
|
|
31
|
+
# Reset to a
|
|
32
|
+
git reset --hard a
|
|
33
|
+
# Add a commit
|
|
34
|
+
echo foobar >> README
|
|
35
|
+
git commit README -m 'a change'
|
|
36
|
+
# Tag as a2
|
|
37
|
+
git tag a2
|
|
38
|
+
# Find commits for top of 'a' and root of 'b'
|
|
39
|
+
A=$(git rev-parse a)
|
|
40
|
+
RB=$(git rev-list --max-parents=0 b)
|
|
41
|
+
# Graft them together
|
|
42
|
+
echo "$RB $A" >> .git/info/grafts
|
|
43
|
+
|
|
44
|
+
git rebase --abort; git rebase -s recursive -X patience a2 b
|
|
45
|
+
# # Make the graft permanent. ie join head+tail
|
|
46
|
+
# # The commits should rewrite to match original history
|
|
47
|
+
# git filter-branch -f $RB^..b
|
|
48
|
+
# # Get commits for new 'b' and original
|
|
49
|
+
# B=$(git rev-parse b)
|
|
50
|
+
# O=$(git rev-parse o)
|
|
51
|
+
# # Check to see if it works
|
|
52
|
+
# if [ "$B" == "$O" ]; then
|
|
53
|
+
# echo "It worked: $B"
|
|
54
|
+
# else
|
|
55
|
+
# echo "If failed: $B, $O"
|
|
56
|
+
# fi
|
|
57
|
+
bash
|
|
58
|
+
)
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env perl
|
|
2
|
+
|
|
3
|
+
use strict;
|
|
4
|
+
# use XXX;
|
|
5
|
+
|
|
6
|
+
sub main {
|
|
7
|
+
my ($cmd) = @_;
|
|
8
|
+
my $input = do { local $/; <> };
|
|
9
|
+
my $input2 = do { local $/; <> };
|
|
10
|
+
my ($options_spec) = $input2 =~ m/ ^ GETOPT_SPEC="\\ $ (.*?) ^ " $/xsm;
|
|
11
|
+
$options_spec =~ s/.*Options:\n--//s;
|
|
12
|
+
|
|
13
|
+
my @options;
|
|
14
|
+
for my $line (split m/\n/, $options_spec) {
|
|
15
|
+
next unless $line =~ m/\S/;
|
|
16
|
+
my $arg = 0;
|
|
17
|
+
my ($key, $desc) = split ' ', $line, 2;
|
|
18
|
+
if ($key =~ s/=$//) {
|
|
19
|
+
$arg = 1;
|
|
20
|
+
}
|
|
21
|
+
my @keys = split m/,/, $key;
|
|
22
|
+
push @options, { keys => \@keys, arg => $arg, desc => $desc };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
$input =~ s/.*?\n= Commands\n//s;
|
|
27
|
+
$input =~ s/(.*?\n)==? .*/$1/s;
|
|
28
|
+
my @list;
|
|
29
|
+
my @subdir_cmds;
|
|
30
|
+
while ($input =~ s/.*?^- (.*?\n)(?=- |== |\z)//ms) {
|
|
31
|
+
my $text = $1;
|
|
32
|
+
$text =~ /\A(.*)\n/
|
|
33
|
+
or die "Bad text '$text'";
|
|
34
|
+
my $usage = $1;
|
|
35
|
+
$usage =~ s/\A`(.*)`\z/$1/
|
|
36
|
+
or die "Bad usage: '$text'";
|
|
37
|
+
my ($x1, $x2, $name) = split / +/, $usage;
|
|
38
|
+
push @list, $name;
|
|
39
|
+
if ($usage =~ m#\Q$name\E \[?<subdir>\]?# and $name ne "init") {
|
|
40
|
+
push @subdir_cmds, $name;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
@subdir_cmds = sort @subdir_cmds;
|
|
44
|
+
@list = sort @list;
|
|
45
|
+
|
|
46
|
+
if ($cmd eq "bash") {
|
|
47
|
+
generate_bash(\@list, \@subdir_cmds, \@options);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
generate_zsh(\@list, \@subdir_cmds, \@options);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
sub generate_zsh {
|
|
56
|
+
my ($list, $subdir_cmds, $options) = @_;
|
|
57
|
+
my $options_string = '';
|
|
58
|
+
for my $opt (@$options) {
|
|
59
|
+
my $keys = $opt->{keys};
|
|
60
|
+
my $desc = $opt->{desc};
|
|
61
|
+
$desc =~ s/'/'"'"'/g;
|
|
62
|
+
# examples:
|
|
63
|
+
#'(-c --count)'{-c,--count}'[Number of list items to show]:count' \
|
|
64
|
+
#'--remote[Remote name (like "origin")]:remote' \
|
|
65
|
+
my $arg = '';
|
|
66
|
+
if ($opt->{arg}) {
|
|
67
|
+
$arg = ":$keys->[0]";
|
|
68
|
+
}
|
|
69
|
+
my @keystrings = map { (length $_ > 1 ? "--" : "-") . $_ } @$keys;
|
|
70
|
+
if (@$keys == 1) {
|
|
71
|
+
$options_string .= sprintf " '%s[%s]%s' \\\n",
|
|
72
|
+
$keystrings[0], $desc, $arg;
|
|
73
|
+
}
|
|
74
|
+
elsif (@$keys > 1) {
|
|
75
|
+
$options_string .= sprintf " '(%s)'{%s}'[%s]%s' \\\n",
|
|
76
|
+
(join ' ', @keystrings), (join ',', @keystrings), $desc, $arg;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
print <<'...';
|
|
80
|
+
#compdef git-subrepo -P git\ ##subrepo
|
|
81
|
+
#description perform git-subrepo operations
|
|
82
|
+
|
|
83
|
+
# DO NOT EDIT. This file generated by pkg/bin/generate-completion.pl.
|
|
84
|
+
|
|
85
|
+
if [[ -z $GIT_SUBREPO_ROOT ]]; then
|
|
86
|
+
echo 'GIT_SUBREPO_ROOT is null; has `/path/to/git-subrepo/.rc` been sourced?'
|
|
87
|
+
return 3
|
|
88
|
+
fi
|
|
89
|
+
|
|
90
|
+
_git-subrepo() {
|
|
91
|
+
typeset -A opt_args
|
|
92
|
+
local curcontext="$curcontext" state line context
|
|
93
|
+
|
|
94
|
+
_arguments -s \
|
|
95
|
+
'1: :->subcmd' \
|
|
96
|
+
'*: :->args' \
|
|
97
|
+
...
|
|
98
|
+
print <<"...";
|
|
99
|
+
$options_string && ret=0
|
|
100
|
+
|
|
101
|
+
case \$state in
|
|
102
|
+
subcmd)
|
|
103
|
+
compadd @$list
|
|
104
|
+
;;
|
|
105
|
+
|
|
106
|
+
args)
|
|
107
|
+
case \$line[1] in
|
|
108
|
+
|
|
109
|
+
clone)
|
|
110
|
+
_arguments -C \\
|
|
111
|
+
'1: :->subcmd' \\
|
|
112
|
+
'2: :->repo' \\
|
|
113
|
+
'*: :->subdir' \\
|
|
114
|
+
&& ret=0
|
|
115
|
+
case \$state in
|
|
116
|
+
subdir|repo)
|
|
117
|
+
_files
|
|
118
|
+
;;
|
|
119
|
+
esac
|
|
120
|
+
;;
|
|
121
|
+
|
|
122
|
+
@{[ join '|', @$subdir_cmds ]})
|
|
123
|
+
_compadd_subdirs
|
|
124
|
+
;;
|
|
125
|
+
|
|
126
|
+
init)
|
|
127
|
+
_files
|
|
128
|
+
;;
|
|
129
|
+
|
|
130
|
+
help)
|
|
131
|
+
compadd @$list
|
|
132
|
+
;;
|
|
133
|
+
esac
|
|
134
|
+
;;
|
|
135
|
+
esac
|
|
136
|
+
|
|
137
|
+
\}
|
|
138
|
+
|
|
139
|
+
_compadd_subdirs() {
|
|
140
|
+
local subrepos
|
|
141
|
+
IFS=\$'\\n' set -A subrepos `git subrepo status -q`
|
|
142
|
+
compadd -X "subrepos: " \$subrepos
|
|
143
|
+
}
|
|
144
|
+
...
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
sub generate_bash {
|
|
148
|
+
|
|
149
|
+
my ($list, $subdir_cmds, $options, $complete_fetch_limit) = @_;
|
|
150
|
+
my $options_string = '';
|
|
151
|
+
for my $opt (@$options) {
|
|
152
|
+
my $keys = $opt->{keys};
|
|
153
|
+
my $arg = '';
|
|
154
|
+
if ($opt->{arg}) {
|
|
155
|
+
$arg = "=";
|
|
156
|
+
}
|
|
157
|
+
my @keystrings = map { (length $_ > 1 ? "--" : "-") . $_ } @$keys;
|
|
158
|
+
for my $key (@keystrings) {
|
|
159
|
+
$options_string .= " $key$arg";
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
print <<"...";
|
|
164
|
+
#!bash
|
|
165
|
+
|
|
166
|
+
# DO NOT EDIT. This file generated by pkg/bin/generate-completion.pl.
|
|
167
|
+
|
|
168
|
+
_git_subrepo() {
|
|
169
|
+
local _opts="$options_string"
|
|
170
|
+
local subcommands="@$list"
|
|
171
|
+
local subdircommands="@$subdir_cmds"
|
|
172
|
+
local subcommand="\$(__git_find_on_cmdline "\$subcommands")"
|
|
173
|
+
|
|
174
|
+
if [ -z "\$subcommand" ]; then
|
|
175
|
+
# no subcommand yet
|
|
176
|
+
case "\$cur" in
|
|
177
|
+
-*)
|
|
178
|
+
__gitcomp "\$_opts"
|
|
179
|
+
;;
|
|
180
|
+
*)
|
|
181
|
+
__gitcomp "\$subcommands"
|
|
182
|
+
esac
|
|
183
|
+
|
|
184
|
+
else
|
|
185
|
+
|
|
186
|
+
case "\$cur" in
|
|
187
|
+
-*)
|
|
188
|
+
__gitcomp "\$_opts"
|
|
189
|
+
return
|
|
190
|
+
;;
|
|
191
|
+
esac
|
|
192
|
+
|
|
193
|
+
if [[ "\$subcommand" == "help" ]]; then
|
|
194
|
+
__gitcomp "\$subcommands"
|
|
195
|
+
return
|
|
196
|
+
fi
|
|
197
|
+
|
|
198
|
+
local subdircommand="\$(__git_find_on_cmdline "\$subdircommands")"
|
|
199
|
+
if [ ! -z "\$subdircommand" ]; then
|
|
200
|
+
local git_subrepos=`git subrepo status -q`
|
|
201
|
+
__gitcomp "\$git_subrepos"
|
|
202
|
+
fi
|
|
203
|
+
|
|
204
|
+
fi
|
|
205
|
+
}
|
|
206
|
+
...
|
|
207
|
+
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
main(shift);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
#!/usr/bin/env perl
|
|
2
|
+
|
|
3
|
+
use strict;
|
|
4
|
+
|
|
5
|
+
sub main {
|
|
6
|
+
my $input = do { local $/; <> };
|
|
7
|
+
$input =~ s/.*?\n= Commands\n//s;
|
|
8
|
+
$input =~ s/(.*?)\n= Command Options\n.*?\n==? .*/$1/s;
|
|
9
|
+
my @list;
|
|
10
|
+
while ($input =~ s/.*?^- (.*?)(?=\n- |\n== |\z)//ms) {
|
|
11
|
+
my $text = $1;
|
|
12
|
+
$text =~ /\A(.*)\n((?s:.*?))\n*\z/
|
|
13
|
+
or die "Bad text '$text'";
|
|
14
|
+
my ($usage, $desc) = ($1, $2);
|
|
15
|
+
$usage =~ s/\A`(.*)`\z/$1/
|
|
16
|
+
or die "Bad usage: '$text' '$usage' '$desc'";
|
|
17
|
+
$usage =~ s/^git subrepo //;
|
|
18
|
+
(my $name = $usage) =~ s/ .*//;
|
|
19
|
+
push @list, [$name, $usage, $desc];
|
|
20
|
+
}
|
|
21
|
+
@list = sort { $a->[0] cmp $b->[0] } @list;
|
|
22
|
+
write_start();
|
|
23
|
+
write_all_function(@list);
|
|
24
|
+
for my $item (@list) {
|
|
25
|
+
write_usage_function(@$item);
|
|
26
|
+
}
|
|
27
|
+
write_finish();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
sub write_start {
|
|
31
|
+
print <<'...';
|
|
32
|
+
#!/usr/bin/env bash
|
|
33
|
+
|
|
34
|
+
# DO NOT EDIT. This file generated by pkg/bin/generate-help-functions.pl.
|
|
35
|
+
|
|
36
|
+
set -e
|
|
37
|
+
...
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
sub write_all_function {
|
|
41
|
+
my (@list) = @_;
|
|
42
|
+
my $out = '';
|
|
43
|
+
for my $item (@list) {
|
|
44
|
+
$out .= sprintf "%-20s %s\n", $item->[0], $item->[1];
|
|
45
|
+
}
|
|
46
|
+
chomp $out;
|
|
47
|
+
print <<"....";
|
|
48
|
+
|
|
49
|
+
help:all() {
|
|
50
|
+
cat <<'...'
|
|
51
|
+
$out
|
|
52
|
+
...
|
|
53
|
+
}
|
|
54
|
+
....
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
sub write_usage_function {
|
|
58
|
+
my ($name, $usage, $desc) = @_;
|
|
59
|
+
print <<"....";
|
|
60
|
+
|
|
61
|
+
help:$name() {
|
|
62
|
+
cat <<'...'
|
|
63
|
+
|
|
64
|
+
Usage: git subrepo $usage
|
|
65
|
+
|
|
66
|
+
$desc
|
|
67
|
+
...
|
|
68
|
+
}
|
|
69
|
+
....
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
sub write_help_function {
|
|
73
|
+
my ($name, $usage, $desc) = @_;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
sub write_finish {
|
|
77
|
+
print <<'...';
|
|
78
|
+
|
|
79
|
+
# vim: set sw=2 lisp:
|
|
80
|
+
...
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
main;
|
|
84
|
+
|
|
85
|
+
__END__
|
|
86
|
+
Bad usage: '`help`
|
|
87
|
+
Show this manpage.
|
|
88
|
+
' '' ' Show this manpage.' at tool/gerate-help-functions.pl line 15, <> line 1.
|
|
89
|
+
|