learn_duplicate 0.0.12 → 0.0.13
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/bin/learn_duplicate +91 -1
- data/lib/learn_duplicate.rb +42 -14
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4acf7ecc2189dbae649d6fff2ef038252fd117d1c699cc2990b803b7a27b9ac
|
4
|
+
data.tar.gz: b1d1b110111b4dab13e98d9bfb1f61bba0770bbe89bc1d9e0665f85f042638d4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3774b275fa0a9f8bd34b00ce63bd5b77f4f79396a1334496d0087404a557b06f2ccc0246f83ba87475bdae59272cc170730ca2a2bcaafb67538c589e216a3273
|
7
|
+
data.tar.gz: 3d6d86ee2c4638fe7f4fbb8f43b752791c02a19e22e9df24817e010f9dce4243b08be912533118c7349eacec150d9f086a73a78ac5022df04172490fc2f3df6b
|
data/bin/learn_duplicate
CHANGED
@@ -1,4 +1,94 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
3
4
|
require 'learn_duplicate'
|
4
|
-
|
5
|
+
|
6
|
+
options = {}
|
7
|
+
OptionParser.new do |opts|
|
8
|
+
opts.banner = <<-EOBANNER
|
9
|
+
learn_duplicate (for interactive sssion)
|
10
|
+
learn_duplicate --script [opt...optN] <source>
|
11
|
+
|
12
|
+
INTERACTIVE CONTEXTS
|
13
|
+
====================
|
14
|
+
|
15
|
+
A tool for cloning repositories. You will want the canonical name of a
|
16
|
+
repository e.g.:
|
17
|
+
|
18
|
+
ruby-enumerables-enumerable-family-tree
|
19
|
+
|
20
|
+
You will also want to know the clone name e.g
|
21
|
+
|
22
|
+
snapshot-clone-enumerable-family-tree
|
23
|
+
|
24
|
+
NON-INTERACTIVE CONTEXTS
|
25
|
+
========================
|
26
|
+
|
27
|
+
learn_duplicate --script --trimprefix "ruby-enumerables-" --newprefix "snapshot-clone-" <source>
|
28
|
+
|
29
|
+
DEFINITION OF SOURCE
|
30
|
+
====================
|
31
|
+
|
32
|
+
<source> can be anything delimited by / that results in a final identifier
|
33
|
+
at the end. The `.git` substring, if present at the end, will be removed.
|
34
|
+
|
35
|
+
As such:
|
36
|
+
|
37
|
+
https://github.com/learn-co-curriculum/ruby-enumerables-enumerable-family-tree
|
38
|
+
|
39
|
+
git@github.com:learn-co-curriculum/ruby-enumerables-enumerable-family-tree.git
|
40
|
+
|
41
|
+
Both use, as a base: ruby-enumerables-enumerable-family-tree
|
42
|
+
|
43
|
+
Thus the reader can infer what --trimprefix and --newprefix will do.
|
44
|
+
|
45
|
+
EXAMPLE
|
46
|
+
=======
|
47
|
+
|
48
|
+
learn_duplicate\
|
49
|
+
--trimprefix="ruby-enumerables-"\
|
50
|
+
--newprefix="uci-mod-2-"\
|
51
|
+
https://github.com/learn-co-curriculum/ruby-enumerables-enumerable-family-tree [--dry-run]
|
52
|
+
|
53
|
+
EOBANNER
|
54
|
+
|
55
|
+
opts.on("--script", "Run in non-interactive mode") { |v| options[:ni] = true }
|
56
|
+
opts.on("-v", "--verbose", "Run in verbose mode"){ |v| options[:verbose] = true }
|
57
|
+
opts.on("--trimprefix[=OPTIONAL]", "Prefix to remove from <source>; implies --script") { |t| options[:trimprefix] = t }
|
58
|
+
opts.on("--newprefix[=OPTIONAL]", "Prefix to prepent to new destination repo name; implies --script") { |n| options[:newprefix] = n }
|
59
|
+
opts.on("--dry-run", "Do not actually make calls, print info out"){ options[:dryrun] = true }
|
60
|
+
end.parse!
|
61
|
+
|
62
|
+
# Prefixes imply non-interactivity
|
63
|
+
options[:ni] = !!(options[:trimprefix] || options[:newprefix])
|
64
|
+
|
65
|
+
REPO_SOURCE = ARGV[0]
|
66
|
+
VERBOSE_FLAG = options[:verbose]
|
67
|
+
|
68
|
+
if options[:ni]
|
69
|
+
source_name = REPO_SOURCE.split('/').last.sub(/^(.*).*$/, "\\1")
|
70
|
+
if source_name.index(options[:trimprefix]) == 0
|
71
|
+
puts "Trim prefix is valid " if VERBOSE_FLAG
|
72
|
+
else
|
73
|
+
raise ArgumentError, "The --trimprefix is not left-anchored on the <source>"
|
74
|
+
end
|
75
|
+
|
76
|
+
unless (options[:trimprefix] && options[:newprefix])
|
77
|
+
raise ArgumentError, "If you have trimprefix you want newprefix as well"
|
78
|
+
end
|
79
|
+
|
80
|
+
trimmed_base = source_name.slice(options[:trimprefix].length...)
|
81
|
+
destination = String(options[:newprefix]) + trimmed_base
|
82
|
+
|
83
|
+
puts "Trimmed base: #{trimmed_base}" if VERBOSE_FLAG
|
84
|
+
puts "Destination: #{destination}" if VERBOSE_FLAG
|
85
|
+
|
86
|
+
LearnDuplicate.new(options.merge({
|
87
|
+
source_name: source_name,
|
88
|
+
base: trimmed_base.downcase,
|
89
|
+
destination: destination.downcase
|
90
|
+
}))
|
91
|
+
else
|
92
|
+
LearnDuplicate.new
|
93
|
+
end
|
94
|
+
|
data/lib/learn_duplicate.rb
CHANGED
@@ -1,14 +1,48 @@
|
|
1
|
-
require 'require_all'
|
2
1
|
require 'faraday'
|
3
2
|
require 'uri'
|
4
3
|
require 'open3'
|
5
4
|
|
6
5
|
class LearnDuplicate
|
7
|
-
|
6
|
+
GITHUB_ORG = 'https://api.github.com/repos/learn-co-curriculum/'
|
7
|
+
|
8
|
+
def initialize(opts={})
|
9
|
+
# For non-interactive mode
|
10
|
+
if opts[:ni]
|
11
|
+
validate_repo = ->(url) do
|
12
|
+
encoded_url = URI.encode(url).slice(0, url.length)
|
13
|
+
check_existing = Faraday.get URI.parse(encoded_url)
|
14
|
+
if check_existing.body.include? '"Not Found"'
|
15
|
+
raise IOError, "Could not connect to #{url}"
|
16
|
+
end
|
17
|
+
url
|
18
|
+
end
|
19
|
+
|
20
|
+
@old_repo = validate_repo.call(GITHUB_ORG + opts[:source_name])
|
21
|
+
|
22
|
+
if opts[:destination].length >= 100
|
23
|
+
raise ArgumentError, 'Repository names must be shorter than 100 characters'
|
24
|
+
end
|
25
|
+
|
26
|
+
@repo_name = opts[:destination]
|
27
|
+
|
28
|
+
if (!opts[:dryrun])
|
29
|
+
begin
|
30
|
+
create_new_repo
|
31
|
+
puts ''
|
32
|
+
puts 'To access local folder, change directory into ' + @repo_name + '/'
|
33
|
+
puts "Repository available at #{GITHUB_ORG}" + @repo_name
|
34
|
+
rescue => e
|
35
|
+
STDERR.puts(e.message)
|
36
|
+
end
|
37
|
+
else
|
38
|
+
puts "DRY RUN: Would execute copy of: #{@old_repo} to #{@repo_name}"
|
39
|
+
end
|
40
|
+
|
41
|
+
exit
|
42
|
+
end
|
8
43
|
|
9
44
|
@repo_name = ''
|
10
45
|
@old_repo = ''
|
11
|
-
@ssh_configured = check_ssh_config
|
12
46
|
|
13
47
|
puts 'Note: You must have write access to the learn-co-curriculum org on GitHub to use this tool'
|
14
48
|
|
@@ -16,7 +50,7 @@ class LearnDuplicate
|
|
16
50
|
puts 'What is the name of the repository you would like to copy? Paste exactly as is shown in the URL (i.e. advanced-hashes-hashketball)'
|
17
51
|
@old_repo = gets.strip
|
18
52
|
|
19
|
-
url =
|
53
|
+
url = GITHUB_ORG + @old_repo
|
20
54
|
encoded_url = URI.encode(url).slice(0, url.length)
|
21
55
|
check_existing = Faraday.get URI.parse(encoded_url)
|
22
56
|
|
@@ -37,7 +71,7 @@ class LearnDuplicate
|
|
37
71
|
if @repo_name.length >= 100
|
38
72
|
puts 'Repository names must be shorter than 100 characters'
|
39
73
|
else
|
40
|
-
url =
|
74
|
+
url = GITHUB_ORG + @repo_name
|
41
75
|
encoded_url = URI.encode(url).slice(0, url.length)
|
42
76
|
check_existing = Faraday.get URI.parse(encoded_url)
|
43
77
|
|
@@ -46,22 +80,16 @@ class LearnDuplicate
|
|
46
80
|
break
|
47
81
|
else
|
48
82
|
puts 'A repository with that name already exists or you may have hit a rate limit'
|
49
|
-
puts
|
83
|
+
puts GITHUB_ORG + @repo_name
|
50
84
|
puts ''
|
51
85
|
end
|
52
86
|
end
|
53
|
-
|
54
|
-
|
55
|
-
|
56
87
|
end
|
57
88
|
|
58
|
-
|
59
|
-
|
60
89
|
create_new_repo
|
61
90
|
puts ''
|
62
91
|
puts 'To access local folder, change directory into ' + @repo_name + '/'
|
63
|
-
puts
|
64
|
-
|
92
|
+
puts "Repository available at #{GITHUB_ORG}" + @repo_name
|
65
93
|
end
|
66
94
|
|
67
95
|
private
|
@@ -105,7 +133,7 @@ class LearnDuplicate
|
|
105
133
|
end
|
106
134
|
|
107
135
|
def git_set_remote
|
108
|
-
remote =
|
136
|
+
remote = check_ssh_config ? "git@github.com:learn-co-curriculum/#{@repo_name}.git" : "https://github.com/learn-co-curriculum/#{@repo_name}"
|
109
137
|
cmd = cd_into_and("git remote set-url origin #{remote}")
|
110
138
|
`#{cmd}`
|
111
139
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: learn_duplicate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.13
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- flatironschool
|
@@ -90,7 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
- !ruby/object:Gem::Version
|
91
91
|
version: '0'
|
92
92
|
requirements: []
|
93
|
-
|
93
|
+
rubyforge_project:
|
94
|
+
rubygems_version: 2.7.6
|
94
95
|
signing_key:
|
95
96
|
specification_version: 4
|
96
97
|
summary: learn_duplicate is a tool for duplicating learn.co lessons on github
|