oliver 1.8.9.7 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Gem Version](https://badge.fury.io/rb/oliver.svg)](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
|