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.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/lib/eac_git/executables.rb +24 -4
  3. data/lib/eac_git/local.rb +5 -1
  4. data/lib/eac_git/local/dirty_files.rb +37 -0
  5. data/lib/eac_git/rspec.rb +17 -0
  6. data/lib/eac_git/version.rb +1 -1
  7. data/vendor/git-subrepo/Changes +110 -0
  8. data/vendor/git-subrepo/Intro.pod +509 -0
  9. data/vendor/git-subrepo/License +21 -0
  10. data/vendor/git-subrepo/Makefile +82 -0
  11. data/vendor/git-subrepo/Meta +28 -0
  12. data/vendor/git-subrepo/ReadMe.pod +698 -0
  13. data/vendor/git-subrepo/doc/comparison.swim +35 -0
  14. data/vendor/git-subrepo/doc/git-subrepo.swim +608 -0
  15. data/vendor/git-subrepo/doc/intro-to-subrepo.swim +387 -0
  16. data/vendor/git-subrepo/ext/bashplus/Changes +15 -0
  17. data/vendor/git-subrepo/ext/bashplus/License +21 -0
  18. data/vendor/git-subrepo/ext/bashplus/Makefile +45 -0
  19. data/vendor/git-subrepo/ext/bashplus/Meta +28 -0
  20. data/vendor/git-subrepo/ext/bashplus/ReadMe.pod +77 -0
  21. data/vendor/git-subrepo/ext/bashplus/bin/bash+ +43 -0
  22. data/vendor/git-subrepo/ext/bashplus/doc/bash+.swim +61 -0
  23. data/vendor/git-subrepo/ext/bashplus/lib/bash+.bash +92 -0
  24. data/vendor/git-subrepo/ext/bashplus/man/man1/bash+.1 +134 -0
  25. data/vendor/git-subrepo/ext/bashplus/man/man3/bash+.3 +134 -0
  26. data/vendor/git-subrepo/ext/bashplus/test/base.t +12 -0
  27. data/vendor/git-subrepo/ext/bashplus/test/fcopy.t +22 -0
  28. data/vendor/git-subrepo/ext/bashplus/test/lib/foo/bar.bash +3 -0
  29. data/vendor/git-subrepo/ext/bashplus/test/lib/foo/foo.bash +3 -0
  30. data/vendor/git-subrepo/ext/bashplus/test/source-bash+-std.t +18 -0
  31. data/vendor/git-subrepo/ext/bashplus/test/source-bash+.t +23 -0
  32. data/vendor/git-subrepo/ext/bashplus/test/test.bash +70 -0
  33. data/vendor/git-subrepo/ext/bashplus/test/use.t +19 -0
  34. data/vendor/git-subrepo/ext/test-more-bash/Changes +15 -0
  35. data/vendor/git-subrepo/ext/test-more-bash/License +21 -0
  36. data/vendor/git-subrepo/ext/test-more-bash/Makefile +20 -0
  37. data/vendor/git-subrepo/ext/test-more-bash/Meta +30 -0
  38. data/vendor/git-subrepo/ext/test-more-bash/ReadMe.pod +115 -0
  39. data/vendor/git-subrepo/ext/test-more-bash/doc/test-more.swim +89 -0
  40. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Changes +15 -0
  41. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/License +21 -0
  42. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Makefile +45 -0
  43. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/Meta +28 -0
  44. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/ReadMe.pod +77 -0
  45. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/bin/bash+ +43 -0
  46. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/doc/bash+.swim +61 -0
  47. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/lib/bash+.bash +92 -0
  48. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man1/bash+.1 +134 -0
  49. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/man/man3/bash+.3 +134 -0
  50. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/base.t +12 -0
  51. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/fcopy.t +22 -0
  52. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/bar.bash +3 -0
  53. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/lib/foo/foo.bash +3 -0
  54. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+-std.t +18 -0
  55. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/source-bash+.t +23 -0
  56. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/test.bash +70 -0
  57. data/vendor/git-subrepo/ext/test-more-bash/ext/bashplus/test/use.t +19 -0
  58. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Changes +15 -0
  59. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/License +21 -0
  60. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Makefile +37 -0
  61. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/Meta +28 -0
  62. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/ReadMe.pod +66 -0
  63. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/doc/test-tap.swim +48 -0
  64. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/lib/test/tap.bash +153 -0
  65. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/man/man3/test-tap.3 +119 -0
  66. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/bail_out.t +13 -0
  67. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/done.t +10 -0
  68. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail.t +20 -0
  69. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/fail_fast.t +15 -0
  70. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/helper.bash +9 -0
  71. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/pass.t +9 -0
  72. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/plan.t +10 -0
  73. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/skip_all.t +20 -0
  74. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/tap.t +13 -0
  75. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/bail.t +14 -0
  76. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail.t +7 -0
  77. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/fail_fast.t +12 -0
  78. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-init.t +8 -0
  79. data/vendor/git-subrepo/ext/test-more-bash/ext/test-tap-bash/test/test/skip-all-plan.t +9 -0
  80. data/vendor/git-subrepo/ext/test-more-bash/lib/test/more.bash +95 -0
  81. data/vendor/git-subrepo/ext/test-more-bash/man/man3/test-more.3 +173 -0
  82. data/vendor/git-subrepo/ext/test-more-bash/test/fail.t +20 -0
  83. data/vendor/git-subrepo/ext/test-more-bash/test/more.t +20 -0
  84. data/vendor/git-subrepo/ext/test-more-bash/test/pass.t +9 -0
  85. data/vendor/git-subrepo/ext/test-more-bash/test/setup +8 -0
  86. data/vendor/git-subrepo/ext/test-more-bash/test/skip_all.t +11 -0
  87. data/vendor/git-subrepo/ext/test-more-bash/test/test/fail1.t +12 -0
  88. data/vendor/git-subrepo/ext/test-more-bash/test/test/skip_all.t +10 -0
  89. data/vendor/git-subrepo/lib/git-subrepo +1903 -0
  90. data/vendor/git-subrepo/lib/git-subrepo.d/bash+.bash +1 -0
  91. data/vendor/git-subrepo/lib/git-subrepo.d/help-functions.bash +339 -0
  92. data/vendor/git-subrepo/man/man1/git-subrepo.1 +743 -0
  93. data/vendor/git-subrepo/note/0.4.0 +12 -0
  94. data/vendor/git-subrepo/note/AllGitCmds +148 -0
  95. data/vendor/git-subrepo/note/Cases +32 -0
  96. data/vendor/git-subrepo/note/Commands +33 -0
  97. data/vendor/git-subrepo/note/Dags +199 -0
  98. data/vendor/git-subrepo/note/Gists +7 -0
  99. data/vendor/git-subrepo/note/Links +25 -0
  100. data/vendor/git-subrepo/note/Plugins +10 -0
  101. data/vendor/git-subrepo/note/Spec +39 -0
  102. data/vendor/git-subrepo/note/Story1 +57 -0
  103. data/vendor/git-subrepo/note/ToDo +55 -0
  104. data/vendor/git-subrepo/note/design.swim +137 -0
  105. data/vendor/git-subrepo/note/design2.swim +85 -0
  106. data/vendor/git-subrepo/note/init-test +38 -0
  107. data/vendor/git-subrepo/note/pull-dance.txt +18 -0
  108. data/vendor/git-subrepo/note/recreate-rebase-conflict.sh +56 -0
  109. data/vendor/git-subrepo/note/subtree-rebase-fail-example/test.bash +29 -0
  110. data/vendor/git-subrepo/note/test-subrepo-push.sh +69 -0
  111. data/vendor/git-subrepo/note/test.sh +58 -0
  112. data/vendor/git-subrepo/pkg/bin/generate-completion.pl +210 -0
  113. data/vendor/git-subrepo/pkg/bin/generate-help-functions.pl +89 -0
  114. data/vendor/git-subrepo/share/completion.bash +42 -0
  115. data/vendor/git-subrepo/share/enable-completion.sh +50 -0
  116. data/vendor/git-subrepo/share/git-completion.bash +2738 -0
  117. data/vendor/git-subrepo/share/zsh-completion/_git-subrepo +81 -0
  118. data/vendor/git-subrepo/test/branch-all.t +41 -0
  119. data/vendor/git-subrepo/test/branch-rev-list-one-path.t +43 -0
  120. data/vendor/git-subrepo/test/branch-rev-list.t +47 -0
  121. data/vendor/git-subrepo/test/branch.t +52 -0
  122. data/vendor/git-subrepo/test/clean.t +43 -0
  123. data/vendor/git-subrepo/test/clone-annotated-tag.t +45 -0
  124. data/vendor/git-subrepo/test/clone.t +107 -0
  125. data/vendor/git-subrepo/test/compile.t +19 -0
  126. data/vendor/git-subrepo/test/config.t +58 -0
  127. data/vendor/git-subrepo/test/encode.t +91 -0
  128. data/vendor/git-subrepo/test/error.t +171 -0
  129. data/vendor/git-subrepo/test/fetch.t +43 -0
  130. data/vendor/git-subrepo/test/gitignore.t +61 -0
  131. data/vendor/git-subrepo/test/init.t +64 -0
  132. data/vendor/git-subrepo/test/issue29.t +98 -0
  133. data/vendor/git-subrepo/test/issue95.t +98 -0
  134. data/vendor/git-subrepo/test/issue96.t +96 -0
  135. data/vendor/git-subrepo/test/pull-all.t +38 -0
  136. data/vendor/git-subrepo/test/pull-merge.t +113 -0
  137. data/vendor/git-subrepo/test/pull-message.t +88 -0
  138. data/vendor/git-subrepo/test/pull-new-branch.t +58 -0
  139. data/vendor/git-subrepo/test/pull-ours.t +90 -0
  140. data/vendor/git-subrepo/test/pull-theirs.t +82 -0
  141. data/vendor/git-subrepo/test/pull-twice.t +44 -0
  142. data/vendor/git-subrepo/test/pull-worktree.t +40 -0
  143. data/vendor/git-subrepo/test/pull.t +99 -0
  144. data/vendor/git-subrepo/test/push-after-init.t +51 -0
  145. data/vendor/git-subrepo/test/push-force.t +56 -0
  146. data/vendor/git-subrepo/test/push-new-branch.t +61 -0
  147. data/vendor/git-subrepo/test/push-no-changes.t +29 -0
  148. data/vendor/git-subrepo/test/push-squash.t +56 -0
  149. data/vendor/git-subrepo/test/push.t +176 -0
  150. data/vendor/git-subrepo/test/reclone.t +45 -0
  151. data/vendor/git-subrepo/test/repo/bar/HEAD +1 -0
  152. data/vendor/git-subrepo/test/repo/bar/config +4 -0
  153. data/vendor/git-subrepo/test/repo/bar/objects/1f/0c4b264caed0126814a0ede851a1e0b4e16ae6 +0 -0
  154. data/vendor/git-subrepo/test/repo/bar/objects/87/46903fdb1b9c2101377880125917c2e05b4d69 +0 -0
  155. data/vendor/git-subrepo/test/repo/bar/objects/94/c86ffc745232d89f78c6f895e11e71272518db +0 -0
  156. data/vendor/git-subrepo/test/repo/bar/objects/c6/76c57b6576743fa56278527aa60ebd2e202a7c +0 -0
  157. data/vendor/git-subrepo/test/repo/bar/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  158. data/vendor/git-subrepo/test/repo/bar/objects/f6/2a8ff3feadf39b0a98f1a86ec6d1eb33858ee9 +0 -0
  159. data/vendor/git-subrepo/test/repo/bar/refs/heads/master +1 -0
  160. data/vendor/git-subrepo/test/repo/bar/refs/tags/A +1 -0
  161. data/vendor/git-subrepo/test/repo/foo/HEAD +1 -0
  162. data/vendor/git-subrepo/test/repo/foo/config +4 -0
  163. data/vendor/git-subrepo/test/repo/foo/objects/a0/f4cdaaf533a936296cdebbed8206c3b9ededa8 +0 -0
  164. data/vendor/git-subrepo/test/repo/foo/objects/e2/1291a1ad392a9d4c51dd9586804f1467b28afd +0 -0
  165. data/vendor/git-subrepo/test/repo/foo/objects/e6/9de29bb2d1d6434b8b29ae775ad8c2e48c5391 +0 -0
  166. data/vendor/git-subrepo/test/repo/foo/refs/heads/master +1 -0
  167. data/vendor/git-subrepo/test/repo/init/HEAD +1 -0
  168. data/vendor/git-subrepo/test/repo/init/config +5 -0
  169. data/vendor/git-subrepo/test/repo/init/objects/11/523f5dcf03b4c89b592dc8a3d0308f68da2386 +0 -0
  170. data/vendor/git-subrepo/test/repo/init/objects/14/2addf8ec5f37334e837440122c62f2c68a29ad +0 -0
  171. data/vendor/git-subrepo/test/repo/init/objects/32/5180321750a21cd7a4e7ecda319e557a4f6a09 +2 -0
  172. data/vendor/git-subrepo/test/repo/init/objects/3d/918c6901c02f43af5d31779dd5e1f9166aeb36 +0 -0
  173. data/vendor/git-subrepo/test/repo/init/objects/3e/4cb596066dce63ba4d047abddb677389b65e19 +0 -0
  174. data/vendor/git-subrepo/test/repo/init/objects/4b/6e53022e7a04f07887697e4f3d7c377fd9822b +0 -0
  175. data/vendor/git-subrepo/test/repo/init/objects/58/931fc1bd559b59c41ea738fc7ad04f9ad01bd3 +0 -0
  176. data/vendor/git-subrepo/test/repo/init/objects/5e/c0c28e1b806f25efdca18fcf7a74b49c3755bd +0 -0
  177. data/vendor/git-subrepo/test/repo/init/objects/75/fa6584e748f57eff06eebdc55e9ac21d4fcbf2 +1 -0
  178. data/vendor/git-subrepo/test/repo/init/objects/80/2d5edbd5e1cb7fca82b5bd38e7c8a0a496fb20 +0 -0
  179. data/vendor/git-subrepo/test/repo/init/objects/94/7b3d714c38791e95ad6f928b48c98bb8708acd +0 -0
  180. data/vendor/git-subrepo/test/repo/init/objects/95/e1f2df3f4d5f3d7a60588c25a7ca8a913d3c2a +1 -0
  181. data/vendor/git-subrepo/test/repo/init/objects/b1/5f4a7666baf40d949548ead946a3370e273479 +0 -0
  182. data/vendor/git-subrepo/test/repo/init/objects/c3/ee8978c4c5d84c3b7d00ba8e5906933d027882 +0 -0
  183. data/vendor/git-subrepo/test/repo/init/objects/c8/b0bffbc405ef3fad7354ff833fbec36d67ddfa +3 -0
  184. data/vendor/git-subrepo/test/repo/init/objects/dd/8bdb934ec848137f011fe423b185505c343626 +2 -0
  185. data/vendor/git-subrepo/test/repo/init/objects/e2/9be58c767cfeb27235c995d293a7d71aac0135 +2 -0
  186. data/vendor/git-subrepo/test/repo/init/objects/ee/1224401fc6aac595145fa727dcf6706ac8aec1 +1 -0
  187. data/vendor/git-subrepo/test/repo/init/objects/f1/cc1a657b2e805c400f5dcaaa76bd29c6178b1b +0 -0
  188. data/vendor/git-subrepo/test/repo/init/refs/heads/master +1 -0
  189. data/vendor/git-subrepo/test/setup +205 -0
  190. data/vendor/git-subrepo/test/status.t +68 -0
  191. data/vendor/git-subrepo/test/submodule.t +45 -0
  192. 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
+