filedots 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.
- data/.gitignore +3 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +17 -0
- data/Rakefile +2 -0
- data/bin/filedots +5 -0
- data/filedots.gemspec +23 -0
- data/lib/filedots.rb +3 -0
- data/lib/filedots/config.rb +23 -0
- data/lib/filedots/runner.rb +61 -0
- data/lib/filedots/version.rb +3 -0
- metadata +92 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/Rakefile
ADDED
data/bin/filedots
ADDED
data/filedots.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "filedots/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "filedots"
|
7
|
+
s.version = Filedots::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["miaout17"]
|
10
|
+
s.email = ["miaout17@gmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{A simple dotfiles installation tool}
|
13
|
+
s.description = %q{A simple dotfiles installation tool}
|
14
|
+
|
15
|
+
s.rubyforge_project = "filedots"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "thor", ">= 0.14.6"
|
23
|
+
end
|
data/lib/filedots.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Filedots
|
2
|
+
class Config
|
3
|
+
|
4
|
+
attr_accessor :links
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
@links = []
|
8
|
+
end
|
9
|
+
|
10
|
+
def link(source, target=nil)
|
11
|
+
if source.is_a?(Array)
|
12
|
+
source.each { |s| link(s) }
|
13
|
+
return
|
14
|
+
end
|
15
|
+
|
16
|
+
target ||= File.expand_path("~/.#{source}")
|
17
|
+
source = File.expand_path("#{Dir.pwd}/#{source}")
|
18
|
+
|
19
|
+
@links << [source, target]
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module Filedots
|
4
|
+
class Runner < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
desc 'install', 'Install dotfiles'
|
8
|
+
def install
|
9
|
+
return unless load_config
|
10
|
+
@config.links.each do |source, target|
|
11
|
+
link(source, target)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
desc 'uninstall', 'Uninstall dotfiles'
|
16
|
+
def uninstall
|
17
|
+
return unless load_config
|
18
|
+
@config.links.each do |source, target|
|
19
|
+
unlink(target)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
no_tasks do
|
24
|
+
def load_config
|
25
|
+
@config = Config.new
|
26
|
+
@config.instance_eval(File.read('.filedots'))
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
def link(source, target)
|
31
|
+
if File.exists?(target)
|
32
|
+
# TODO: This is not accuracy.
|
33
|
+
# Check the link, make some test cases....when I have more free time :)
|
34
|
+
if File.identical?(source, target)
|
35
|
+
say_status :identical, target
|
36
|
+
else
|
37
|
+
link!(source, target) if yes?("Overwrite #{target}?", :red)
|
38
|
+
end
|
39
|
+
else
|
40
|
+
link!(source, target)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def link!(source, target)
|
45
|
+
File.unlink(target) if File.exists?(target)
|
46
|
+
File.symlink(source, target)
|
47
|
+
say_status :symlink, "#{source} #{target}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def unlink(target)
|
51
|
+
# TODO: Alert if it's not symlink?
|
52
|
+
if File.exists?(target)
|
53
|
+
File.unlink(target)
|
54
|
+
say_status :unlink, target
|
55
|
+
else
|
56
|
+
say_status :nonexist, target
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: filedots
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- miaout17
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-08-14 00:00:00 +08:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: thor
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 43
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
- 14
|
33
|
+
- 6
|
34
|
+
version: 0.14.6
|
35
|
+
type: :runtime
|
36
|
+
version_requirements: *id001
|
37
|
+
description: A simple dotfiles installation tool
|
38
|
+
email:
|
39
|
+
- miaout17@gmail.com
|
40
|
+
executables:
|
41
|
+
- filedots
|
42
|
+
extensions: []
|
43
|
+
|
44
|
+
extra_rdoc_files: []
|
45
|
+
|
46
|
+
files:
|
47
|
+
- .gitignore
|
48
|
+
- Gemfile
|
49
|
+
- Gemfile.lock
|
50
|
+
- Rakefile
|
51
|
+
- bin/filedots
|
52
|
+
- filedots.gemspec
|
53
|
+
- lib/filedots.rb
|
54
|
+
- lib/filedots/config.rb
|
55
|
+
- lib/filedots/runner.rb
|
56
|
+
- lib/filedots/version.rb
|
57
|
+
has_rdoc: true
|
58
|
+
homepage: ""
|
59
|
+
licenses: []
|
60
|
+
|
61
|
+
post_install_message:
|
62
|
+
rdoc_options: []
|
63
|
+
|
64
|
+
require_paths:
|
65
|
+
- lib
|
66
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
requirements: []
|
85
|
+
|
86
|
+
rubyforge_project: filedots
|
87
|
+
rubygems_version: 1.3.7
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: A simple dotfiles installation tool
|
91
|
+
test_files: []
|
92
|
+
|