github-cloner 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4f23c7164f8ba19e237369bd2d5b52d6b9652c43
4
- data.tar.gz: 1fadfc3cea2dc1fe7fdf1d2d5d6ca5a6d68c2302
3
+ metadata.gz: 757ebae0d662268f47ec94f7f152be783d2c5b12
4
+ data.tar.gz: cf8f8eaec3306e172381e77e7ea042c138a011ca
5
5
  SHA512:
6
- metadata.gz: aabe5efd932df2e1eb11b77042a525c249a2ab755b9d319f5014f4285360095e5d57e655e2454a6a1beb8b93b498d17858847f89405ab8e10178c747617d6aaf
7
- data.tar.gz: 4ab3ce865ff77eeb25ef2cbd2657156e69aeaeadb731e5b65e5a844f2a4329a97d37ee79eec48aada6e4348f2488782aa203c417c1bec30b51f2dd320623e38e
6
+ metadata.gz: db4a4903f8f2a4aa6560dd893860e6e6ed338366024f231bdc59d353e0960c215295484b54b6aa12973e55aef9dcb9bb7a189c800410eea06855cf74a53d3b1a
7
+ data.tar.gz: 02f137143ba9756709e9adbd6257766c3711213d1331f642cfea00e5a96701ad58a4340520fa1ca781c87af10375934d7107a72ca094917723aa42448cf07892
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ### Changelogs
2
2
 
3
+ #### 0.4.0
4
+
5
+ - Allow more than one languages to be cloned (new feature)
6
+
3
7
  #### 0.3.0
4
8
 
5
9
  - Initial release
