gitenv 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/README.md +2 -2
- data/VERSION +1 -1
- data/lib/gitenv.rb +2 -4
- data/lib/gitenv/actions.rb +32 -0
- data/lib/gitenv/actions/copy.rb +86 -0
- data/lib/gitenv/actions/symlink.rb +69 -0
- data/lib/gitenv/config.rb +36 -19
- data/lib/gitenv/context.rb +29 -40
- data/lib/gitenv/controller.rb +19 -22
- data/lib/gitenv/files.rb +3 -0
- data/lib/gitenv/files/all_files.rb +16 -0
- data/lib/gitenv/{enumerator → files}/dot_files.rb +0 -0
- data/lib/gitenv/files/matcher.rb +26 -0
- data/lib/gitenv/{enumerator → files}/one_file.rb +3 -2
- data/lib/gitenv/renderer.rb +21 -0
- data/lib/gitenv/repository.rb +10 -0
- data/lib/gitenv/status.rb +39 -0
- data/lib/program.rb +3 -3
- metadata +31 -20
- data/.rspec +0 -2
- data/.rvmrc +0 -52
- data/.screenrc +0 -7
- data/.travis.yml +0 -5
- data/Gemfile.lock +0 -50
- data/Rakefile +0 -51
- data/gitenv.gemspec +0 -94
- data/lib/gitenv/action.rb +0 -24
- data/lib/gitenv/copy.rb +0 -68
- data/lib/gitenv/enumerator.rb +0 -3
- data/lib/gitenv/enumerator/all_files.rb +0 -10
- data/lib/gitenv/enumerator/enumerator.rb +0 -14
- data/lib/gitenv/symlink.rb +0 -60
- data/spec/helper.rb +0 -16
- data/spec/version_spec.rb +0 -9
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -10,9 +10,9 @@ Run gitenv without arguments to check the symlink configuration. First-time user
|
|
10
10
|
~/.gitconfig -> ~/projects/env/.gitconfig not yet set up
|
11
11
|
~/.zshrc -> ~/projects/env/.zshrc not yet set up
|
12
12
|
|
13
|
-
Then run it with **
|
13
|
+
Then run it with **apply** to set up the missing symlinks.
|
14
14
|
|
15
|
-
#=> gitenv
|
15
|
+
#=> gitenv apply
|
16
16
|
|
17
17
|
~/.gemrc -> ~/projects/env/.gemrc ok
|
18
18
|
~/.gitconfig -> ~/projects/env/.gitconfig ok
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/lib/gitenv.rb
CHANGED
@@ -2,9 +2,7 @@
|
|
2
2
|
require 'paint'
|
3
3
|
|
4
4
|
module Gitenv
|
5
|
-
VERSION = '0.0
|
5
|
+
VERSION = '0.1.0'
|
6
6
|
end
|
7
7
|
|
8
|
-
[
|
9
|
-
require File.join(File.dirname(__FILE__), 'gitenv', lib.to_s)
|
10
|
-
end
|
8
|
+
Dir[File.join File.dirname(__FILE__), File.basename(__FILE__, '.*'), '*.rb'].each{ |lib| require lib }
|
@@ -0,0 +1,32 @@
|
|
1
|
+
|
2
|
+
module Gitenv
|
3
|
+
|
4
|
+
class Action
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize context, type, files, options
|
8
|
+
@context, @type, @files, @options = context, type, files, options
|
9
|
+
end
|
10
|
+
|
11
|
+
def each &block
|
12
|
+
@files.files(@context.from).each do |f|
|
13
|
+
block.call @type.new(@context, f, @options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def each_file &block
|
18
|
+
@files.files(@context.from).each do |f|
|
19
|
+
block.call File.join(@context.from, f)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
%w(from to).each do |m|
|
24
|
+
define_method m do |*args|
|
25
|
+
@context.send *(args.unshift m)
|
26
|
+
self
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
Dir[File.join File.dirname(__FILE__), File.basename(__FILE__, '.*'), '*.rb'].each{ |lib| require lib }
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'fileutils'
|
3
|
+
require 'digest/sha1'
|
4
|
+
|
5
|
+
module Gitenv
|
6
|
+
|
7
|
+
class Copy
|
8
|
+
|
9
|
+
class Action < Action
|
10
|
+
|
11
|
+
def initialize context, files, options
|
12
|
+
super context, Copy, files, options
|
13
|
+
end
|
14
|
+
|
15
|
+
def overwrite *args
|
16
|
+
options = args.last.kind_of?(Hash) ? args.pop : {}
|
17
|
+
overwrite = args.empty? ? true : args.shift
|
18
|
+
@options[:overwrite] = overwrite
|
19
|
+
@options[:backup] = options[:backup] if options.key?(:backup)
|
20
|
+
self
|
21
|
+
end
|
22
|
+
|
23
|
+
def once
|
24
|
+
@options[:overwrite] = false
|
25
|
+
@options[:backup] = false
|
26
|
+
self
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def initialize context, file, options = {}
|
31
|
+
@context, @file = context, file
|
32
|
+
@as, @overwrite, @backup = options[:as], options[:overwrite], options[:backup]
|
33
|
+
@backup = true if @overwrite and !options.key?(:backup)
|
34
|
+
end
|
35
|
+
|
36
|
+
def apply
|
37
|
+
backup_exists = File.exists? target_backup
|
38
|
+
FileUtils.mv target, target_backup if @backup and File.exists?(target) and !backup_exists
|
39
|
+
FileUtils.rm target if @overwrite and File.exists?(target) and !backup_exists
|
40
|
+
FileUtils.cp origin, target unless File.exists?(target)
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_s
|
44
|
+
"#{Paint[target, :cyan]} #{Paint['<', :bold]} #{origin}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def status
|
48
|
+
if !File.exists?(target)
|
49
|
+
Status.missing "is not set up; apply will create the copy"
|
50
|
+
elsif @overwrite == false or digest(origin) == digest(target)
|
51
|
+
Status.ok 'ok'
|
52
|
+
elsif !@overwrite
|
53
|
+
Status.error "already exists; enable overwrite if you want to replace it"
|
54
|
+
elsif @backup and File.exists?(target_backup)
|
55
|
+
Status.error "already exists with backup copy"
|
56
|
+
else
|
57
|
+
backup_notice = if @backup; " backup the file and"; end
|
58
|
+
Status.warning "already exists; apply will#{backup_notice} overwrite"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def origin
|
63
|
+
@origin ||= File.join(*[ @context.from, @file ].compact)
|
64
|
+
end
|
65
|
+
|
66
|
+
def target
|
67
|
+
@target ||= File.join(*[ @context.to, target_name].compact)
|
68
|
+
end
|
69
|
+
|
70
|
+
def target_backup
|
71
|
+
@target_backup ||= "#{target}.orig"
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def target_name
|
77
|
+
@target_name ||= @as || @file
|
78
|
+
end
|
79
|
+
|
80
|
+
def digest file
|
81
|
+
Digest::SHA1.new.tap do |dig|
|
82
|
+
File.open(file, 'rb'){ |io| dig.update io.readpartial(4096) while !io.eof }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Gitenv
|
4
|
+
|
5
|
+
class Symlink
|
6
|
+
|
7
|
+
class Action < Action
|
8
|
+
|
9
|
+
def initialize context, files, options
|
10
|
+
super context, Symlink, files, options
|
11
|
+
end
|
12
|
+
|
13
|
+
def overwrite overwrite = true
|
14
|
+
@options[:overwrite] = overwrite
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def once
|
19
|
+
@options[:overwrite] = false
|
20
|
+
self
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def initialize context, file, options = {}
|
25
|
+
@context, @file = context, file
|
26
|
+
@as, @overwrite = options[:as], options[:overwrite]
|
27
|
+
end
|
28
|
+
|
29
|
+
def apply
|
30
|
+
FileUtils.rm link if @overwrite and File.symlink?(link) # FIXME: only if link points somewhere else
|
31
|
+
File.symlink target, link unless File.symlink?(link) or File.exists?(link)
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
"#{Paint[link, :cyan]} #{Paint['->', :bold]} #{target}"
|
36
|
+
end
|
37
|
+
|
38
|
+
def status
|
39
|
+
if File.symlink? link
|
40
|
+
current_target = File.expand_path File.readlink(link)
|
41
|
+
if @overwrite == false or current_target == target
|
42
|
+
Status.ok 'ok'
|
43
|
+
elsif !@overwrite
|
44
|
+
Status.error "exists but points to #{current_target}; enable overwrite if you want to replace it"
|
45
|
+
else
|
46
|
+
Status.warning "currently points to #{current_target}; apply will overwrite"
|
47
|
+
end
|
48
|
+
elsif File.exists? link
|
49
|
+
Status.error "exists but is not a symlink; apply will ignore"
|
50
|
+
else
|
51
|
+
Status.missing "is not set up; apply will create the link"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def link
|
56
|
+
@link ||= File.join(*[ @context.to, link_name].compact)
|
57
|
+
end
|
58
|
+
|
59
|
+
def target
|
60
|
+
@target ||= File.join(*[ @context.from, @file ].compact)
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def link_name
|
66
|
+
@link_name ||= @as || @file
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
data/lib/gitenv/config.rb
CHANGED
@@ -1,47 +1,64 @@
|
|
1
|
+
require 'rbconfig'
|
1
2
|
|
2
3
|
module Gitenv
|
3
4
|
|
4
5
|
class Config
|
5
|
-
include Context
|
6
6
|
|
7
|
+
attr_reader :repos
|
7
8
|
attr_reader :actions
|
8
|
-
attr_accessor :repository
|
9
|
-
attr_reader :home
|
10
9
|
|
11
|
-
def initialize
|
12
|
-
@
|
13
|
-
@actions = []
|
10
|
+
def initialize
|
11
|
+
@context = Context.new self
|
12
|
+
@repos, @actions = [], []
|
14
13
|
end
|
15
14
|
|
16
|
-
def repo path
|
17
|
-
@
|
15
|
+
def repo path, &block
|
16
|
+
@repos << Repository.new(path)
|
17
|
+
@context.from path, &block
|
18
|
+
self
|
18
19
|
end
|
19
20
|
|
20
21
|
def symlink file, options = {}
|
21
|
-
|
22
|
+
raise "You must specify a repository or a source directory to symlink from" unless @context.from
|
23
|
+
Symlink::Action.new(@context.dup, matcher(file), options).tap{ |a| @actions << a }
|
22
24
|
end
|
23
25
|
|
24
26
|
def copy file, options = {}
|
25
|
-
|
27
|
+
raise "You must specify a repository or a source directory to copy from" unless @context.from
|
28
|
+
Copy::Action.new(@context.dup, matcher(file), options).tap{ |a| @actions << a }
|
26
29
|
end
|
27
30
|
|
28
|
-
def all_files
|
29
|
-
:all_files
|
31
|
+
def all_files options = {}
|
32
|
+
matcher :all_files, options
|
30
33
|
end
|
31
34
|
|
32
|
-
def dot_files
|
33
|
-
:dot_files
|
35
|
+
def dot_files options = {}
|
36
|
+
matcher :dot_files, options
|
37
|
+
end
|
38
|
+
|
39
|
+
%w(from to).each do |m|
|
40
|
+
define_method m do |*args,&block|
|
41
|
+
@context.send *(args.unshift m), &block
|
42
|
+
self
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def ignores
|
47
|
+
@context.ignores
|
34
48
|
end
|
35
49
|
|
36
50
|
private
|
37
51
|
|
38
|
-
def
|
39
|
-
|
40
|
-
|
52
|
+
def matcher file, options = {}
|
53
|
+
options[:ignores] ||= @context.ignores.dup
|
54
|
+
if file.kind_of? FilesMatcher
|
55
|
+
file
|
56
|
+
elsif file == :all_files
|
57
|
+
AllFiles.new options
|
41
58
|
elsif file == :dot_files
|
42
|
-
DotFiles.new
|
59
|
+
DotFiles.new options
|
43
60
|
else
|
44
|
-
OneFile.new file
|
61
|
+
OneFile.new file, options
|
45
62
|
end
|
46
63
|
end
|
47
64
|
end
|
data/lib/gitenv/context.rb
CHANGED
@@ -1,60 +1,49 @@
|
|
1
|
+
require 'rbconfig'
|
1
2
|
|
2
3
|
module Gitenv
|
3
4
|
|
4
|
-
|
5
|
-
attr_accessor :
|
5
|
+
class Context
|
6
|
+
attr_accessor :ignores
|
6
7
|
|
7
|
-
def
|
8
|
-
|
9
|
-
if block
|
10
|
-
instance_eval &block
|
11
|
-
@from_paths.pop
|
12
|
-
end
|
13
|
-
self
|
14
|
-
end
|
8
|
+
def initialize config, options = {}
|
9
|
+
@config, @from, @ignores = config, options[:from], options[:ignores]
|
15
10
|
|
16
|
-
|
17
|
-
@from_paths ? File.join(*([ @config.repository, @from_paths ].flatten)) : @config.repository
|
18
|
-
end
|
11
|
+
@to ||= File.expand_path('~')
|
19
12
|
|
20
|
-
|
21
|
-
|
22
|
-
if block
|
23
|
-
instance_eval &block
|
24
|
-
@to_paths.pop
|
25
|
-
end
|
26
|
-
self
|
13
|
+
@ignores = options[:ignores] || []
|
14
|
+
@ignores << '.DS_Store' if @ignores.empty? and RbConfig::CONFIG['host_os'] =~ /darwin/
|
27
15
|
end
|
28
16
|
|
29
|
-
def
|
30
|
-
|
31
|
-
|
32
|
-
|
17
|
+
def from path = nil, &block
|
18
|
+
return @from if path.nil?
|
19
|
+
|
20
|
+
old = @from
|
21
|
+
@from = @from ? File.expand_path(path, @from) : File.expand_path(path)
|
22
|
+
|
33
23
|
if block
|
34
|
-
instance_eval &block
|
35
|
-
@
|
36
|
-
@absolute = false
|
24
|
+
@config.instance_eval &block
|
25
|
+
@from = old
|
37
26
|
end
|
27
|
+
|
38
28
|
self
|
39
29
|
end
|
40
30
|
|
41
|
-
def
|
42
|
-
@
|
43
|
-
end
|
31
|
+
def to path = nil, &block
|
32
|
+
return @to if path.nil?
|
44
33
|
|
45
|
-
|
46
|
-
|
47
|
-
self.to_paths = config.to_paths ? config.to_paths.dup : []
|
48
|
-
self.absolute = config.absolute
|
49
|
-
@config = config
|
50
|
-
end
|
34
|
+
old = @to
|
35
|
+
@to = @to ? File.expand_path(path, @to) : File.expand_path(path)
|
51
36
|
|
52
|
-
|
53
|
-
|
37
|
+
if block
|
38
|
+
@config.instance_eval &block
|
39
|
+
@to = old
|
40
|
+
end
|
41
|
+
|
42
|
+
self
|
54
43
|
end
|
55
44
|
|
56
|
-
def
|
57
|
-
@config.
|
45
|
+
def dup
|
46
|
+
Context.new @config, from: @from, to: @to, ignores: @ignores.dup
|
58
47
|
end
|
59
48
|
end
|
60
49
|
end
|
data/lib/gitenv/controller.rb
CHANGED
@@ -9,8 +9,7 @@ module Gitenv
|
|
9
9
|
@action = action
|
10
10
|
@options = options
|
11
11
|
|
12
|
-
@
|
13
|
-
@config = Config.new @home
|
12
|
+
@config = Config.new
|
14
13
|
end
|
15
14
|
|
16
15
|
def run
|
@@ -23,23 +22,21 @@ module Gitenv
|
|
23
22
|
|
24
23
|
load_config_file!
|
25
24
|
|
26
|
-
|
27
|
-
check_repository!
|
25
|
+
#@config.from repository
|
26
|
+
#check_repository!
|
28
27
|
|
29
28
|
# load dot files by default
|
30
|
-
if @config.actions.empty?
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
check_files!
|
29
|
+
#if @config.actions.empty?
|
30
|
+
# @config.symlink @config.dot_files
|
31
|
+
#end
|
35
32
|
|
36
|
-
|
37
|
-
@config.actions.each{ |a| a.each{ |impl| longest = impl.description.length if impl.description.length > longest } }
|
33
|
+
#check_files!
|
38
34
|
|
35
|
+
renderer = Renderer.new
|
39
36
|
@config.actions.each do |a|
|
40
|
-
a.each
|
41
|
-
impl.
|
42
|
-
puts impl
|
37
|
+
a.each do |impl|
|
38
|
+
impl.apply if @action == :apply
|
39
|
+
puts renderer.render(impl)
|
43
40
|
end
|
44
41
|
end
|
45
42
|
end
|
@@ -88,7 +85,7 @@ module Gitenv
|
|
88
85
|
end
|
89
86
|
|
90
87
|
def repository
|
91
|
-
@options.repo || @config.
|
88
|
+
@options.repo || @config.from || ENV['GITENV_REPO']
|
92
89
|
end
|
93
90
|
|
94
91
|
def config_file
|
@@ -97,7 +94,7 @@ module Gitenv
|
|
97
94
|
elsif ENV['GITENV_CONFIG']
|
98
95
|
File.expand_path ENV['GITENV_CONFIG']
|
99
96
|
else
|
100
|
-
File.
|
97
|
+
File.expand_path '~/.gitenv.rb'
|
101
98
|
end
|
102
99
|
end
|
103
100
|
|
@@ -114,8 +111,8 @@ module Gitenv
|
|
114
111
|
a.each_file do |f|
|
115
112
|
if !File.exists?(f)
|
116
113
|
problems << { :file => f, :msg => "does not exist" }
|
117
|
-
elsif !File.file?(f)
|
118
|
-
|
114
|
+
#elsif !File.file?(f)
|
115
|
+
# problems << { :file => f, :msg => "is not a file" }
|
119
116
|
elsif !File.readable?(f)
|
120
117
|
problems << { :file => f, :msg => "is not readable" }
|
121
118
|
end
|
@@ -142,21 +139,21 @@ module Gitenv
|
|
142
139
|
end
|
143
140
|
|
144
141
|
def check_repository!
|
145
|
-
if !@config.
|
142
|
+
if !@config.from
|
146
143
|
msg = "You have not specified an environment repository."
|
147
144
|
msg << "\nYou must either use the -r, --repo option or create"
|
148
145
|
msg << "\na configuration file (~/.gitenv.rb by default) with"
|
149
146
|
msg << "\nthe repo setting."
|
150
147
|
abort msg
|
151
148
|
end
|
152
|
-
return if File.directory? @config.
|
153
|
-
notice = File.exists?(@config.
|
149
|
+
return if File.directory? @config.from
|
150
|
+
notice = File.exists?(@config.from) ? 'is not a directory' : 'does not exist'
|
154
151
|
from = if @options.repo
|
155
152
|
"--repo #{@options.repo}"
|
156
153
|
elsif ENV['GITENV_REPO']
|
157
154
|
"$GITENV_REPO = #{ENV['GITENV_REPO']}"
|
158
155
|
else
|
159
|
-
%/repo "#{@config.
|
156
|
+
%/repo "#{@config.from}"/
|
160
157
|
end
|
161
158
|
abort "The repository you have specified #{notice}.\n (#{from})"
|
162
159
|
end
|
data/lib/gitenv/files.rb
ADDED
File without changes
|
@@ -0,0 +1,26 @@
|
|
1
|
+
|
2
|
+
module Gitenv
|
3
|
+
|
4
|
+
class FilesMatcher
|
5
|
+
|
6
|
+
def initialize options = {}
|
7
|
+
@options = options
|
8
|
+
@ignores = options[:ignores] ? [ options[:ignores] ].flatten : []
|
9
|
+
end
|
10
|
+
|
11
|
+
def files path
|
12
|
+
ignore Dir.entries(path)
|
13
|
+
end
|
14
|
+
|
15
|
+
def except *args
|
16
|
+
@ignores.concat args
|
17
|
+
self
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def ignore entries
|
23
|
+
entries.reject{ |e| @ignores.any?{ |g| g == e or (g.kind_of?(Regexp) and e.match(g)) } }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
|
2
|
+
module Gitenv
|
3
|
+
|
4
|
+
class Renderer
|
5
|
+
|
6
|
+
def initialize options = {}
|
7
|
+
@options = options
|
8
|
+
end
|
9
|
+
|
10
|
+
def render action
|
11
|
+
|
12
|
+
status = action.status
|
13
|
+
color = status.color
|
14
|
+
error = if !status.ok?
|
15
|
+
"\n #{Paint[status.message, color]}"
|
16
|
+
end
|
17
|
+
|
18
|
+
" #{Paint[status.marker, color]} #{action}#{error}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Gitenv
|
4
|
+
|
5
|
+
class Status
|
6
|
+
TYPES = [ :ok, :missing, :warning, :error ]
|
7
|
+
COLORS = { ok: :green, missing: :blue, warning: :yellow, error: :red }
|
8
|
+
|
9
|
+
attr_reader :type, :message
|
10
|
+
|
11
|
+
class << self
|
12
|
+
TYPES.each do |m|
|
13
|
+
define_method m do |message|
|
14
|
+
self.new m, message
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
TYPES.each do |m|
|
20
|
+
define_method "#{m}?" do
|
21
|
+
@type == m
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def marker
|
26
|
+
@type == :ok ? "✓" : "✗"
|
27
|
+
end
|
28
|
+
|
29
|
+
def color
|
30
|
+
COLORS[@type]
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def initialize type, message
|
36
|
+
@type, @message = type, message
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/program.rb
CHANGED
@@ -16,11 +16,11 @@ command :info do |c|
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
command :
|
20
|
-
c.syntax = 'gitenv
|
19
|
+
command :apply do |c|
|
20
|
+
c.syntax = 'gitenv apply'
|
21
21
|
c.description = 'Create/update the symlinks'
|
22
22
|
c.action do |args,options|
|
23
|
-
Gitenv::Controller.new(:
|
23
|
+
Gitenv::Controller.new(:apply, options).run
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gitenv
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-05-13 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: paint
|
@@ -91,6 +91,22 @@ dependencies:
|
|
91
91
|
- - ! '>='
|
92
92
|
- !ruby/object:Gem::Version
|
93
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: fakefs
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ~>
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 0.4.2
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.4.2
|
94
110
|
- !ruby/object:Gem::Dependency
|
95
111
|
name: jeweler
|
96
112
|
requirement: !ruby/object:Gem::Requirement
|
@@ -180,33 +196,27 @@ extra_rdoc_files:
|
|
180
196
|
- LICENSE.txt
|
181
197
|
- README.md
|
182
198
|
files:
|
183
|
-
- .rspec
|
184
|
-
- .rvmrc
|
185
|
-
- .screenrc
|
186
|
-
- .travis.yml
|
187
199
|
- Gemfile
|
188
|
-
- Gemfile.lock
|
189
200
|
- LICENSE.txt
|
190
201
|
- README.md
|
191
|
-
- Rakefile
|
192
202
|
- VERSION
|
193
203
|
- bin/gitenv
|
194
|
-
- gitenv.gemspec
|
195
204
|
- lib/gitenv.rb
|
196
|
-
- lib/gitenv/
|
205
|
+
- lib/gitenv/actions.rb
|
206
|
+
- lib/gitenv/actions/copy.rb
|
207
|
+
- lib/gitenv/actions/symlink.rb
|
197
208
|
- lib/gitenv/config.rb
|
198
209
|
- lib/gitenv/context.rb
|
199
210
|
- lib/gitenv/controller.rb
|
200
|
-
- lib/gitenv/
|
201
|
-
- lib/gitenv/
|
202
|
-
- lib/gitenv/
|
203
|
-
- lib/gitenv/
|
204
|
-
- lib/gitenv/
|
205
|
-
- lib/gitenv/
|
206
|
-
- lib/gitenv/
|
211
|
+
- lib/gitenv/files.rb
|
212
|
+
- lib/gitenv/files/all_files.rb
|
213
|
+
- lib/gitenv/files/dot_files.rb
|
214
|
+
- lib/gitenv/files/matcher.rb
|
215
|
+
- lib/gitenv/files/one_file.rb
|
216
|
+
- lib/gitenv/renderer.rb
|
217
|
+
- lib/gitenv/repository.rb
|
218
|
+
- lib/gitenv/status.rb
|
207
219
|
- lib/program.rb
|
208
|
-
- spec/helper.rb
|
209
|
-
- spec/version_spec.rb
|
210
220
|
homepage: http://github.com/AlphaHydrae/gitenv
|
211
221
|
licenses:
|
212
222
|
- MIT
|
@@ -228,8 +238,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
228
238
|
version: '0'
|
229
239
|
requirements: []
|
230
240
|
rubyforge_project:
|
231
|
-
rubygems_version: 1.8.
|
241
|
+
rubygems_version: 1.8.25
|
232
242
|
signing_key:
|
233
243
|
specification_version: 3
|
234
244
|
summary: Symlink manager for git repositories with configuration files.
|
235
245
|
test_files: []
|
246
|
+
has_rdoc:
|
data/.rspec
DELETED
data/.rvmrc
DELETED
@@ -1,52 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
# This is an RVM Project .rvmrc file, used to automatically load the ruby
|
4
|
-
# development environment upon cd'ing into the directory
|
5
|
-
|
6
|
-
# First we specify our desired <ruby>[@<gemset>], the @gemset name is optional,
|
7
|
-
# Only full ruby name is supported here, for short names use:
|
8
|
-
# echo "rvm use 1.9.3" > .rvmrc
|
9
|
-
environment_id="ruby-1.9.3-p194@gitenv"
|
10
|
-
|
11
|
-
# Uncomment the following lines if you want to verify rvm version per project
|
12
|
-
# rvmrc_rvm_version="1.15.8 ()" # 1.10.1 seams as a safe start
|
13
|
-
# eval "$(echo ${rvm_version}.${rvmrc_rvm_version} | awk -F. '{print "[[ "$1*65536+$2*256+$3" -ge "$4*65536+$5*256+$6" ]]"}' )" || {
|
14
|
-
# echo "This .rvmrc file requires at least RVM ${rvmrc_rvm_version}, aborting loading."
|
15
|
-
# return 1
|
16
|
-
# }
|
17
|
-
|
18
|
-
# First we attempt to load the desired environment directly from the environment
|
19
|
-
# file. This is very fast and efficient compared to running through the entire
|
20
|
-
# CLI and selector. If you want feedback on which environment was used then
|
21
|
-
# insert the word 'use' after --create as this triggers verbose mode.
|
22
|
-
if [[ -d "${rvm_path:-$HOME/.rvm}/environments"
|
23
|
-
&& -s "${rvm_path:-$HOME/.rvm}/environments/$environment_id" ]]
|
24
|
-
then
|
25
|
-
\. "${rvm_path:-$HOME/.rvm}/environments/$environment_id"
|
26
|
-
[[ -s "${rvm_path:-$HOME/.rvm}/hooks/after_use" ]] &&
|
27
|
-
\. "${rvm_path:-$HOME/.rvm}/hooks/after_use" || true
|
28
|
-
if [[ $- == *i* ]] # check for interactive shells
|
29
|
-
then echo "Using: $(tput setaf 2)$GEM_HOME$(tput sgr0)" # show the user the ruby and gemset they are using in green
|
30
|
-
else echo "Using: $GEM_HOME" # don't use colors in non-interactive shells
|
31
|
-
fi
|
32
|
-
else
|
33
|
-
# If the environment file has not yet been created, use the RVM CLI to select.
|
34
|
-
rvm --create use "$environment_id" || {
|
35
|
-
echo "Failed to create RVM environment '${environment_id}'."
|
36
|
-
return 1
|
37
|
-
}
|
38
|
-
fi
|
39
|
-
|
40
|
-
# If you use bundler, this might be useful to you:
|
41
|
-
# if [[ -s Gemfile ]] && {
|
42
|
-
# ! builtin command -v bundle >/dev/null ||
|
43
|
-
# builtin command -v bundle | GREP_OPTIONS= \grep $rvm_path/bin/bundle >/dev/null
|
44
|
-
# }
|
45
|
-
# then
|
46
|
-
# printf "%b" "The rubygem 'bundler' is not installed. Installing it now.\n"
|
47
|
-
# gem install bundler
|
48
|
-
# fi
|
49
|
-
# if [[ -s Gemfile ]] && builtin command -v bundle >/dev/null
|
50
|
-
# then
|
51
|
-
# bundle install | GREP_OPTIONS= \grep -vE '^Using|Your bundle is complete'
|
52
|
-
# fi
|
data/.screenrc
DELETED
data/.travis.yml
DELETED
data/Gemfile.lock
DELETED
@@ -1,50 +0,0 @@
|
|
1
|
-
GEM
|
2
|
-
remote: http://rubygems.org/
|
3
|
-
specs:
|
4
|
-
commander (4.1.2)
|
5
|
-
highline (~> 1.6.11)
|
6
|
-
diff-lcs (1.1.3)
|
7
|
-
gem-release (0.4.1)
|
8
|
-
gemcutter (0.7.1)
|
9
|
-
git (1.2.5)
|
10
|
-
highline (1.6.15)
|
11
|
-
jeweler (1.8.4)
|
12
|
-
bundler (~> 1.0)
|
13
|
-
git (>= 1.2.5)
|
14
|
-
rake
|
15
|
-
rdoc
|
16
|
-
json (1.7.5)
|
17
|
-
multi_json (1.3.6)
|
18
|
-
paint (0.8.5)
|
19
|
-
rake (0.9.2.2)
|
20
|
-
rake-version (0.3.0)
|
21
|
-
rake (~> 0.9.2)
|
22
|
-
rdoc (3.12)
|
23
|
-
json (~> 1.4)
|
24
|
-
rspec (2.11.0)
|
25
|
-
rspec-core (~> 2.11.0)
|
26
|
-
rspec-expectations (~> 2.11.0)
|
27
|
-
rspec-mocks (~> 2.11.0)
|
28
|
-
rspec-core (2.11.1)
|
29
|
-
rspec-expectations (2.11.3)
|
30
|
-
diff-lcs (~> 1.1.3)
|
31
|
-
rspec-mocks (2.11.3)
|
32
|
-
simplecov (0.6.4)
|
33
|
-
multi_json (~> 1.0)
|
34
|
-
simplecov-html (~> 0.5.3)
|
35
|
-
simplecov-html (0.5.3)
|
36
|
-
|
37
|
-
PLATFORMS
|
38
|
-
ruby
|
39
|
-
|
40
|
-
DEPENDENCIES
|
41
|
-
bundler
|
42
|
-
commander (~> 4.1.2)
|
43
|
-
gem-release
|
44
|
-
gemcutter
|
45
|
-
jeweler
|
46
|
-
paint (~> 0.8.5)
|
47
|
-
rake
|
48
|
-
rake-version
|
49
|
-
rspec
|
50
|
-
simplecov
|
data/Rakefile
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :development)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "gitenv"
|
18
|
-
gem.homepage = "http://github.com/AlphaHydrae/gitenv"
|
19
|
-
gem.license = "MIT"
|
20
|
-
gem.summary = %Q{Symlink manager for git repositories with configuration files.}
|
21
|
-
gem.description = %Q{Gitenv sets up symlinks to your configuration files in a git repository.}
|
22
|
-
gem.email = "hydrae.alpha@gmail.com"
|
23
|
-
gem.authors = ["AlphaHydrae"]
|
24
|
-
# dependencies defined in Gemfile
|
25
|
-
end
|
26
|
-
Jeweler::RubygemsDotOrgTasks.new
|
27
|
-
|
28
|
-
Rake::TaskManager.class_eval do
|
29
|
-
def remove_task(task_name)
|
30
|
-
@tasks.delete(task_name.to_s)
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
[ 'version', 'version:bump:major', 'version:bump:minor', 'version:bump:patch', 'version:write' ].each do |task|
|
35
|
-
Rake.application.remove_task task
|
36
|
-
end
|
37
|
-
|
38
|
-
# version tasks
|
39
|
-
require 'rake-version'
|
40
|
-
RakeVersion::Tasks.new do |v|
|
41
|
-
v.copy 'lib/gitenv.rb'
|
42
|
-
end
|
43
|
-
|
44
|
-
require 'rspec/core/rake_task'
|
45
|
-
desc "Run specs"
|
46
|
-
RSpec::Core::RakeTask.new do |t|
|
47
|
-
#t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
|
48
|
-
# Put spec opts in a file named .rspec in root
|
49
|
-
end
|
50
|
-
|
51
|
-
task :default => :spec
|
data/gitenv.gemspec
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = "gitenv"
|
8
|
-
s.version = "0.0.5"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["AlphaHydrae"]
|
12
|
-
s.date = "2012-09-24"
|
13
|
-
s.description = "Gitenv sets up symlinks to your configuration files in a git repository."
|
14
|
-
s.email = "hydrae.alpha@gmail.com"
|
15
|
-
s.executables = ["gitenv"]
|
16
|
-
s.extra_rdoc_files = [
|
17
|
-
"LICENSE.txt",
|
18
|
-
"README.md"
|
19
|
-
]
|
20
|
-
s.files = [
|
21
|
-
".rspec",
|
22
|
-
".rvmrc",
|
23
|
-
".screenrc",
|
24
|
-
".travis.yml",
|
25
|
-
"Gemfile",
|
26
|
-
"Gemfile.lock",
|
27
|
-
"LICENSE.txt",
|
28
|
-
"README.md",
|
29
|
-
"Rakefile",
|
30
|
-
"VERSION",
|
31
|
-
"bin/gitenv",
|
32
|
-
"gitenv.gemspec",
|
33
|
-
"lib/gitenv.rb",
|
34
|
-
"lib/gitenv/action.rb",
|
35
|
-
"lib/gitenv/config.rb",
|
36
|
-
"lib/gitenv/context.rb",
|
37
|
-
"lib/gitenv/controller.rb",
|
38
|
-
"lib/gitenv/copy.rb",
|
39
|
-
"lib/gitenv/enumerator.rb",
|
40
|
-
"lib/gitenv/enumerator/all_files.rb",
|
41
|
-
"lib/gitenv/enumerator/dot_files.rb",
|
42
|
-
"lib/gitenv/enumerator/enumerator.rb",
|
43
|
-
"lib/gitenv/enumerator/one_file.rb",
|
44
|
-
"lib/gitenv/symlink.rb",
|
45
|
-
"lib/program.rb",
|
46
|
-
"spec/helper.rb",
|
47
|
-
"spec/version_spec.rb"
|
48
|
-
]
|
49
|
-
s.homepage = "http://github.com/AlphaHydrae/gitenv"
|
50
|
-
s.licenses = ["MIT"]
|
51
|
-
s.require_paths = ["lib"]
|
52
|
-
s.rubygems_version = "1.8.24"
|
53
|
-
s.summary = "Symlink manager for git repositories with configuration files."
|
54
|
-
|
55
|
-
if s.respond_to? :specification_version then
|
56
|
-
s.specification_version = 3
|
57
|
-
|
58
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
|
-
s.add_runtime_dependency(%q<paint>, ["~> 0.8.5"])
|
60
|
-
s.add_runtime_dependency(%q<commander>, ["~> 4.1.2"])
|
61
|
-
s.add_development_dependency(%q<bundler>, [">= 0"])
|
62
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
63
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
64
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
65
|
-
s.add_development_dependency(%q<gemcutter>, [">= 0"])
|
66
|
-
s.add_development_dependency(%q<gem-release>, [">= 0"])
|
67
|
-
s.add_development_dependency(%q<rake-version>, [">= 0"])
|
68
|
-
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
69
|
-
else
|
70
|
-
s.add_dependency(%q<paint>, ["~> 0.8.5"])
|
71
|
-
s.add_dependency(%q<commander>, ["~> 4.1.2"])
|
72
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
73
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
74
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
75
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
76
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
77
|
-
s.add_dependency(%q<gem-release>, [">= 0"])
|
78
|
-
s.add_dependency(%q<rake-version>, [">= 0"])
|
79
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
80
|
-
end
|
81
|
-
else
|
82
|
-
s.add_dependency(%q<paint>, ["~> 0.8.5"])
|
83
|
-
s.add_dependency(%q<commander>, ["~> 4.1.2"])
|
84
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
85
|
-
s.add_dependency(%q<rake>, [">= 0"])
|
86
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
87
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
88
|
-
s.add_dependency(%q<gemcutter>, [">= 0"])
|
89
|
-
s.add_dependency(%q<gem-release>, [">= 0"])
|
90
|
-
s.add_dependency(%q<rake-version>, [">= 0"])
|
91
|
-
s.add_dependency(%q<simplecov>, [">= 0"])
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
data/lib/gitenv/action.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
|
2
|
-
module Gitenv
|
3
|
-
|
4
|
-
class Action
|
5
|
-
include Context
|
6
|
-
|
7
|
-
def initialize config, type, files, options
|
8
|
-
@type, @files, @options = type, files, options
|
9
|
-
copy! config
|
10
|
-
end
|
11
|
-
|
12
|
-
def each options = {}, &block
|
13
|
-
@files.each from_path do |f|
|
14
|
-
block.call @type.new(self, f, @options.merge(options))
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
def each_file &block
|
19
|
-
@files.each from_path do |f|
|
20
|
-
block.call File.join(from_path, f)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
data/lib/gitenv/copy.rb
DELETED
@@ -1,68 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
require 'fileutils'
|
3
|
-
require 'digest/sha1'
|
4
|
-
|
5
|
-
module Gitenv
|
6
|
-
|
7
|
-
class Copy
|
8
|
-
|
9
|
-
def initialize config, file, options = {}
|
10
|
-
@config, @file, @options = config, file, options
|
11
|
-
end
|
12
|
-
|
13
|
-
def update!
|
14
|
-
if File.exists?(target) && !File.exists?(target_copy)
|
15
|
-
FileUtils.mv target, target_copy
|
16
|
-
end
|
17
|
-
if !File.exists?(target)
|
18
|
-
FileUtils.copy source, target
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
def to_s
|
23
|
-
color, mark, msg = status
|
24
|
-
justification = @options[:justify] ? ' ' * (@options[:justify] - description.length) : ''
|
25
|
-
%/ #{Paint[mark, color]} #{Paint[target, :cyan]} << #{source}#{justification}#{Paint[msg, color]}/
|
26
|
-
end
|
27
|
-
|
28
|
-
def description
|
29
|
-
"#{target} << #{source}"
|
30
|
-
end
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def status
|
35
|
-
if !File.exists?(target)
|
36
|
-
[ :blue, "✗", "is not set up; update will create the copy" ]
|
37
|
-
elsif digest(source) == digest(target)
|
38
|
-
[ :green, "✓", "ok" ]
|
39
|
-
elsif File.exists?(target_copy)
|
40
|
-
[ :red, "✗", "already exists with backup copy" ]
|
41
|
-
else
|
42
|
-
[ :blue, "✗", "already exists; update will backup the file and create the copy" ]
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def target
|
47
|
-
@target ||= File.join(*[ @config.to_path, target_name].compact)
|
48
|
-
end
|
49
|
-
|
50
|
-
def target_copy
|
51
|
-
@target_copy ||= "#{target}.orig"
|
52
|
-
end
|
53
|
-
|
54
|
-
def target_name
|
55
|
-
@options[:as] || @file
|
56
|
-
end
|
57
|
-
|
58
|
-
def source
|
59
|
-
@source ||= File.join(*[ @config.from_path, @file ].compact)
|
60
|
-
end
|
61
|
-
|
62
|
-
def digest file
|
63
|
-
Digest::SHA1.new.tap do |dig|
|
64
|
-
File.open(file, 'rb'){ |io| dig.update io.readpartial(4096) while !io.eof }
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
data/lib/gitenv/enumerator.rb
DELETED
data/lib/gitenv/symlink.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
# encoding: UTF-8
|
2
|
-
|
3
|
-
module Gitenv
|
4
|
-
|
5
|
-
class Symlink
|
6
|
-
|
7
|
-
def initialize config, file, options = {}
|
8
|
-
@config, @file, @options = config, file, options
|
9
|
-
end
|
10
|
-
|
11
|
-
def update!
|
12
|
-
unless File.exists? link
|
13
|
-
File.symlink target, link
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_s
|
18
|
-
color, mark, msg = status
|
19
|
-
justification = @options[:justify] ? ' ' * (@options[:justify] - description.length) : ''
|
20
|
-
%/ #{Paint[mark, color]} #{Paint[link, :cyan]} -> #{target}#{justification}#{Paint[msg, color]}/
|
21
|
-
end
|
22
|
-
|
23
|
-
def description
|
24
|
-
"#{link} -> #{target}"
|
25
|
-
end
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def status
|
30
|
-
if File.symlink? link
|
31
|
-
current_target = File.expand_path File.readlink(link)
|
32
|
-
if current_target == target
|
33
|
-
[ :green, "✓", "ok" ]
|
34
|
-
else
|
35
|
-
[ :yellow, "✗", "currently points to #{current_target}; update will overwrite" ]
|
36
|
-
end
|
37
|
-
elsif File.file? link
|
38
|
-
[ :red, "✗", "is a file; update will ignore" ]
|
39
|
-
elsif File.directory? link
|
40
|
-
[ :red, "✗", "is a directory; update will ignore" ]
|
41
|
-
elsif File.exists? link
|
42
|
-
[ :red, "✗", "exists but is not a symlink; update will ignore" ]
|
43
|
-
else
|
44
|
-
[ :blue, "✗", "is not set up; update will create the link" ]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def link
|
49
|
-
@link ||= File.join(*[ @config.to_path, link_name].compact)
|
50
|
-
end
|
51
|
-
|
52
|
-
def target
|
53
|
-
@target ||= File.join(*[ @config.from_path, @file ].compact)
|
54
|
-
end
|
55
|
-
|
56
|
-
def link_name
|
57
|
-
@options[:as] || @file
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
data/spec/helper.rb
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'bundler'
|
3
|
-
|
4
|
-
begin
|
5
|
-
Bundler.setup(:default, :development)
|
6
|
-
rescue Bundler::BundlerError => e
|
7
|
-
$stderr.puts e.message
|
8
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
9
|
-
exit e.status_code
|
10
|
-
end
|
11
|
-
|
12
|
-
require 'simplecov'
|
13
|
-
SimpleCov.start
|
14
|
-
|
15
|
-
require 'rspec'
|
16
|
-
require 'gitenv'
|