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,28 @@
|
|
|
1
|
+
=meta: 0.0.2
|
|
2
|
+
|
|
3
|
+
name: bashplus
|
|
4
|
+
version: 0.0.7
|
|
5
|
+
abstract: Modern Bash Programming
|
|
6
|
+
homepage: http://bpan.org/package/bashplus/
|
|
7
|
+
|
|
8
|
+
license: MIT
|
|
9
|
+
copyright: 2013-2016
|
|
10
|
+
author:
|
|
11
|
+
name: Ingy döt Net
|
|
12
|
+
email: ingy@ingy.net
|
|
13
|
+
github: ingydotnet
|
|
14
|
+
twitter: ingydotnet
|
|
15
|
+
freenode: ingy
|
|
16
|
+
homepage: http://ingy.net
|
|
17
|
+
|
|
18
|
+
requires:
|
|
19
|
+
bash: 3.2.0
|
|
20
|
+
test:
|
|
21
|
+
cmd: make test
|
|
22
|
+
install:
|
|
23
|
+
cmd: make install
|
|
24
|
+
|
|
25
|
+
devel:
|
|
26
|
+
git: git@github.org/ingydotnet/bashplus
|
|
27
|
+
irc: irc.freenode.net/bpan
|
|
28
|
+
bug: https://github.com/ingydotnet/bashplus/issues/
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
=pod
|
|
2
|
+
|
|
3
|
+
=for comment
|
|
4
|
+
DO NOT EDIT. This Pod was generated by Swim v0.1.41.
|
|
5
|
+
See http://github.com/ingydotnet/swim-pm#readme
|
|
6
|
+
|
|
7
|
+
=encoding utf8
|
|
8
|
+
|
|
9
|
+
=head1 Name
|
|
10
|
+
|
|
11
|
+
Bash+(1) - Modern Bash Programming
|
|
12
|
+
|
|
13
|
+
=for html
|
|
14
|
+
<a href="https://travis-ci.org/ingydotnet/bashplus"><img src="https://travis-ci.org/ingydotnet/bashplus.png" alt="bashplus"></a>
|
|
15
|
+
|
|
16
|
+
=head1 Synopsis
|
|
17
|
+
|
|
18
|
+
source bash+ :std :array
|
|
19
|
+
|
|
20
|
+
use Foo::Bar this that
|
|
21
|
+
|
|
22
|
+
Array.new args "$@"
|
|
23
|
+
|
|
24
|
+
if args.empty?; then
|
|
25
|
+
die "I need args!"
|
|
26
|
+
fi
|
|
27
|
+
|
|
28
|
+
Foo::Bar.new foo args
|
|
29
|
+
|
|
30
|
+
this is awesome # <= this is a real command! (You just imported it)
|
|
31
|
+
|
|
32
|
+
=head1 Description
|
|
33
|
+
|
|
34
|
+
Bash+ is just Bash... B<plus> some libraries that can make Bash programming a
|
|
35
|
+
lot nicer.
|
|
36
|
+
|
|
37
|
+
=for comment # Installation
|
|
38
|
+
|
|
39
|
+
Get the source code from GitHub:
|
|
40
|
+
|
|
41
|
+
git clone git@github.com:ingydotnet/bashplus
|
|
42
|
+
|
|
43
|
+
Then run:
|
|
44
|
+
|
|
45
|
+
make test
|
|
46
|
+
make install # Possibly with 'sudo'
|
|
47
|
+
|
|
48
|
+
=head1 Usage
|
|
49
|
+
|
|
50
|
+
For now look at some libraries the use Bash+:
|
|
51
|
+
|
|
52
|
+
=over
|
|
53
|
+
|
|
54
|
+
=item * L<https://github.com/ingydotnet/git-hub>
|
|
55
|
+
|
|
56
|
+
=item * L<https://github.com/ingydotnet/json-bash>
|
|
57
|
+
|
|
58
|
+
=item * L<https://github.com/ingydotnet/test-more-bash>
|
|
59
|
+
|
|
60
|
+
=back
|
|
61
|
+
|
|
62
|
+
=head1 Status
|
|
63
|
+
|
|
64
|
+
If you are interested in chatting about this, C</join #bpan> on
|
|
65
|
+
irc.freenode.net.
|
|
66
|
+
|
|
67
|
+
=head1 Author
|
|
68
|
+
|
|
69
|
+
Written by Ingy döt Net <ingy@ingy.net>
|
|
70
|
+
|
|
71
|
+
=head1 Copyright & License
|
|
72
|
+
|
|
73
|
+
Copyright 2013-2016. Ingy döt Net.
|
|
74
|
+
|
|
75
|
+
The MIT License (MIT).
|
|
76
|
+
|
|
77
|
+
=cut
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#------------------------------------------------------------------------------
|
|
3
|
+
# Bash+ - Modern Bash Programming
|
|
4
|
+
#
|
|
5
|
+
# Copyright (c) 2013-2016 Ingy döt Net
|
|
6
|
+
#------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
set -e
|
|
9
|
+
shopt -s compat31&>/dev/null||:
|
|
10
|
+
|
|
11
|
+
#------------------------------------------------------------------------------
|
|
12
|
+
# Determine how `bash+` was called, and do the right thing:
|
|
13
|
+
#------------------------------------------------------------------------------
|
|
14
|
+
if [ "${BASH_SOURCE[0]}" != "$0" ]; then
|
|
15
|
+
# 'bash+' is being sourced:
|
|
16
|
+
[[ "${BASH_SOURCE[0]}" =~ /bin/bash\\+$ ]] || {
|
|
17
|
+
echo "Invalid Bash+ path '${BASH_SOURCE[0]}'" 2> /dev/null
|
|
18
|
+
exit 1
|
|
19
|
+
}
|
|
20
|
+
source "${BASH_SOURCE[0]%/bin/*}"/lib/bash+.bash || return $?
|
|
21
|
+
bash+:import "$@"
|
|
22
|
+
return $?
|
|
23
|
+
else
|
|
24
|
+
if [ $# -eq 1 -a "$1" == --version ]; then
|
|
25
|
+
echo 'bash+ version 0.0.7'
|
|
26
|
+
else
|
|
27
|
+
cat <<...
|
|
28
|
+
|
|
29
|
+
Greetings modern Bash programmer. Welcome to Bash+!
|
|
30
|
+
|
|
31
|
+
Bash+ is framework that makes Bash programming more like Ruby and Perl.
|
|
32
|
+
|
|
33
|
+
See: https://github.com/bpan-org/bashplus
|
|
34
|
+
|
|
35
|
+
If you got here trying to use bash+ in a program, you need to source it:
|
|
36
|
+
|
|
37
|
+
source bash+
|
|
38
|
+
|
|
39
|
+
Happy Bash Hacking!
|
|
40
|
+
|
|
41
|
+
...
|
|
42
|
+
fi
|
|
43
|
+
fi
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
Bash+(1)
|
|
2
|
+
========
|
|
3
|
+
|
|
4
|
+
Modern Bash Programming
|
|
5
|
+
|
|
6
|
+
<badge travis ingydotnet/bashplus>
|
|
7
|
+
|
|
8
|
+
= Synopsis
|
|
9
|
+
|
|
10
|
+
source bash+ :std :array
|
|
11
|
+
|
|
12
|
+
use Foo::Bar this that
|
|
13
|
+
|
|
14
|
+
Array.new args "$@"
|
|
15
|
+
|
|
16
|
+
if args.empty?; then
|
|
17
|
+
die "I need args!"
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
Foo::Bar.new foo args
|
|
21
|
+
|
|
22
|
+
this is awesome # <= this is a real command! (You just imported it)
|
|
23
|
+
|
|
24
|
+
= Description
|
|
25
|
+
|
|
26
|
+
Bash+ is just Bash... *plus* some libraries that can make Bash programming a
|
|
27
|
+
lot nicer.
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
Get the source code from GitHub:
|
|
32
|
+
|
|
33
|
+
git clone git@github.com:ingydotnet/bashplus
|
|
34
|
+
|
|
35
|
+
Then run:
|
|
36
|
+
|
|
37
|
+
make test
|
|
38
|
+
make install # Possibly with 'sudo'
|
|
39
|
+
|
|
40
|
+
= Usage
|
|
41
|
+
|
|
42
|
+
For now look at some libraries the use Bash+:
|
|
43
|
+
|
|
44
|
+
* https://github.com/ingydotnet/git-hub
|
|
45
|
+
* https://github.com/ingydotnet/json-bash
|
|
46
|
+
* https://github.com/ingydotnet/test-more-bash
|
|
47
|
+
|
|
48
|
+
= Status
|
|
49
|
+
|
|
50
|
+
If you are interested in chatting about this, `/join #bpan` on
|
|
51
|
+
irc.freenode.net.
|
|
52
|
+
|
|
53
|
+
= Author
|
|
54
|
+
|
|
55
|
+
Written by Ingy döt Net <ingy@ingy.net>
|
|
56
|
+
|
|
57
|
+
= Copyright & License
|
|
58
|
+
|
|
59
|
+
Copyright 2013-2016. Ingy döt Net.
|
|
60
|
+
|
|
61
|
+
The MIT License (MIT).
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# bash+ - Modern Bash Programming
|
|
2
|
+
#
|
|
3
|
+
# Copyright (c) 2013-2016 Ingy döt Net
|
|
4
|
+
|
|
5
|
+
{
|
|
6
|
+
bash+:version-check() {
|
|
7
|
+
test $1 -ge 4 && return
|
|
8
|
+
test $1 -eq 3 -a $2 -ge 2 && return
|
|
9
|
+
echo "Bash version 3.2 or higher required for 'git hub'" >&2
|
|
10
|
+
exit 1
|
|
11
|
+
}
|
|
12
|
+
bash+:version-check "${BASH_VERSINFO[@]}"
|
|
13
|
+
unset -f Bash:version-check
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
set -e
|
|
17
|
+
|
|
18
|
+
[ -z "$BASHPLUS_VERSION" ] || return 0
|
|
19
|
+
|
|
20
|
+
BASHPLUS_VERSION='0.0.7'
|
|
21
|
+
|
|
22
|
+
@() { echo "$@"; }
|
|
23
|
+
bash+:export:std() { @ use die warn; }
|
|
24
|
+
|
|
25
|
+
# Source a bash library call import on it:
|
|
26
|
+
bash+:use() {
|
|
27
|
+
local library_name="${1:?bash+:use requires library name}"; shift
|
|
28
|
+
local library_path=; library_path="$(bash+:findlib $library_name)"
|
|
29
|
+
[[ -n $library_path ]] || {
|
|
30
|
+
bash+:die "Can't find library '$library_name'." 1
|
|
31
|
+
}
|
|
32
|
+
source "$library_path"
|
|
33
|
+
if bash+:can "$library_name:import"; then
|
|
34
|
+
"$library_name:import" "$@"
|
|
35
|
+
else
|
|
36
|
+
bash+:import "$@"
|
|
37
|
+
fi
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# Copy bash+: functions to unprefixed functions
|
|
41
|
+
bash+:import() {
|
|
42
|
+
local arg=
|
|
43
|
+
for arg; do
|
|
44
|
+
if [[ $arg =~ ^: ]]; then
|
|
45
|
+
bash+:import `bash+:export$arg`
|
|
46
|
+
else
|
|
47
|
+
bash+:fcopy bash+:$arg $arg
|
|
48
|
+
fi
|
|
49
|
+
done
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Function copy
|
|
53
|
+
bash+:fcopy() {
|
|
54
|
+
bash+:can "${1:?bash+:fcopy requires an input function name}" ||
|
|
55
|
+
bash+:die "'$1' is not a function" 2
|
|
56
|
+
local func=; func=$(type "$1" 3>/dev/null | tail -n+3)
|
|
57
|
+
[[ -n $3 ]] && "$3"
|
|
58
|
+
eval "${2:?bash+:fcopy requires an output function name}() $func"
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# Find the path of a library
|
|
62
|
+
bash+:findlib() {
|
|
63
|
+
local library_name=; library_name="$(tr 'A-Z' 'a-z' <<< "${1//:://}").bash"
|
|
64
|
+
local lib="${BASHPLUSLIB:-${BASHLIB:-$PATH}}"
|
|
65
|
+
library_name="${library_name//+/\\+}"
|
|
66
|
+
find ${lib//:/ } -name ${library_name##*/} 2>/dev/null |
|
|
67
|
+
grep -E "$library_name\$" |
|
|
68
|
+
head -n1
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
bash+:die() {
|
|
72
|
+
local msg="${1:-Died}"
|
|
73
|
+
printf "${msg//\\n/$'\n'}" >&2
|
|
74
|
+
local trailing_newline_re=$'\n''$'
|
|
75
|
+
[[ $msg =~ $trailing_newline_re ]] && exit 1
|
|
76
|
+
|
|
77
|
+
local c=($(caller ${DIE_STACK_LEVEL:-${2:-0}}))
|
|
78
|
+
(( ${#c[@]} == 2 )) &&
|
|
79
|
+
msg=" at line %d of %s" ||
|
|
80
|
+
msg=" at line %d in %s of %s"
|
|
81
|
+
printf "$msg\n" ${c[@]} >&2
|
|
82
|
+
exit 1
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
bash+:warn() {
|
|
86
|
+
local msg="${1:-Warning}"
|
|
87
|
+
printf "${msg//\\n/$'\n'}\n" >&2
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
bash+:can() {
|
|
91
|
+
[[ $(type -t "${1:?bash+:can requires a function name}") == function ]]
|
|
92
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
|
|
2
|
+
.\"
|
|
3
|
+
.\" Standard preamble:
|
|
4
|
+
.\" ========================================================================
|
|
5
|
+
.de Sp \" Vertical space (when we can't use .PP)
|
|
6
|
+
.if t .sp .5v
|
|
7
|
+
.if n .sp
|
|
8
|
+
..
|
|
9
|
+
.de Vb \" Begin verbatim text
|
|
10
|
+
.ft CW
|
|
11
|
+
.nf
|
|
12
|
+
.ne \\$1
|
|
13
|
+
..
|
|
14
|
+
.de Ve \" End verbatim text
|
|
15
|
+
.ft R
|
|
16
|
+
.fi
|
|
17
|
+
..
|
|
18
|
+
.\" Set up some character translations and predefined strings. \*(-- will
|
|
19
|
+
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
|
20
|
+
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
|
|
21
|
+
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
|
|
22
|
+
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
|
|
23
|
+
.\" nothing in troff, for use with C<>.
|
|
24
|
+
.tr \(*W-
|
|
25
|
+
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
|
26
|
+
.ie n \{\
|
|
27
|
+
. ds -- \(*W-
|
|
28
|
+
. ds PI pi
|
|
29
|
+
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
|
30
|
+
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
|
31
|
+
. ds L" ""
|
|
32
|
+
. ds R" ""
|
|
33
|
+
. ds C` ""
|
|
34
|
+
. ds C' ""
|
|
35
|
+
'br\}
|
|
36
|
+
.el\{\
|
|
37
|
+
. ds -- \|\(em\|
|
|
38
|
+
. ds PI \(*p
|
|
39
|
+
. ds L" ``
|
|
40
|
+
. ds R" ''
|
|
41
|
+
. ds C`
|
|
42
|
+
. ds C'
|
|
43
|
+
'br\}
|
|
44
|
+
.\"
|
|
45
|
+
.\" Escape single quotes in literal strings from groff's Unicode transform.
|
|
46
|
+
.ie \n(.g .ds Aq \(aq
|
|
47
|
+
.el .ds Aq '
|
|
48
|
+
.\"
|
|
49
|
+
.\" If the F register is turned on, we'll generate index entries on stderr for
|
|
50
|
+
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
|
|
51
|
+
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
|
52
|
+
.\" output yourself in some meaningful fashion.
|
|
53
|
+
.\"
|
|
54
|
+
.\" Avoid warning from groff about undefined register 'F'.
|
|
55
|
+
.de IX
|
|
56
|
+
..
|
|
57
|
+
.nr rF 0
|
|
58
|
+
.if \n(.g .if rF .nr rF 1
|
|
59
|
+
.if (\n(rF:(\n(.g==0)) \{
|
|
60
|
+
. if \nF \{
|
|
61
|
+
. de IX
|
|
62
|
+
. tm Index:\\$1\t\\n%\t"\\$2"
|
|
63
|
+
..
|
|
64
|
+
. if !\nF==2 \{
|
|
65
|
+
. nr % 0
|
|
66
|
+
. nr F 2
|
|
67
|
+
. \}
|
|
68
|
+
. \}
|
|
69
|
+
.\}
|
|
70
|
+
.rr rF
|
|
71
|
+
.\" ========================================================================
|
|
72
|
+
.\"
|
|
73
|
+
.IX Title "Bash+(1) 1"
|
|
74
|
+
.TH Bash+(1) 1 "January 2016" "Generated by Swim v0.1.41" "Modern Bash Programming"
|
|
75
|
+
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
|
76
|
+
.\" way too many mistakes in technical documents.
|
|
77
|
+
.if n .ad l
|
|
78
|
+
.nh
|
|
79
|
+
.SH "Name"
|
|
80
|
+
.IX Header "Name"
|
|
81
|
+
Bash+(1) \- Modern Bash Programming
|
|
82
|
+
.SH "Synopsis"
|
|
83
|
+
.IX Header "Synopsis"
|
|
84
|
+
.Vb 1
|
|
85
|
+
\& source bash+ :std :array
|
|
86
|
+
\&
|
|
87
|
+
\& use Foo::Bar this that
|
|
88
|
+
\&
|
|
89
|
+
\& Array.new args "$@"
|
|
90
|
+
\&
|
|
91
|
+
\& if args.empty?; then
|
|
92
|
+
\& die "I need args!"
|
|
93
|
+
\& fi
|
|
94
|
+
\&
|
|
95
|
+
\& Foo::Bar.new foo args
|
|
96
|
+
\&
|
|
97
|
+
\& this is awesome # <= this is a real command! (You just imported it)
|
|
98
|
+
.Ve
|
|
99
|
+
.SH "Description"
|
|
100
|
+
.IX Header "Description"
|
|
101
|
+
Bash+ is just Bash... \fBplus\fR some libraries that can make Bash programming a lot nicer.
|
|
102
|
+
.PP
|
|
103
|
+
Get the source code from GitHub:
|
|
104
|
+
.PP
|
|
105
|
+
.Vb 1
|
|
106
|
+
\& git clone git@github.com:ingydotnet/bashplus
|
|
107
|
+
.Ve
|
|
108
|
+
.PP
|
|
109
|
+
Then run:
|
|
110
|
+
.PP
|
|
111
|
+
.Vb 2
|
|
112
|
+
\& make test
|
|
113
|
+
\& make install # Possibly with \*(Aqsudo\*(Aq
|
|
114
|
+
.Ve
|
|
115
|
+
.SH "Usage"
|
|
116
|
+
.IX Header "Usage"
|
|
117
|
+
For now look at some libraries the use Bash+:
|
|
118
|
+
.IP "\(bu" 4
|
|
119
|
+
<https://github.com/ingydotnet/git\-hub>
|
|
120
|
+
.IP "\(bu" 4
|
|
121
|
+
<https://github.com/ingydotnet/json\-bash>
|
|
122
|
+
.IP "\(bu" 4
|
|
123
|
+
<https://github.com/ingydotnet/test\-more\-bash>
|
|
124
|
+
.SH "Status"
|
|
125
|
+
.IX Header "Status"
|
|
126
|
+
If you are interested in chatting about this, \f(CW\*(C`/join #bpan\*(C'\fR on irc.freenode.net.
|
|
127
|
+
.SH "Author"
|
|
128
|
+
.IX Header "Author"
|
|
129
|
+
Written by Ingy döt Net <ingy@ingy.net>
|
|
130
|
+
.SH "Copyright & License"
|
|
131
|
+
.IX Header "Copyright & License"
|
|
132
|
+
Copyright 2013\-2016. Ingy döt Net.
|
|
133
|
+
.PP
|
|
134
|
+
The \s-1MIT\s0 License (\s-1MIT\s0).
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
.\" Automatically generated by Pod::Man 2.27 (Pod::Simple 3.28)
|
|
2
|
+
.\"
|
|
3
|
+
.\" Standard preamble:
|
|
4
|
+
.\" ========================================================================
|
|
5
|
+
.de Sp \" Vertical space (when we can't use .PP)
|
|
6
|
+
.if t .sp .5v
|
|
7
|
+
.if n .sp
|
|
8
|
+
..
|
|
9
|
+
.de Vb \" Begin verbatim text
|
|
10
|
+
.ft CW
|
|
11
|
+
.nf
|
|
12
|
+
.ne \\$1
|
|
13
|
+
..
|
|
14
|
+
.de Ve \" End verbatim text
|
|
15
|
+
.ft R
|
|
16
|
+
.fi
|
|
17
|
+
..
|
|
18
|
+
.\" Set up some character translations and predefined strings. \*(-- will
|
|
19
|
+
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
|
|
20
|
+
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
|
|
21
|
+
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
|
|
22
|
+
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
|
|
23
|
+
.\" nothing in troff, for use with C<>.
|
|
24
|
+
.tr \(*W-
|
|
25
|
+
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
|
|
26
|
+
.ie n \{\
|
|
27
|
+
. ds -- \(*W-
|
|
28
|
+
. ds PI pi
|
|
29
|
+
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
|
|
30
|
+
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
|
|
31
|
+
. ds L" ""
|
|
32
|
+
. ds R" ""
|
|
33
|
+
. ds C` ""
|
|
34
|
+
. ds C' ""
|
|
35
|
+
'br\}
|
|
36
|
+
.el\{\
|
|
37
|
+
. ds -- \|\(em\|
|
|
38
|
+
. ds PI \(*p
|
|
39
|
+
. ds L" ``
|
|
40
|
+
. ds R" ''
|
|
41
|
+
. ds C`
|
|
42
|
+
. ds C'
|
|
43
|
+
'br\}
|
|
44
|
+
.\"
|
|
45
|
+
.\" Escape single quotes in literal strings from groff's Unicode transform.
|
|
46
|
+
.ie \n(.g .ds Aq \(aq
|
|
47
|
+
.el .ds Aq '
|
|
48
|
+
.\"
|
|
49
|
+
.\" If the F register is turned on, we'll generate index entries on stderr for
|
|
50
|
+
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
|
|
51
|
+
.\" entries marked with X<> in POD. Of course, you'll have to process the
|
|
52
|
+
.\" output yourself in some meaningful fashion.
|
|
53
|
+
.\"
|
|
54
|
+
.\" Avoid warning from groff about undefined register 'F'.
|
|
55
|
+
.de IX
|
|
56
|
+
..
|
|
57
|
+
.nr rF 0
|
|
58
|
+
.if \n(.g .if rF .nr rF 1
|
|
59
|
+
.if (\n(rF:(\n(.g==0)) \{
|
|
60
|
+
. if \nF \{
|
|
61
|
+
. de IX
|
|
62
|
+
. tm Index:\\$1\t\\n%\t"\\$2"
|
|
63
|
+
..
|
|
64
|
+
. if !\nF==2 \{
|
|
65
|
+
. nr % 0
|
|
66
|
+
. nr F 2
|
|
67
|
+
. \}
|
|
68
|
+
. \}
|
|
69
|
+
.\}
|
|
70
|
+
.rr rF
|
|
71
|
+
.\" ========================================================================
|
|
72
|
+
.\"
|
|
73
|
+
.IX Title "Bash+(1) 1"
|
|
74
|
+
.TH Bash+(1) 1 "January 2016" "Generated by Swim v0.1.41" "Modern Bash Programming"
|
|
75
|
+
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
|
|
76
|
+
.\" way too many mistakes in technical documents.
|
|
77
|
+
.if n .ad l
|
|
78
|
+
.nh
|
|
79
|
+
.SH "Name"
|
|
80
|
+
.IX Header "Name"
|
|
81
|
+
Bash+(1) \- Modern Bash Programming
|
|
82
|
+
.SH "Synopsis"
|
|
83
|
+
.IX Header "Synopsis"
|
|
84
|
+
.Vb 1
|
|
85
|
+
\& source bash+ :std :array
|
|
86
|
+
\&
|
|
87
|
+
\& use Foo::Bar this that
|
|
88
|
+
\&
|
|
89
|
+
\& Array.new args "$@"
|
|
90
|
+
\&
|
|
91
|
+
\& if args.empty?; then
|
|
92
|
+
\& die "I need args!"
|
|
93
|
+
\& fi
|
|
94
|
+
\&
|
|
95
|
+
\& Foo::Bar.new foo args
|
|
96
|
+
\&
|
|
97
|
+
\& this is awesome # <= this is a real command! (You just imported it)
|
|
98
|
+
.Ve
|
|
99
|
+
.SH "Description"
|
|
100
|
+
.IX Header "Description"
|
|
101
|
+
Bash+ is just Bash... \fBplus\fR some libraries that can make Bash programming a lot nicer.
|
|
102
|
+
.PP
|
|
103
|
+
Get the source code from GitHub:
|
|
104
|
+
.PP
|
|
105
|
+
.Vb 1
|
|
106
|
+
\& git clone git@github.com:ingydotnet/bashplus
|
|
107
|
+
.Ve
|
|
108
|
+
.PP
|
|
109
|
+
Then run:
|
|
110
|
+
.PP
|
|
111
|
+
.Vb 2
|
|
112
|
+
\& make test
|
|
113
|
+
\& make install # Possibly with \*(Aqsudo\*(Aq
|
|
114
|
+
.Ve
|
|
115
|
+
.SH "Usage"
|
|
116
|
+
.IX Header "Usage"
|
|
117
|
+
For now look at some libraries the use Bash+:
|
|
118
|
+
.IP "\(bu" 4
|
|
119
|
+
<https://github.com/ingydotnet/git\-hub>
|
|
120
|
+
.IP "\(bu" 4
|
|
121
|
+
<https://github.com/ingydotnet/json\-bash>
|
|
122
|
+
.IP "\(bu" 4
|
|
123
|
+
<https://github.com/ingydotnet/test\-more\-bash>
|
|
124
|
+
.SH "Status"
|
|
125
|
+
.IX Header "Status"
|
|
126
|
+
If you are interested in chatting about this, \f(CW\*(C`/join #bpan\*(C'\fR on irc.freenode.net.
|
|
127
|
+
.SH "Author"
|
|
128
|
+
.IX Header "Author"
|
|
129
|
+
Written by Ingy döt Net <ingy@ingy.net>
|
|
130
|
+
.SH "Copyright & License"
|
|
131
|
+
.IX Header "Copyright & License"
|
|
132
|
+
Copyright 2013\-2016. Ingy döt Net.
|
|
133
|
+
.PP
|
|
134
|
+
The \s-1MIT\s0 License (\s-1MIT\s0).
|