data/README.md CHANGED
@@ -78,10 +78,10 @@ $github-cloner --user awesome_user --oauth-token GITHUB_TOKEN_FOR_THIS_USER
78
78
  ```sh
79
79
  ## Clone all original (non-fork) public `JavaScript` repositores for user `awesome_user` to `~/Desktop/github`
80
80
  # Note: --base-dir is optional, if not specified then the current directory will be used
81
- # --language must be quoted if the value include any spaces e.g. "Emacs Lisp" for this to to work properly
81
+ # --languages must be quoted if the value include any spaces e.g. "Emacs Lisp" for this to to work properly
82
82
  $github-cloner --user awesome_user \
83
83
  --base-dir ~/Desktop/github \
84
- --language "JavaScript" \
84
+ --languages "JavaScript" \
85
85
  --clone
86
86
 
87
87
  ## Clone all public/private repositories for `awesome_user` which are member of `AwesomeCo` organization to `~/Desktop/github`
@@ -93,12 +93,12 @@ $github-cloner --user awesome_user \
93
93
  --oauth-token GITHUB_TOKEN_FOR_AWESOME_USER \
94
94
  --clone
95
95
 
96
- ## Clone specific type of project (e.g. `Java` in this case) public/private repositories for `awesome_user`
96
+ ## Clone specific type of projects (e.g. `Java` and `Emacs Lisp` in this case) public/private repositories for `awesome_user`
97
97
  ## which are member of `AwesomeCo` organization to `~/Desktop/github`
98
98
  $github-cloner --user awesome_user \
99
99
  --org AwesomeCo \
100
100
  --all-repos \
101
- --language "Java" \
101
+ --languages "Java,Emacs Lisp" \
102
102
  --base-dir ~/Desktop/github \
103
103
  --oauth-token GITHUB_TOKEN_FOR_AWESOME_USER \
104
104
  --clone
data/bin/github-cloner CHANGED
@@ -7,8 +7,6 @@ end
7
7
 
8
8
  include GithubCloner
9
9
 
10
- # Now we are ready to take the order
11
- # Show help if user forgot to type anything
12
10
  options = OptParser.parse(ARGV)
13
11
 
14
12
  # Mandatory options
@@ -18,31 +16,30 @@ raise "user is required" if options.user.nil?
18
16
  # Make use of the user name
19
17
  gh_id = options.user
20
18
 
21
- # Note: set to specific language to limit the cloning
22
- if options.language
23
- language = options.language #'Emacs Lisp'
19
+ if options.languages
20
+ languages = options.languages
24
21
  end
25
22
 
26
23
  args = {
27
- base_dir: options.base_dir, # mandatory
28
- oauth_token: options.oauth_token, # optional required for private repos
29
- user: options.user, # optional if org is used?
30
- org: options.org, # optional if user is used?
31
- all_repos: options.all_repos, # default to false
32
- group_by_user: options.group_by_user, # default to false
33
- clone_repos: options.clone_repos # default to false
24
+ base_dir: options.base_dir,
25
+ oauth_token: options.oauth_token,
26
+ user: options.user,
27
+ org: options.org,
28
+ all_repos: options.all_repos,
29
+ group_by_user: options.group_by_user,
30
+ clone_repos: options.clone_repos
34
31
  }
35
32
 
36
33
  repos = GithubCloner::GithubUtils.list_all(args)
37
34
 
38
35
  # List of language that have been used by the given user/organization
39
- languages = repos.map(&:language).uniq.compact
36
+ repo_languages = repos.map(&:language).uniq.compact
40
37
  puts "------------------------------------------"
41
38
  puts "List of languages by #{gh_id}"
42
- puts languages
39
+ puts repo_languages
43
40
  puts "------------------------------------------"
44
41
 
45
- repos_hash = GithubCloner::GithubUtils.repos_by_language(repos, languages)
42
+ repos_hash = GithubCloner::GithubUtils.repos_by_language(repos, repo_languages)
46
43
 
47
44
  result = GithubCloner::GithubUtils.repos_as_list(repos_hash)
48
45
 
@@ -54,6 +51,13 @@ if result && !result.empty?
54
51
  end
55
52
  puts "------------------------------------------"
56
53
 
57
- result.keep_if { |i| i.split(File::SEPARATOR)[1] == language } if language
58
- GithubCloner::GithubUtils.clone_all(result,args)
54
+ # Need to get this from the list of language
55
+ if languages && !languages.empty?
56
+ result.keep_if do |i|
57
+ lang = i.split(File::SEPARATOR)[1]
58
+ languages.include?(lang)
59
+ end
60
+ end
61
+
62
+ GithubCloner::GithubUtils.clone_all(result, args)
59
63
  end
@@ -1,6 +1,7 @@
1
1
  require 'optparse'
2
2
  require 'ostruct'
3
3
  module GithubCloner
4
+ # See: http://ruby-doc.org/stdlib-2.3.0/libdoc/optparse/rdoc/OptionParser.html
4
5
  class OptParser
5
6
  # Return a structure describing the options.
6
7
  def self.parse(args)
@@ -8,12 +9,12 @@ module GithubCloner
8
9
  options = OpenStruct.new
9
10
 
10
11
  # Set the sensible default for the options explicitly
11
- options.base_dir = "."
12
- options.all_repos = false
12
+ options.base_dir = "."
13
+ options.all_repos = false
13
14
  options.group_by_user = false
14
- options.clone_repos = false
15
+ options.clone_repos = false
16
+ options.languages = []
15
17
 
16
- # The parser
17
18
  opt_parser = OptionParser.new do |opts|
18
19
  opts.banner = "Usage: github-cloner [options]"
19
20
 
@@ -44,17 +45,17 @@ module GithubCloner
44
45
  options.oauth_token = token
45
46
  end
46
47
 
47
- opts.on("-l", "--language [LANG]",
48
- "Clone only project of type LANG (optional)",
49
- "where LANG is main language as shown on Github") do |lang|
50
- options.language = lang
48
+ opts.on("-l", "--languages 'LANG1,LANG2,..,LANGn'",
49
+ Array,
50
+ "Clone all repos that in the list of languages") do |langs|
51
+ options.languages = langs
51
52
  end
52
53
 
53
54
  # Boolean switch.
54
55
  opts.on("-a", "--[no-]all-repos",
55
56
  "All repository only (optional)",
56
- "default to original/non-forked repositories only") do |a|
57
- options.all_repos = a
57
+ "default to original/non-forked repositories only") do |all_repos|
58
+ options.all_repos = all_repos
58
59
  end
59
60
 
60
61
  opts.on("-g", "--[no-]group-by-user",
@@ -78,11 +79,20 @@ module GithubCloner
78
79
  puts ""
79
80
  puts "Example Usage:"
80
81
  puts ""
81
- puts "a) List the 'JavaScript' repositories for a given user (dry-run)"
82
- puts "github-cloner -b ~/Desktop/projects -u awesome_user -l JavaScript"
82
+ puts "1) List all repositories by a given user (dry-run)"
83
+ puts "$github-cloner -u awesome_user"
83
84
  puts ""
84
- puts "b) Clone the 'JavaScript' repositories for a given user (note: --clone or -c option)"
85
- puts "github-cloner -b ~/Desktop/projects -u awesome_user -l JavaScript -c"
85
+ puts "2) List all 'Emacs Lisp' repositories for a given user (dry-run)"
86
+ puts "$github-cloner -b ~/Desktop/projects -u awesome_user -l 'Emacs Lisp'"
87
+ puts ""
88
+ puts "3) List all 'JavaScript' and 'Emacs Lisp' repositories for a given user (dry-run)"
89
+ puts "$github-cloner -b ~/Desktop/projects -u awesome_user -l 'JavaScript,Emacs Lisp'"
90
+ puts ""
91
+ puts "4) Clone all 'JavaScript' and 'Emacs Lisp' repositories for a given user (note: --clone or -c option)"
92
+ puts "$github-cloner -b ~/Desktop/projects -u awesome_user -l 'JavaScript,Emacs Lisp' -c"
93
+ puts ""
94
+ puts "5) Clone all 'JavaScript' and 'Emacs Lisp' repositories for a given organization where a given user belongs to (include private repos)"
95
+ puts "$github-cloner -b ~/Desktop/projects -u awesome_user -o awesome_company -l -t GITHUB_TOKEN -l 'JavaScript,Emacs Lisp' -c"
86
96
  puts ""
87
97
  exit
88
98
  end
@@ -93,3 +103,7 @@ module GithubCloner
93
103
  end
94
104
  end
95
105
  end
106
+
107
+ # options = GithubCloner::OptParser.parse(ARGV)
108
+ # puts options
109
+ # puts ARGV
@@ -1,3 +1,3 @@
1
1
  module GithubCloner
2
- VERSION = '0.3.0'
2
+ VERSION = '0.4.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: github-cloner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burin Choomnuan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-06 00:00:00.000000000 Z
11
+ date: 2016-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: github_api