hgrc_generator 0.0.1
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 +7 -0
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +0 -0
- data/README.md +12 -0
- data/bin/hgrc_generator +3 -0
- data/lib/hgrc_generator.rb +10 -0
- data/lib/hgrc_generator/alias_section.rb +99 -0
- data/lib/hgrc_generator/content.rb +33 -0
- data/lib/hgrc_generator/core.rb +27 -0
- data/lib/hgrc_generator/params.rb +49 -0
- data/lib/hgrc_generator/path.rb +143 -0
- data/lib/hgrc_generator/paths_section.rb +18 -0
- data/lib/hgrc_generator/section.rb +17 -0
- data/lib/hgrc_generator/unix_formatter.rb +51 -0
- data/lib/hgrc_generator/version.rb +3 -0
- data/license/gplv3.md +650 -0
- data/license/lgplv3-88x31.png +0 -0
- data/license/lgplv3.md +171 -0
- metadata +111 -0
- metadata.gz.sig +2 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7276d16e56c73b9b3be8f22fa7bd5bf0b1ef864a
|
4
|
+
data.tar.gz: f3b9b79fd64002497f79fb0623acc8428a7fff5e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d59e54a49f4c4c0db54954ab4faecbd13a6112cdbc01f78653a2aa4a6d825beb0ba8b4f0be614d2601b80a264d7bdc18d0298ec445fb260568d58c8a1cf36de6
|
7
|
+
data.tar.gz: dd06a76fe7fec4ea6008845d2b470cf2070357576cac7fbee48d9e27e06808ade995c3f7ac6931f0751a5ccbf9887b123af6943a05e7c5eabc4bc3432b824f02
|
checksums.yaml.gz.sig
ADDED
data.tar.gz.sig
ADDED
Binary file
|
data/README.md
ADDED
data/bin/hgrc_generator
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
module AliasSection
|
3
|
+
extend self, Section
|
4
|
+
|
5
|
+
ALIAS_LIST = [
|
6
|
+
:lli,
|
7
|
+
:llo,
|
8
|
+
:lll,
|
9
|
+
:llh,
|
10
|
+
:rli,
|
11
|
+
:rlo,
|
12
|
+
:rll,
|
13
|
+
:rlh,
|
14
|
+
]
|
15
|
+
|
16
|
+
def section_content
|
17
|
+
get_aliases
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def get_aliases
|
23
|
+
aliases = []
|
24
|
+
|
25
|
+
aliases << unix_local_in
|
26
|
+
aliases << unix_local_out
|
27
|
+
aliases << unix_local_pull
|
28
|
+
aliases << unix_local_push
|
29
|
+
aliases << unix_remote_in
|
30
|
+
aliases << unix_remote_out
|
31
|
+
aliases << unix_remote_pull
|
32
|
+
aliases << unix_remote_push
|
33
|
+
|
34
|
+
check_aliases
|
35
|
+
|
36
|
+
aliases
|
37
|
+
end
|
38
|
+
|
39
|
+
def check_aliases
|
40
|
+
unused_aliases = ALIAS_LIST - @keys
|
41
|
+
unless unused_aliases.empty?
|
42
|
+
raise "The following aliases were not used: #{unused_aliases}"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def unix_local_in
|
47
|
+
commands = Path.get_local_in
|
48
|
+
unix_format_for :lli, commands, :in
|
49
|
+
end
|
50
|
+
|
51
|
+
def unix_local_out
|
52
|
+
commands = Path.get_local_out.reverse
|
53
|
+
unix_format_for :llo, commands, :out
|
54
|
+
end
|
55
|
+
|
56
|
+
def unix_local_pull
|
57
|
+
commands = Path.get_local_in
|
58
|
+
unix_format_for :lll, commands, :pull
|
59
|
+
end
|
60
|
+
|
61
|
+
def unix_local_push
|
62
|
+
commands = Path.get_local_out.reverse
|
63
|
+
unix_format_for :llh, commands, :push
|
64
|
+
end
|
65
|
+
|
66
|
+
def unix_remote_in
|
67
|
+
commands = Path.get_remote_in
|
68
|
+
unix_format_for :rli, commands, :in
|
69
|
+
end
|
70
|
+
|
71
|
+
def unix_remote_out
|
72
|
+
commands = Path.get_remote_out.reverse
|
73
|
+
unix_format_for :rlo, commands, :out
|
74
|
+
end
|
75
|
+
|
76
|
+
def unix_remote_pull
|
77
|
+
commands = Path.get_remote_in
|
78
|
+
unix_format_for :rll, commands, :pull
|
79
|
+
end
|
80
|
+
|
81
|
+
def unix_remote_push
|
82
|
+
commands = Path.get_remote_out.reverse
|
83
|
+
unix_format_for :rlh, commands, :push
|
84
|
+
end
|
85
|
+
|
86
|
+
def unix_format_for(key, commands, group)
|
87
|
+
@keys ||= []
|
88
|
+
raise "Alias '#{key}' was not expected" unless ALIAS_LIST.include?(key)
|
89
|
+
raise "Duplicate alias '#{key}'" if @keys.include?(key)
|
90
|
+
@keys << key
|
91
|
+
|
92
|
+
UnixFormatter.format key, commands.map(&group), padding
|
93
|
+
end
|
94
|
+
|
95
|
+
def padding
|
96
|
+
@padding ||= ALIAS_LIST.map(&:to_s).map(&:length).max
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
module Content
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def create(params)
|
6
|
+
@params = params
|
7
|
+
@content = []
|
8
|
+
|
9
|
+
leader
|
10
|
+
sections
|
11
|
+
|
12
|
+
return @content.join("\n").strip
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def leader
|
18
|
+
mask = '# This file was created by version %s of %s at %s UTC'
|
19
|
+
|
20
|
+
@content << mask % [
|
21
|
+
HgrcGenerator::VERSION,
|
22
|
+
HgrcGenerator,
|
23
|
+
Time.now.utc.strftime('%F %T'),
|
24
|
+
]
|
25
|
+
end
|
26
|
+
|
27
|
+
def sections
|
28
|
+
@content.concat PathsSection.content
|
29
|
+
@content << ''
|
30
|
+
@content.concat AliasSection.content
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
extend self
|
3
|
+
|
4
|
+
def run(args)
|
5
|
+
Core.run args
|
6
|
+
end
|
7
|
+
|
8
|
+
module Core
|
9
|
+
extend self
|
10
|
+
|
11
|
+
def run(args)
|
12
|
+
params = Params.new(args)
|
13
|
+
if File.directory?('.hg')
|
14
|
+
if File.file?('.hg/hgrc') && !params.dry_run
|
15
|
+
puts 'hgrc already exists.'
|
16
|
+
else
|
17
|
+
contents = Content.create(params)
|
18
|
+
if params.dry_run
|
19
|
+
puts contents
|
20
|
+
else
|
21
|
+
File.write '.hg/hgrc', contents
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
class Params
|
3
|
+
attr_reader :include_prefix, :branches, :dry_run, :help
|
4
|
+
|
5
|
+
HELP = <<-DOC
|
6
|
+
Usage: hgrc [--include-prefix] [--dry_run] BRANCH_LIST
|
7
|
+
|
8
|
+
Create an hgrc file for the currrent project.
|
9
|
+
|
10
|
+
The file will not be created if hgrc already exists in `./.hg`
|
11
|
+
|
12
|
+
BRANCH_LIST is a list of branches to push to when pushes are not forced.
|
13
|
+
The default branch is automatically included in this list.
|
14
|
+
|
15
|
+
parameters:
|
16
|
+
--help, -h Show this message.
|
17
|
+
--include_prefix Include the folder one level up from the project folder
|
18
|
+
when generating paths/repo names.
|
19
|
+
Default: true
|
20
|
+
--dry-run, -n Do not create an hgrc file, but output the contents
|
21
|
+
that would be created.
|
22
|
+
DOC
|
23
|
+
|
24
|
+
class << self
|
25
|
+
attr_accessor :params
|
26
|
+
end
|
27
|
+
|
28
|
+
def initialize(params)
|
29
|
+
@branches = [:default]
|
30
|
+
@include_prefix = true
|
31
|
+
|
32
|
+
params.each do |param|
|
33
|
+
if param.match(/^-/)
|
34
|
+
case param.downcase
|
35
|
+
when '--no-prefix' then @include_prefix = false
|
36
|
+
when '--dry-run', '-n' then @dry_run = true
|
37
|
+
when '--help', '-h'
|
38
|
+
puts HELP.gsub(/^ {6}/, '')
|
39
|
+
exit
|
40
|
+
end
|
41
|
+
else
|
42
|
+
@branches << param
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
self.class.params = self
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
class Path
|
3
|
+
class << self
|
4
|
+
PATHS = {
|
5
|
+
'default' => {
|
6
|
+
:path => '~/.source/pull/%s',
|
7
|
+
:in => true,
|
8
|
+
:out => true,
|
9
|
+
:force => false,
|
10
|
+
},
|
11
|
+
'default-push' => {
|
12
|
+
:path => '~/.source/push/%s',
|
13
|
+
:in => false,
|
14
|
+
:out => true,
|
15
|
+
:force => true,
|
16
|
+
},
|
17
|
+
'bb' => {
|
18
|
+
:path => 'ssh://hg@bitbucket.org/ToadJamb/%s',
|
19
|
+
:in => true,
|
20
|
+
:out => true,
|
21
|
+
:force => false,
|
22
|
+
},
|
23
|
+
'bb-dev' => {
|
24
|
+
:path => 'ssh://hg@bitbucket.org/ToadJamb/%s_dev',
|
25
|
+
:in => false,
|
26
|
+
:out => true,
|
27
|
+
:force => true,
|
28
|
+
},
|
29
|
+
}
|
30
|
+
|
31
|
+
def paths
|
32
|
+
@paths ||=
|
33
|
+
PATHS.map do |key, path_hash|
|
34
|
+
new key, path_hash
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_local_in
|
39
|
+
paths.select(&:in).select(&:local)
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_local_out
|
43
|
+
paths.select(&:out).select(&:local)
|
44
|
+
end
|
45
|
+
|
46
|
+
def get_remote_in
|
47
|
+
paths.select(&:in).reject(&:local)
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_remote_out
|
51
|
+
paths.select(&:out).reject(&:local)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
attr_reader \
|
56
|
+
:key,
|
57
|
+
:path,
|
58
|
+
:force,
|
59
|
+
:out,
|
60
|
+
:in,
|
61
|
+
:push,
|
62
|
+
:pull
|
63
|
+
|
64
|
+
def initialize(key, hash)
|
65
|
+
@key = key
|
66
|
+
@path = path_for(hash[:path])
|
67
|
+
@force = hash[:force]
|
68
|
+
@in = in_command if hash[:in]
|
69
|
+
@out = out_command if hash[:out]
|
70
|
+
@pull = pull_command if hash[:in]
|
71
|
+
@push = push_command if hash[:out]
|
72
|
+
end
|
73
|
+
|
74
|
+
def local
|
75
|
+
!path.match(/^ssh:/)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def in_command
|
81
|
+
[] << "hg in #{key}"
|
82
|
+
end
|
83
|
+
|
84
|
+
def out_command
|
85
|
+
command = []
|
86
|
+
command << "hg out #{key}"
|
87
|
+
command.concat branches unless force
|
88
|
+
command
|
89
|
+
end
|
90
|
+
|
91
|
+
def pull_command
|
92
|
+
[] << "hg pull #{key}"
|
93
|
+
end
|
94
|
+
|
95
|
+
def push_command
|
96
|
+
command = []
|
97
|
+
command << "hg push #{key}"
|
98
|
+
if force
|
99
|
+
command << '--force'
|
100
|
+
else
|
101
|
+
command.concat branches
|
102
|
+
command << '--new-branch'
|
103
|
+
end
|
104
|
+
command
|
105
|
+
end
|
106
|
+
|
107
|
+
def branches
|
108
|
+
params.branches.map do |branch|
|
109
|
+
"--branch #{branch}"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def path_for(path)
|
114
|
+
if path.match(/^ssh:/)
|
115
|
+
path % ssh_path
|
116
|
+
else
|
117
|
+
path % root_path
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def ssh_path
|
122
|
+
@ssh_path ||= root_path.gsub(%r+\/|\\+, '_')
|
123
|
+
end
|
124
|
+
|
125
|
+
def root_path
|
126
|
+
return @root_path if defined?(@root_path)
|
127
|
+
|
128
|
+
base = File.basename(Dir.pwd)
|
129
|
+
prefix = File.basename(File.dirname(Dir.pwd))
|
130
|
+
|
131
|
+
@root_path =
|
132
|
+
if params.include_prefix
|
133
|
+
base
|
134
|
+
else
|
135
|
+
File.join(prefix, base)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def params
|
140
|
+
Params.params
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
module PathsSection
|
3
|
+
extend self, Section
|
4
|
+
|
5
|
+
private
|
6
|
+
|
7
|
+
def section_content
|
8
|
+
Path.paths.map do |path|
|
9
|
+
key = path.key.ljust(padding)
|
10
|
+
"#{key} = #{path.path}"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def padding
|
15
|
+
@padding ||= Path.paths.map(&:key).map(&:length).max
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module HgrcGenerator
|
2
|
+
module UnixFormatter
|
3
|
+
extend self
|
4
|
+
|
5
|
+
def format(key, command_array, padding)
|
6
|
+
return unless command_array && !command_array.empty?
|
7
|
+
|
8
|
+
@padding = padding
|
9
|
+
|
10
|
+
commands = command_array.dup
|
11
|
+
commands[0][0] = "#{key} = #{command_leader}#{sep}#{cr}#{commands[0][0]}"
|
12
|
+
|
13
|
+
command = commands.map do |command|
|
14
|
+
command.join(params_delimiter)
|
15
|
+
end.join(command_delimiter) + command_delimiter
|
16
|
+
|
17
|
+
command.gsub(/^\s*$/, '')
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def sep
|
23
|
+
'hg sep;'
|
24
|
+
end
|
25
|
+
|
26
|
+
def command_leader
|
27
|
+
"!"
|
28
|
+
end
|
29
|
+
|
30
|
+
def command_delimiter
|
31
|
+
";#{cr}#{sep}#{cr}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def params_delimiter
|
35
|
+
" \\#{cr} "
|
36
|
+
end
|
37
|
+
|
38
|
+
def line_leader
|
39
|
+
' ' * padding
|
40
|
+
end
|
41
|
+
|
42
|
+
def cr
|
43
|
+
"\n#{line_leader}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def padding
|
47
|
+
@padding + 6
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|