dotfu 0.1.1 → 0.2.0
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/CHANGELOG.md +5 -0
- data/lib/dotfu/repos.rb +80 -22
- data/lib/dotfu/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3be9876e7c3827258b2d2fbf1efd68a6963df450
|
4
|
+
data.tar.gz: 948c87f6da4ea64b88ee514543cecf3fa80cbe12
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 416127a74da102f1c562a98ed28315d1b23ffce0eede1f8dcfb621e85e1d6c9de62dcc389f17877c5e84a7c053c4a24227cbe0b86434ef03931468f098268589
|
7
|
+
data.tar.gz: 0c963d190761c0f9e64ad9789b89960b4bcce6047e1c7c15c7b36e34bf4fe692d9f99f8253ea3a2822f492778a6e9aad5cce026ffe97a2a5e0cb85e20a9962cc
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
# 0.2.0
|
2
|
+
* Backups! sooner then expected.
|
3
|
+
* Will now only make dot files in the home dir.
|
4
|
+
* updating actually works now, though needs to be refactored.
|
5
|
+
|
1
6
|
# 0.1.1
|
2
7
|
* Switched from calling git myself to using the one on rubygems. Has issues, but less.
|
3
8
|
* Fixed branch logic.
|
data/lib/dotfu/repos.rb
CHANGED
@@ -6,6 +6,7 @@ module Dotfu
|
|
6
6
|
attr_accessor :config_file
|
7
7
|
attr_accessor :working_dir
|
8
8
|
attr_accessor :target_dir
|
9
|
+
attr_accessor :backup_dir
|
9
10
|
|
10
11
|
# r can be either a repo, or a user:repo pair.
|
11
12
|
def initialize(arg = nil)
|
@@ -14,13 +15,12 @@ module Dotfu
|
|
14
15
|
end
|
15
16
|
|
16
17
|
### Specialized attribute methods
|
17
|
-
def
|
18
|
-
return @
|
18
|
+
def backup_dir
|
19
|
+
return @backup_dir ? @backup_dir : "#{Bini.data_dir}/backups/#{repo}"
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
return @repo = word.start_with?('dotfiles-') ? word : "dotfiles-#{word}"
|
22
|
+
def config_file
|
23
|
+
return @config_file ? @config_file : "dotfu.json"
|
24
24
|
end
|
25
25
|
|
26
26
|
# target_dir should always return something.
|
@@ -28,9 +28,9 @@ module Dotfu
|
|
28
28
|
return @target_dir ? @target_dir : Dir.home
|
29
29
|
end
|
30
30
|
|
31
|
-
#
|
32
|
-
def
|
33
|
-
return @
|
31
|
+
# prepend repo with dotfiles- if it doesn't exist as it is set.
|
32
|
+
def repo=(word)
|
33
|
+
return @repo = word.start_with?('dotfiles-') ? word : "dotfiles-#{word}"
|
34
34
|
end
|
35
35
|
|
36
36
|
# return the explicit directory this repo is cloned into.
|
@@ -39,7 +39,35 @@ module Dotfu
|
|
39
39
|
return "#{Bini.data_dir}/repos/#{user}/#{repo}"
|
40
40
|
end
|
41
41
|
|
42
|
+
# return user or the user in the config file.
|
43
|
+
def user
|
44
|
+
return @user ? @user : Dotfu.config_user
|
45
|
+
end
|
46
|
+
|
42
47
|
### Work methods
|
48
|
+
def backup
|
49
|
+
return nil if installed?
|
50
|
+
files = existing_files false
|
51
|
+
|
52
|
+
if files.any?
|
53
|
+
FileUtils.mkdir_p backup_dir
|
54
|
+
|
55
|
+
files.each do |target_file|
|
56
|
+
working_file = target_file.split("#{target_dir}/").last
|
57
|
+
next if is_my_file? target_file
|
58
|
+
|
59
|
+
begin
|
60
|
+
FileUtils.mv target_file, "#{backup_dir}/#{working_file}"
|
61
|
+
rescue Exception => e
|
62
|
+
puts e
|
63
|
+
exit
|
64
|
+
#puts raise RuntimeError.new "File move failed for: #{working_file} to #{backup_dir}/#{working_file} failed: #{e}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
return true
|
70
|
+
end
|
43
71
|
|
44
72
|
# initial clone
|
45
73
|
def clone
|
@@ -64,13 +92,12 @@ module Dotfu
|
|
64
92
|
r = Git.init working_dir
|
65
93
|
|
66
94
|
result = r.checkout(@branch ? branch : "master")
|
67
|
-
|
68
95
|
raise RuntimeError.new result unless result
|
69
96
|
|
70
|
-
#
|
71
|
-
|
72
|
-
|
73
|
-
|
97
|
+
# Backup!
|
98
|
+
if existing_files(false)
|
99
|
+
puts "wtf, backup failed" unless backup
|
100
|
+
end
|
74
101
|
|
75
102
|
# And now that we are ok with everything, lets make some fucking files.
|
76
103
|
# TODO: add deep linking (mkdir + ln_s for each target) or shallow (just the first directory)
|
@@ -83,17 +110,31 @@ module Dotfu
|
|
83
110
|
def pull
|
84
111
|
return nil if !repo || !user
|
85
112
|
r = Git.init working_dir
|
86
|
-
|
87
|
-
# to muck something up for someone. Find a way to do this explicitly.
|
113
|
+
r.fetch
|
114
|
+
#TODO: I'm confident that the implicit decleration of first here is going to muck something up for someone. Find a way to do this explicitly.
|
88
115
|
return r.remote.merge
|
89
116
|
end
|
90
117
|
|
118
|
+
# Restore files (as neccessary)
|
119
|
+
def restore
|
120
|
+
files = Dir.glob("#{backup_dir}/**/*")
|
121
|
+
|
122
|
+
raise "Files in the way" if existing_files
|
123
|
+
|
124
|
+
return true if files.empty?
|
125
|
+
|
126
|
+
files.each do |f|
|
127
|
+
FileUtils.mv f, target_dir
|
128
|
+
end
|
129
|
+
|
130
|
+
return true
|
131
|
+
end
|
132
|
+
|
91
133
|
def uninstall
|
92
134
|
raise RuntimeError.new "Not installed." unless installed?
|
93
135
|
|
94
|
-
# ok we are not installed, lets clear the links. Later, this will restore
|
95
|
-
# the backups (or something similiar).
|
96
136
|
target_files.each {|f| FileUtils.rm f}
|
137
|
+
restore
|
97
138
|
return true
|
98
139
|
end
|
99
140
|
|
@@ -124,11 +165,12 @@ module Dotfu
|
|
124
165
|
return true
|
125
166
|
end
|
126
167
|
|
127
|
-
# Return true if this file
|
168
|
+
# Return true if this file is linked to this repo.
|
128
169
|
def is_my_file?(file)
|
129
170
|
return true if File.exist?(file) && File.symlink?(file) && File.readlink(file).start_with?(working_dir)
|
130
171
|
return false
|
131
172
|
end
|
173
|
+
|
132
174
|
# return an [Array] of base filenames.
|
133
175
|
def files
|
134
176
|
if !@files
|
@@ -139,10 +181,26 @@ module Dotfu
|
|
139
181
|
return @files
|
140
182
|
end
|
141
183
|
|
184
|
+
# return an array of existing files in the way.
|
185
|
+
# Accepts a [Boolean] as the only argument, true to return files we linked (default),
|
186
|
+
# false if we want just the files that are in the way.
|
187
|
+
def existing_files(my_files = true)
|
188
|
+
# I can do this in a convoluted set of if checks, of a couple readable selects.
|
189
|
+
output = target_files.select { |f| File.exist? f }
|
190
|
+
output.delete_if { |f| my_files && is_my_file?(f)}
|
191
|
+
|
192
|
+
return output
|
193
|
+
end
|
194
|
+
|
142
195
|
# Return the target file.
|
143
196
|
# Takes a [String] (explicit conversion) or [Array] for index lookup.
|
144
|
-
|
145
|
-
|
197
|
+
# dot_home is a [Boolean] that will dot the target dir if it is the home
|
198
|
+
# dir only.
|
199
|
+
def target_file(file, dot_home = true)
|
200
|
+
output = "#{target_dir}/"
|
201
|
+
output += "." if dot_home && target_dir == Dir.home
|
202
|
+
output += file_string(file)
|
203
|
+
return output
|
146
204
|
end
|
147
205
|
|
148
206
|
# Return an [Array] of target files.
|
@@ -161,7 +219,6 @@ module Dotfu
|
|
161
219
|
files.map {|f| working_file f}
|
162
220
|
end
|
163
221
|
|
164
|
-
|
165
222
|
private
|
166
223
|
# So our input is now username@repo:branch
|
167
224
|
# Repo is the only one required.
|
@@ -181,7 +238,7 @@ module Dotfu
|
|
181
238
|
return nil unless config_file?
|
182
239
|
|
183
240
|
content = Yajl.load open("#{working_dir}/#{config_file}")
|
184
|
-
@target_dir = content["target_directory"] if content["target_directory"]
|
241
|
+
@target_dir = content["target_directory"].chomp("/") if content["target_directory"]
|
185
242
|
end
|
186
243
|
|
187
244
|
# Accepts a string or fixnum. Returns either the string or the files[fixnum]
|
@@ -191,3 +248,4 @@ module Dotfu
|
|
191
248
|
end
|
192
249
|
end
|
193
250
|
end
|
251
|
+
|
data/lib/dotfu/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dotfu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ernie Brodeur
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-06-
|
11
|
+
date: 2013-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bini
|
@@ -132,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
132
|
version: '0'
|
133
133
|
requirements: []
|
134
134
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.0.
|
135
|
+
rubygems_version: 2.0.2
|
136
136
|
signing_key:
|
137
137
|
specification_version: 4
|
138
138
|
summary: More to come . . .
|