oliver 1.8.9.7 → 2.0
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/IDEAS.md +1 -19
- data/README.md +36 -63
- data/bin/olive +6 -1
- data/bin/oliver +1 -4
- data/community/iOS-external-libraries-istx25.yml +74 -72
- data/lib/oliver/commands.rb +105 -0
- data/lib/oliver/file_manager.rb +11 -4
- data/lib/oliver/file_name.rb +4 -0
- data/lib/oliver/hash.rb +10 -0
- data/lib/oliver/settings.rb +2 -1
- data/lib/oliver/version.rb +1 -2
- data/lib/oliver.rb +84 -4
- data/oliver.gemspec +6 -6
- metadata +21 -25
- data/lib/oliver/argument_files/help.rb +0 -43
- data/lib/oliver/argument_files/init.rb +0 -31
- data/lib/oliver/argument_files/install.rb +0 -94
- data/lib/oliver/argument_files/list.rb +0 -28
- data/lib/oliver/argument_files/update.rb +0 -11
- data/lib/oliver/arguments.rb +0 -48
- data/lib/oliver/oliver_file_name.rb +0 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 62310d3009d7a1fc2737c23f862a10d414e231fc
|
4
|
+
data.tar.gz: 3402e843e55371c10234c02a4509c10ba45a4989
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: feca6d846c2f4145d64d7938898f673b65cf7730f415ea6aaace2bbffe461135e1f358d6feca8a6821530b4d0c29b7ecef62d4804fe9bca496fc8370ef6ee65a
|
7
|
+
data.tar.gz: 17135d494ae3e0d00a8481b5000136291cd433cb9b5b48199f123930938a07e31b578ea09cf544a4d7825882f742a1f76c620f52dddffcbef9f1d02667b40d64
|
data/IDEAS.md
CHANGED
@@ -5,25 +5,7 @@ ideas that should or have already been implemented.
|
|
5
5
|
|
6
6
|
- [x] ~~make the backup directory hidden (`.backup`)~~
|
7
7
|
|
8
|
-
- [
|
9
|
-
|
10
|
-
```bash
|
11
|
-
olive/ already exists.
|
12
|
-
dotfiles was cloned.
|
13
|
-
```
|
14
|
-
|
15
|
-
etc, etc. otherwise, this should be defaulted to silent.
|
16
|
-
|
17
|
-
this should also be able to be set through the Olivefile
|
18
|
-
|
19
|
-
```bash
|
20
|
-
repos:
|
21
|
-
- "trommel/oliver"
|
22
|
-
|
23
|
-
prefs:
|
24
|
-
- "verbose"
|
25
|
-
- "no colour" # this too :P
|
26
|
-
```
|
8
|
+
- [x] add silent mode (`--silent`) so commands will hide output
|
27
9
|
|
28
10
|
- [x] when running `olive list`, list the repos that are currently in the directory against
|
29
11
|
the repos that are currently being tracked. repos that are in both (the `Olivefile` and the current directory)
|
data/README.md
CHANGED
@@ -3,11 +3,8 @@ oliver
|
|
3
3
|
|
4
4
|
[](http://badge.fury.io/rb/oliver)
|
5
5
|
|
6
|
-
oliver manages your local GitHub projects
|
7
|
-
|
8
|
-
|
9
|
-
> "Like podfiles for Git repos."
|
10
|
-
-- [@istx25](https://github.com/istx25)
|
6
|
+
oliver manages your local GitHub projects in one simple file. It's like
|
7
|
+
[CocoaPod's](http://cocoapods.org/) "podfiles", but for your Git repos.
|
11
8
|
|
12
9
|
Installation
|
13
10
|
------------
|
@@ -23,45 +20,44 @@ Documentation
|
|
23
20
|
|
24
21
|
### Example
|
25
22
|
|
26
|
-
Create the base `.
|
23
|
+
Create the base `.oliver`
|
27
24
|
|
28
25
|
```bash
|
29
26
|
$ cd projects
|
30
27
|
$ olive init
|
31
|
-
$ $EDITOR .
|
28
|
+
$ $EDITOR .oliver
|
32
29
|
```
|
33
|
-
and then add whatever you'd like to the
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
30
|
+
and then add whatever you'd like to the file (write in JSON)
|
31
|
+
|
32
|
+
```json
|
33
|
+
{
|
34
|
+
"repos": {
|
35
|
+
"trommel": [
|
36
|
+
"oliver",
|
37
|
+
"textymous"
|
38
|
+
],
|
39
|
+
"istx25": [
|
40
|
+
"Fluorescent",
|
41
|
+
"dotfiles"
|
42
|
+
],
|
43
|
+
"misc": [
|
44
|
+
"https://exampleserver.com/repo"
|
45
|
+
]
|
46
|
+
}
|
47
|
+
}
|
48
48
|
```
|
49
49
|
|
50
|
-
-
|
51
|
-
- `Misc` is preferred syntax for use
|
52
|
-
when there's only one repo by an author in
|
53
|
-
your YAML file. With `Misc`, use the full URL
|
54
|
-
(for support with non-GitHub repos)
|
50
|
+
- Use `Misc` for URLs that aren't hosted on GitHub
|
55
51
|
|
56
52
|
### Initializing the root
|
57
53
|
|
58
54
|
```bash
|
59
|
-
$ olive init
|
55
|
+
$ olive init
|
60
56
|
```
|
61
57
|
|
62
|
-
### Clones/Remove repos based on
|
58
|
+
### Clones/Remove repos based on `.olive`
|
63
59
|
|
64
|
-
Clones repos
|
60
|
+
Clones repos listedy and
|
65
61
|
removes ones saved locally that aren't found
|
66
62
|
in the file
|
67
63
|
|
@@ -77,6 +73,10 @@ List all of the repos that are being tracked
|
|
77
73
|
$ olive list
|
78
74
|
```
|
79
75
|
|
76
|
+
The + (plus sign) next to the repo shows that it'll be cloned on the next
|
77
|
+
`olive install`. The # (pound sign) next to the repo
|
78
|
+
means it'll remain unaffected.
|
79
|
+
|
80
80
|
### Update (`git pull`) each repo
|
81
81
|
|
82
82
|
Essentially run `git pull` in each
|
@@ -86,49 +86,22 @@ individual repo
|
|
86
86
|
$ olive update
|
87
87
|
```
|
88
88
|
|
89
|
-
Notes
|
90
|
-
-----
|
91
|
-
|
92
|
-
- Arguments after the actual arguments will be ignored, for example:
|
93
|
-
|
94
|
-
```bash
|
95
|
-
# everything after "repo_name" will be ignored
|
96
|
-
$ olive init -d repo_name here are more arguments
|
97
|
-
```
|
98
|
-
|
99
|
-
Extras
|
100
|
-
------
|
101
|
-
|
102
|
-
oliver uses [rainbow](https://github.com/sickill/rainbow), a gem for colouring the Terminal prompt.
|
103
|
-
If you want to use it, just prepend `colour=on` to any olive command.
|
104
|
-
|
105
|
-
If you want to enable it by default you can make a `.settings.yml` file in
|
106
|
-
your directory and add some settings to it:
|
107
|
-
|
108
|
-
```YAML
|
109
|
-
---
|
110
|
-
colour: "on"
|
111
|
-
---
|
112
|
-
```
|
113
|
-
|
114
89
|
To-Do
|
115
90
|
-----
|
116
91
|
|
117
92
|
- [x] Remake the help/info thing to be slimmer & look better
|
118
|
-
- [
|
119
|
-
- [ ]
|
120
|
-
|
121
|
-
- [ ] `install` (not as many)
|
122
|
-
- [ ] `list` (hardly any, I think)
|
93
|
+
- [x] Expand repo support to Git in general, not just GitHub
|
94
|
+
- [ ] Add support to `olive list` so that it'll list repos that're already cloned but not on the list (so the user knows that it's being removed on the next `olive install`)
|
95
|
+
- [ ] Clean up the mess that is [`commands.rb`](https://github.com/trommel/oliver/blob/cleanup/lib/oliver/commands.rb)
|
123
96
|
|
124
97
|
Ideas
|
125
98
|
-----
|
126
|
-
Refer to [ideas.md](
|
99
|
+
Refer to [ideas.md](IDEAS.md).
|
127
100
|
|
128
101
|
Contribution
|
129
102
|
------------
|
130
|
-
Refer to [contribution.md](
|
103
|
+
Refer to [contribution.md](CONTRIBUTING.md).
|
131
104
|
|
132
105
|
Licensing
|
133
106
|
---------
|
134
|
-
Refer to [LICENSE](
|
107
|
+
Refer to [LICENSE](LICENSE).
|
data/bin/olive
CHANGED
data/bin/oliver
CHANGED
@@ -1,72 +1,74 @@
|
|
1
|
-
|
2
|
-
repos:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
1
|
+
{
|
2
|
+
"repos": {
|
3
|
+
"samvermette": [
|
4
|
+
"UIAlertView-Blocks",
|
5
|
+
"Montreal-Collective",
|
6
|
+
"SVSegmentedControl",
|
7
|
+
"iOS-Simulator-Raindrop",
|
8
|
+
"RaptureXML",
|
9
|
+
"emphasize.js",
|
10
|
+
"objc-geohash",
|
11
|
+
"SVStatusHUD"
|
12
|
+
],
|
13
|
+
"gcamp": [
|
14
|
+
"services-to-omnifocus",
|
15
|
+
"OpenTripPlanner",
|
16
|
+
"github-omnifocus-sync"
|
17
|
+
],
|
18
|
+
"TransitApp": [
|
19
|
+
"SVProgressHUD",
|
20
|
+
"SVHTTPRequest",
|
21
|
+
"SVWebViewController"
|
22
|
+
],
|
23
|
+
"misc": [
|
24
|
+
"stefanceriu/SCSiriWaveformView",
|
25
|
+
"KjulyKYCircleMenu",
|
26
|
+
"chillok/AnimatedCircularCollectionMenu",
|
27
|
+
"YoApp/hey",
|
28
|
+
"opentripplanner/OpenTripPlanner",
|
29
|
+
"ghvillasboas/CloudKitTest",
|
30
|
+
"lovell/sharp",
|
31
|
+
"davidluzgouveia/ParallaxScrolling",
|
32
|
+
"ellisonleao/magictools",
|
33
|
+
"buger/gor",
|
34
|
+
"OpenRA/OpenRA",
|
35
|
+
"cocos2d/cocos2d-x",
|
36
|
+
"AdamsLair/duality",
|
37
|
+
"quicksilver/Quicksilver",
|
38
|
+
"muan/github-gmail",
|
39
|
+
"AgileBits/onepassword-app-extension",
|
40
|
+
"snowshoestamp/python_sdk",
|
41
|
+
"abraham/twitteroauth",
|
42
|
+
"rs/SDWebImage",
|
43
|
+
"maddox/regexkit",
|
44
|
+
"tonymillion/Reachability",
|
45
|
+
"ole/OBGradientView",
|
46
|
+
"stig/json-framework",
|
47
|
+
"flori/json",
|
48
|
+
"crino/instagram-ios-sdk",
|
49
|
+
"dalexsoto/HardwareInfo",
|
50
|
+
"nicklockwood/FXPageControl",
|
51
|
+
"fhsjaagshs/FHSTwitterEngine",
|
52
|
+
"enormego/EGOTableViewPullRefresh",
|
53
|
+
"Darktt/DTAlertView",
|
54
|
+
"kriskowal/transcode",
|
55
|
+
"pokeb/asi-http-request",
|
56
|
+
"Cue/CueTableReloader",
|
57
|
+
"AFNetworking/AFNetworking",
|
58
|
+
"yashigani/YSViewer",
|
59
|
+
"nicklockwood/SwipeView",
|
60
|
+
"CEWendel/SWTableViewCell",
|
61
|
+
"stefanoa/SASlideMenu",
|
62
|
+
"datwelk/RDRStickyKeyboardView",
|
63
|
+
"MacMannes/MKInfoPanel",
|
64
|
+
"jdg/MBProgressHUD",
|
65
|
+
"JLZ/JZSwipeCell",
|
66
|
+
"autresphere/ASDepthModal",
|
67
|
+
"marshluca/PolylineDemo",
|
68
|
+
"wit-ai/wit-ios-sdk",
|
69
|
+
"koenbok/Framer",
|
70
|
+
"mattdonnelly/Swifter",
|
71
|
+
"cloudapp/api"
|
72
|
+
]
|
73
|
+
}
|
74
|
+
}
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'git'
|
3
|
+
require 'fileutils'
|
4
|
+
require_relative 'file_name'
|
5
|
+
require_relative 'file_manager'
|
6
|
+
|
7
|
+
# Main commands
|
8
|
+
module Oliver
|
9
|
+
module_function
|
10
|
+
|
11
|
+
def init(options)
|
12
|
+
options = options[:options]
|
13
|
+
unless File.exists?(Oliver::NAME)
|
14
|
+
File.open(Oliver::NAME, 'w') do |file|
|
15
|
+
tempHash = { repos: { trommel: ["oliver"] } }
|
16
|
+
file.write(JSON.pretty_generate(tempHash))
|
17
|
+
puts "#{Oliver::NAME} created sucessfully" if options[:verbose]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
# I'm honestly ashamed of this piece of shit, it's hack as fuck
|
23
|
+
def install(options)
|
24
|
+
options = options[:options] # DRY
|
25
|
+
unless FileManager::BODY.nil?
|
26
|
+
FileManager::BODY['repos'].map do |user, repos|
|
27
|
+
user ||= ''
|
28
|
+
repos ||= []
|
29
|
+
|
30
|
+
# Add options[:verbose] support as soon as this doesn't look awful
|
31
|
+
unless user.empty? || repos.nil?
|
32
|
+
repos.each do |repo|
|
33
|
+
if File.directory?(repo)
|
34
|
+
puts "Warning: #{repo}/ already exists"
|
35
|
+
else
|
36
|
+
if user.downcase == 'misc'
|
37
|
+
cloned_repo = Git.clone(repo, repo.split('/').last, :path => '.')
|
38
|
+
else
|
39
|
+
cloned_repo = Git.clone(
|
40
|
+
"https://github.com/#{user}/#{repo}",
|
41
|
+
repo,
|
42
|
+
:path => '.'
|
43
|
+
)
|
44
|
+
end
|
45
|
+
if File.directory?(repo) || File.directory?(repo.split('/').last)
|
46
|
+
puts "Success: #{repo}/ has been cloned"
|
47
|
+
else
|
48
|
+
puts "Warning: #{repo}/ failed to clone"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
dirRepos = Dir.entries('.').reject do |f|
|
56
|
+
f['.'] || f['..'] || f[Oliver::NAME]
|
57
|
+
end
|
58
|
+
dirRepos.sort!
|
59
|
+
|
60
|
+
trackedRepos = FileManager::BODY['repos'].map do |user, repos|
|
61
|
+
repos.select { |repo| repo }
|
62
|
+
end
|
63
|
+
trackedRepos.sort!
|
64
|
+
trackedRepos = trackedRepos.first
|
65
|
+
|
66
|
+
unless dirRepos == trackedRepos
|
67
|
+
dirRepos ||= []
|
68
|
+
trackedRepos ||= []
|
69
|
+
dirRepos -= trackedRepos
|
70
|
+
unless dirRepos.empty?
|
71
|
+
dirRepos.each do |dirRepo|
|
72
|
+
print "Warning: Enter '#{dirRepo}' to locally delete the repo: "
|
73
|
+
FileUtils.rm_rf(dirRepo) if STDIN.gets.chomp.downcase == dirRepo
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def list
|
81
|
+
FileManager::BODY["repos"].map do |user, repos|
|
82
|
+
repos ||= []
|
83
|
+
# Add silent shit later when it's actually working
|
84
|
+
unless repos.empty?
|
85
|
+
repos.each do |repo|
|
86
|
+
if File.directory?(repo) then print '# ' else print '+ ' end # bugs
|
87
|
+
puts repo
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Still buggy, afaik
|
94
|
+
def update(options)
|
95
|
+
options = options[:options] # DRY
|
96
|
+
dirs = Dir.glob('*').select { |f| File.directory? f }
|
97
|
+
dirs.each do |dir|
|
98
|
+
Dir.chdir(dir)
|
99
|
+
g = Git.open(Dir.pwd)
|
100
|
+
pull = g.pull
|
101
|
+
puts "#{dir}/ has been updated" unless pull.include? 'Already up-to-date'
|
102
|
+
Dir.chdir('..')
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/oliver/file_manager.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
|
-
require '
|
1
|
+
require 'json'
|
2
|
+
|
3
|
+
# Reads and parses the .olive file
|
2
4
|
module FileManager
|
3
|
-
if File.file?
|
4
|
-
body = File.read(
|
5
|
-
|
5
|
+
if File.file?(Oliver::NAME)
|
6
|
+
body = File.read(Oliver::NAME)
|
7
|
+
BODY = JSON.parse(body)
|
6
8
|
else
|
9
|
+
<<<<<<< HEAD
|
7
10
|
puts "#{Rainbow(Name::OLIVER).red} does not exist."
|
8
11
|
YAML = nil
|
9
12
|
exit
|
13
|
+
=======
|
14
|
+
puts "#{Oliver::NAME} does not exist."
|
15
|
+
BODY = nil
|
16
|
+
>>>>>>> cleanup
|
10
17
|
end
|
11
18
|
end
|
data/lib/oliver/hash.rb
ADDED
data/lib/oliver/settings.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
# Load .settings.yml to get user settings set to default
|
2
4
|
# For example, if the user specifies colour=on, do that by default
|
3
5
|
# Make this short and concise if possible
|
4
6
|
|
5
|
-
require 'yaml'
|
6
7
|
module SettingsManager
|
7
8
|
settingsName = '.settings.yml'
|
8
9
|
if File.file? settingsName
|
data/lib/oliver/version.rb
CHANGED
data/lib/oliver.rb
CHANGED
@@ -1,5 +1,85 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require_relative 'oliver/hash'
|
2
|
+
require_relative 'oliver/version'
|
3
3
|
|
4
|
-
#
|
5
|
-
|
4
|
+
# Main Oliver module
|
5
|
+
module Oliver
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def command
|
9
|
+
@command ||= ''
|
10
|
+
end
|
11
|
+
|
12
|
+
def run(*args)
|
13
|
+
if args.empty?
|
14
|
+
advice
|
15
|
+
else
|
16
|
+
process args
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def process(*args)
|
21
|
+
# Address 'passing through methods' issues (nesting arrays)
|
22
|
+
args = args.first
|
23
|
+
|
24
|
+
# Store commands
|
25
|
+
@command = ''
|
26
|
+
|
27
|
+
# Get strings of keys of commands
|
28
|
+
basicCommands = advice(silent:true).keys_to_s
|
29
|
+
|
30
|
+
# Command-line arguments
|
31
|
+
@options = { verbose: true }
|
32
|
+
|
33
|
+
# Option parsing, essentially
|
34
|
+
until args.empty?
|
35
|
+
case arg = args.shift
|
36
|
+
when '--silent' then @options[:verbose] = false
|
37
|
+
when '--directory' then @options[:directory] = true
|
38
|
+
when 'version', '--version' then puts "oliver v#{Oliver::VERSION}"
|
39
|
+
when 'help', '--help' then assist
|
40
|
+
when *basicCommands
|
41
|
+
@command << arg + ' '
|
42
|
+
else
|
43
|
+
puts "Unknown command: #{arg}"
|
44
|
+
advice
|
45
|
+
# exit
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Build the command and do what you must
|
50
|
+
build @command unless @command.empty?
|
51
|
+
end
|
52
|
+
|
53
|
+
def advice(info={}) # since help is a Ruby keyword
|
54
|
+
advice = {
|
55
|
+
init: 'initializes the main directory by creating a base dotfile',
|
56
|
+
install: 'clones/removes repos if they\'re listed',
|
57
|
+
list: 'list user repos',
|
58
|
+
update: 'pull updates from each tracked repo',
|
59
|
+
version: 'return the current version',
|
60
|
+
help: 'return this help menu'
|
61
|
+
}
|
62
|
+
|
63
|
+
unless info[:silent]
|
64
|
+
puts 'usage: olive [command] [arguments]'
|
65
|
+
advice.map { |key, value| puts "#{key} \t#{value}" }
|
66
|
+
end
|
67
|
+
|
68
|
+
advice # return advice
|
69
|
+
end
|
70
|
+
|
71
|
+
def build(commands)
|
72
|
+
require_relative 'oliver/commands'
|
73
|
+
@command = @command.split(' ')
|
74
|
+
case @command.first
|
75
|
+
when 'init'
|
76
|
+
init(options:@options)
|
77
|
+
when 'install'
|
78
|
+
install(optoins:@options)
|
79
|
+
when 'list'
|
80
|
+
list
|
81
|
+
when 'update'
|
82
|
+
update(optoins:@options)
|
83
|
+
else end
|
84
|
+
end
|
85
|
+
end
|
data/oliver.gemspec
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
require File.expand_path('../lib/oliver/version', __FILE__)
|
3
3
|
|
4
4
|
Gem::Specification.new do |gem|
|
5
|
-
gem.authors = ['Josh']
|
6
|
-
gem.email = ['
|
5
|
+
gem.authors = ['Josh Trommel']
|
6
|
+
gem.email = ['joshtrommel@gmail.com']
|
7
7
|
gem.description = 'Local Git(Hub) made easy.'
|
8
|
-
gem.summary = 'Manage your Git(Hub) repos
|
8
|
+
gem.summary = 'Manage your Git(Hub) repos/projects easier.'
|
9
9
|
gem.homepage = 'https://github.com/trommel/oliver'
|
10
10
|
|
11
11
|
gem.files = `git ls-files`.split($ORS)
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.version = Oliver::VERSION
|
17
17
|
|
18
18
|
gem.add_development_dependency 'bundler', '~> 1.6'
|
19
|
-
gem.add_development_dependency 'rake'
|
20
|
-
gem.add_dependency '
|
21
|
-
gem.add_dependency '
|
19
|
+
gem.add_development_dependency 'rake', '~> 0'
|
20
|
+
gem.add_dependency 'git', '~> 1.2.9', '>= 1.2.8'
|
21
|
+
gem.add_dependency 'json', '~> 1.8.2', '>= 1.8.0'
|
22
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oliver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '2.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- Josh
|
7
|
+
- Josh Trommel
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -28,59 +28,59 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: git
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 1.2.9
|
48
48
|
- - ">="
|
49
49
|
- !ruby/object:Gem::Version
|
50
|
-
version: 2.
|
50
|
+
version: 1.2.8
|
51
51
|
type: :runtime
|
52
52
|
prerelease: false
|
53
53
|
version_requirements: !ruby/object:Gem::Requirement
|
54
54
|
requirements:
|
55
55
|
- - "~>"
|
56
56
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
57
|
+
version: 1.2.9
|
58
58
|
- - ">="
|
59
59
|
- !ruby/object:Gem::Version
|
60
|
-
version: 2.
|
60
|
+
version: 1.2.8
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
62
|
+
name: json
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 1.8.2
|
68
68
|
- - ">="
|
69
69
|
- !ruby/object:Gem::Version
|
70
|
-
version: 1.
|
70
|
+
version: 1.8.0
|
71
71
|
type: :runtime
|
72
72
|
prerelease: false
|
73
73
|
version_requirements: !ruby/object:Gem::Requirement
|
74
74
|
requirements:
|
75
75
|
- - "~>"
|
76
76
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
77
|
+
version: 1.8.2
|
78
78
|
- - ">="
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 1.
|
80
|
+
version: 1.8.0
|
81
81
|
description: Local Git(Hub) made easy.
|
82
82
|
email:
|
83
|
-
-
|
83
|
+
- joshtrommel@gmail.com
|
84
84
|
executables:
|
85
85
|
- olive
|
86
86
|
- oliver
|
@@ -99,14 +99,10 @@ files:
|
|
99
99
|
- community/README.md
|
100
100
|
- community/iOS-external-libraries-istx25.yml
|
101
101
|
- lib/oliver.rb
|
102
|
-
- lib/oliver/
|
103
|
-
- lib/oliver/argument_files/init.rb
|
104
|
-
- lib/oliver/argument_files/install.rb
|
105
|
-
- lib/oliver/argument_files/list.rb
|
106
|
-
- lib/oliver/argument_files/update.rb
|
107
|
-
- lib/oliver/arguments.rb
|
102
|
+
- lib/oliver/commands.rb
|
108
103
|
- lib/oliver/file_manager.rb
|
109
|
-
- lib/oliver/
|
104
|
+
- lib/oliver/file_name.rb
|
105
|
+
- lib/oliver/hash.rb
|
110
106
|
- lib/oliver/settings.rb
|
111
107
|
- lib/oliver/version.rb
|
112
108
|
- oliver.gemspec
|
@@ -129,8 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
129
125
|
version: '0'
|
130
126
|
requirements: []
|
131
127
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.4.
|
128
|
+
rubygems_version: 2.4.6
|
133
129
|
signing_key:
|
134
130
|
specification_version: 4
|
135
|
-
summary: Manage your Git(Hub) repos
|
131
|
+
summary: Manage your Git(Hub) repos/projects easier.
|
136
132
|
test_files: []
|
@@ -1,43 +0,0 @@
|
|
1
|
-
require_relative '../oliver_file_name'
|
2
|
-
# Help the user with their heavy troubles
|
3
|
-
helper = [
|
4
|
-
[
|
5
|
-
'init',
|
6
|
-
"initializes the main directory by creating a base dotfile"
|
7
|
-
],
|
8
|
-
|
9
|
-
[
|
10
|
-
'install',
|
11
|
-
"clones/removes repos if they're listed"
|
12
|
-
],
|
13
|
-
|
14
|
-
[
|
15
|
-
'list',
|
16
|
-
"list repos currently on #{Name::OLIVER}"
|
17
|
-
],
|
18
|
-
|
19
|
-
[
|
20
|
-
'update',
|
21
|
-
"pull updates from each tracked repo"
|
22
|
-
],
|
23
|
-
|
24
|
-
[
|
25
|
-
'-v',
|
26
|
-
'return oliver\'s version'
|
27
|
-
],
|
28
|
-
|
29
|
-
[
|
30
|
-
'-h',
|
31
|
-
'return this help menu'
|
32
|
-
]
|
33
|
-
]
|
34
|
-
|
35
|
-
top_message = 'oliver - help / usage'
|
36
|
-
|
37
|
-
puts Rainbow(top_message).red
|
38
|
-
(top_message.length + 1).times { print Rainbow('=').yellow }
|
39
|
-
puts
|
40
|
-
|
41
|
-
helper.map do |line, blurb|
|
42
|
-
puts "#{Rainbow(line).green} # => #{Rainbow(blurb).blue}"
|
43
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require_relative '../oliver_file_name'
|
2
|
-
unless ARGV[1].nil?
|
3
|
-
if ARGV[2].nil?
|
4
|
-
dir_name = 'olives'
|
5
|
-
else
|
6
|
-
dir_name = ARGV[2]
|
7
|
-
end
|
8
|
-
if ARGV[1].downcase == '--directory' || ARGV[1].downcase == '-d'
|
9
|
-
if !File.directory?(dir_name)
|
10
|
-
Dir.mkdir(dir_name)
|
11
|
-
Dir.chdir(dir_name)
|
12
|
-
else
|
13
|
-
puts "#{Rainbow('Error').underline.red}: #{dir_name}/ already exists."
|
14
|
-
exit
|
15
|
-
end
|
16
|
-
puts "#{Rainbow(dir_name).green}/ has been created."
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
if !File.file?(Name::OLIVER)
|
21
|
-
File.open(Name::OLIVER, 'w') do |file|
|
22
|
-
file.write("---\nrepos:\n")
|
23
|
-
file.write(" trommel:\n - \"oliver\"\n---\n")
|
24
|
-
dir_name = '.' if dir_name.nil?
|
25
|
-
green_dir_name = Rainbow(dir_name).green
|
26
|
-
green_oliver_file_name = Rainbow(Name::OLIVER).green
|
27
|
-
puts "#{green_dir_name}/#{green_oliver_file_name} has been created."
|
28
|
-
end
|
29
|
-
else
|
30
|
-
puts "#{Rainbow(Name::OLIVER).red} already exists."
|
31
|
-
end
|
@@ -1,94 +0,0 @@
|
|
1
|
-
require_relative '../file_manager'
|
2
|
-
require 'fileutils'
|
3
|
-
require 'git'
|
4
|
-
|
5
|
-
# Success, warning and error messages
|
6
|
-
# (Make these public, sometime)
|
7
|
-
success = "#{Rainbow('Success').underline.green}:"
|
8
|
-
warning = "#{Rainbow('Warning').underline.yellow}:"
|
9
|
-
error = "#{Rainbow('Error').underline.red}:"
|
10
|
-
|
11
|
-
# Fix this ASAP
|
12
|
-
if FileManager::YAML['repos'].nil?
|
13
|
-
message = "This will normally return a bug, so I'm just not going to do it.
|
14
|
-
You have an empty repos list, though, and that's what's causing this bug.
|
15
|
-
Try adding something to the list for the time being."
|
16
|
-
puts Rainbow(message).red
|
17
|
-
exit
|
18
|
-
end
|
19
|
-
|
20
|
-
# Create the empty listed_repos array for later
|
21
|
-
listed_repos = []
|
22
|
-
|
23
|
-
# Map out the username and repos(array)
|
24
|
-
FileManager::YAML['repos'].map do |username, repos|
|
25
|
-
# Exit with error if the username or repos is empty
|
26
|
-
if username.nil?
|
27
|
-
puts "#{error} Your usernames look a little nil."
|
28
|
-
exit
|
29
|
-
end
|
30
|
-
if repos.nil?
|
31
|
-
puts "#{error} Your repos look a little nil."
|
32
|
-
exit
|
33
|
-
end
|
34
|
-
# Assign individual repo from repos array
|
35
|
-
repos.each do |repo|
|
36
|
-
# Add each repo to the listed_repos array
|
37
|
-
repos.each do |repo|
|
38
|
-
listed_repos.push(repo)
|
39
|
-
end
|
40
|
-
if username.downcase == 'misc'
|
41
|
-
split = repo.split('/')
|
42
|
-
last_of_url = split.last
|
43
|
-
if !File.directory?(last_of_url)
|
44
|
-
repo_replaced = last_of_url.gsub('/', '-')
|
45
|
-
cloned_repo = Git.clone(
|
46
|
-
repo,
|
47
|
-
repo_replaced,
|
48
|
-
:path => '.'
|
49
|
-
)
|
50
|
-
if File.directory?(repo_replaced)
|
51
|
-
puts "#{success} #{split[1]}/ was cloned."
|
52
|
-
else
|
53
|
-
puts "#{error} #{split[1]} was not cloned."
|
54
|
-
end
|
55
|
-
end
|
56
|
-
exit
|
57
|
-
end
|
58
|
-
if !File.directory?(repo)
|
59
|
-
# Clone the repo if the directory doesn't already exist
|
60
|
-
cloned_repo = Git.clone("
|
61
|
-
git://github.com/#{username}/#{repo}",
|
62
|
-
repo,
|
63
|
-
:path => '.'
|
64
|
-
)
|
65
|
-
if File.directory?(repo)
|
66
|
-
# If the directory exists after the repo
|
67
|
-
# has been cloned, give a success message
|
68
|
-
puts "#{success} #{repo}/ has been cloned."
|
69
|
-
else
|
70
|
-
# If the directory doesn't exist after the
|
71
|
-
# has been cloned, give an error message
|
72
|
-
puts "#{error} Cloning #{repo}/ failed."
|
73
|
-
end
|
74
|
-
else
|
75
|
-
# Give a warning message if the repo already exists
|
76
|
-
puts "#{warning} #{repo}/ already exists."
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
# If the directory doesn't exist
|
82
|
-
# in `Name::OLIVER`, delete it
|
83
|
-
# This is an extreme hack
|
84
|
-
current_repos = Dir.entries '.'
|
85
|
-
['.', '..', '.backup', Name::OLIVER].each do |i|
|
86
|
-
current_repos.delete(i)
|
87
|
-
end
|
88
|
-
current_repos.each do |directory|
|
89
|
-
unless listed_repos.to_s.include?(directory) &&
|
90
|
-
File.directory?(directory)
|
91
|
-
print "#{warning} Enter '#{directory}' to locally delete the repo: "
|
92
|
-
FileUtils.rm_rf(directory) if STDIN.gets.chomp.downcase == directory
|
93
|
-
end
|
94
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require_relative '../file_manager'
|
2
|
-
|
3
|
-
# counter = 0
|
4
|
-
begin
|
5
|
-
FileManager::YAML['repos'].map do |username, repos|
|
6
|
-
if repos.nil?
|
7
|
-
puts "#{Rainbow('Error').red.underline}: Your repos look a little nil."
|
8
|
-
exit
|
9
|
-
end
|
10
|
-
repos.each do |repo|
|
11
|
-
if File.directory?(repo)
|
12
|
-
if Rainbow.enabled
|
13
|
-
puts Rainbow(repo).green
|
14
|
-
else
|
15
|
-
puts Rainbow("+ #{repo}").green
|
16
|
-
end
|
17
|
-
else
|
18
|
-
if Rainbow.enabled
|
19
|
-
puts Rainbow(repo).red
|
20
|
-
else
|
21
|
-
puts Rainbow("- #{repo}").red
|
22
|
-
end
|
23
|
-
end
|
24
|
-
# print "\t" if counter % 4 == 0
|
25
|
-
# counter += 1
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,11 +0,0 @@
|
|
1
|
-
require_relative '../oliver_file_name'
|
2
|
-
require 'git'
|
3
|
-
dirs = Dir.glob('*').select { |f| File.directory? f }
|
4
|
-
puts 'theoretically this should work but there will be tons of bugs' # enjoy!!
|
5
|
-
dirs.each do |dir|
|
6
|
-
Dir.chdir(dir)
|
7
|
-
g = Git.open(Dir.pwd)
|
8
|
-
pull = g.pull
|
9
|
-
puts "#{dir}/ has been updated." if !pull.include? 'Already up-to-date'
|
10
|
-
Dir.chdir('..')
|
11
|
-
end
|
data/lib/oliver/arguments.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
# Require files
|
2
|
-
require_relative 'oliver_file_name'
|
3
|
-
require_relative 'version'
|
4
|
-
|
5
|
-
def help
|
6
|
-
require_relative 'argument_files/help'
|
7
|
-
end
|
8
|
-
|
9
|
-
# Default options
|
10
|
-
options = {
|
11
|
-
:verbose => true,
|
12
|
-
:silent => false,
|
13
|
-
:directory => false,
|
14
|
-
:colour => ARGV[-1] == 'colour=on'
|
15
|
-
}
|
16
|
-
|
17
|
-
# Enable/Disable Rainbow
|
18
|
-
Rainbow.enabled = options[:colour]
|
19
|
-
|
20
|
-
# Check .settings.yml
|
21
|
-
require_relative 'settings'
|
22
|
-
|
23
|
-
# Help if user doesn't specify proper arguments
|
24
|
-
if ARGV.empty? || ARGV[0] == 'colour=on'
|
25
|
-
help
|
26
|
-
else
|
27
|
-
# Case for arguments
|
28
|
-
case ARGV[0].downcase
|
29
|
-
when 'colour=on'
|
30
|
-
help
|
31
|
-
exit
|
32
|
-
when 'install'
|
33
|
-
require_relative 'argument_files/install'
|
34
|
-
when 'init'
|
35
|
-
require_relative 'argument_files/init'
|
36
|
-
when 'list'
|
37
|
-
require_relative 'argument_files/list'
|
38
|
-
when 'update'
|
39
|
-
require_relative 'argument_files/update'
|
40
|
-
when '-h', '--help', 'help'
|
41
|
-
help
|
42
|
-
when '-v', '--version', 'version'
|
43
|
-
puts "#{Rainbow('oliver').red} #{Rainbow("v#{Oliver::VERSION}").green}"
|
44
|
-
exit
|
45
|
-
else
|
46
|
-
puts "#{Rainbow('Error').underline.red}: Unknown argument: #{ARGV[0]}"
|
47
|
-
end
|
48
|
-
end
|