7 Commits

Author SHA1 Message Date
Joshua Nichols
34ef4a4659 Regenerated gemspec for version 0.3.0 2010-04-01 00:15:54 -04:00
Joshua Nichols
4ccbd927fa Bumped to 0.3.0 2010-04-01 00:15:14 -04:00
Joshua Nichols
595c53370e Converted README to markdown. 2010-04-01 00:13:06 -04:00
Joshua Nichols
43facf1ec0 Renamed 'link' command to 'symlink' 2010-03-31 23:59:05 -04:00
Joshua Nichols
46b2cbfa3f Renamed symlink action to ln_s. 2010-03-31 23:57:18 -04:00
Joshua Nichols
cde7989e85 Fix conflict resolution when destination is a plain file (not a symlink). 2010-03-31 23:18:38 -04:00
Joshua Nichols
5db3048e71 Fix header in changelog 2010-03-19 00:35:10 -04:00
7 changed files with 31 additions and 17 deletions

View File

@@ -1,3 +1,8 @@
# 3.0.0
* Renamed 'link' to 'symlink'
* Fixed conflict resolution when symlink destination exists and is a normal file
# 2.0.0 # 2.0.0
* Better support for recognizing git urls (thanks jacobat!) * Better support for recognizing git urls (thanks jacobat!)
@@ -12,6 +17,6 @@
* Fixed linking, which tries to exclude . and .. from the list of files to * Fixed linking, which tries to exclude . and .. from the list of files to
link (thanks Martinos!) link (thanks Martinos!)
# 0.1.0 # 0.1.0
* Initial release * Initial release

View File

@@ -1,14 +1,13 @@
= homesick # homesick
A man's home (directory) is his castle, so don't leave home with out it. A man's home (directory) is his castle, so don't leave home with out it.
Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing dotfiles, and saves them in ~/.homesick. It then allows you to symlink all the dotfiles into place with a single command. Homesick is sorta like rip, but for dotfiles. It uses git to clone a repository containing dotfiles, and saves them in `~/.homesick`. It then allows you to symlink all the dotfiles into place with a single command.
We call a repository that is compatible with homesick to be a 'castle'. To act as a castle, a repository must be organized like so: We call a repository that is compatible with homesick to be a 'castle'. To act as a castle, a repository must be organized like so:
* Contains a 'home' directory * Contains a 'home' directory
* 'home' contains any number of files and directories that begin with '.' * 'home' contains any number of files and directories that begin with '.'
* Optionally has a README file
To get started, install homesick first: To get started, install homesick first:
@@ -24,13 +23,17 @@ Alternatively, if it's on github, there's a slightly shorter way:
With the castle cloned, you can now link its contents into your home dir: With the castle cloned, you can now link its contents into your home dir:
homesick link pickled-vim homesick symlink pickled-vim
If you're not sure what castles you have around, you can easily list them: If you're not sure what castles you have around, you can easily list them:
homesick list homesick list
== Note on Patches/Pull Requests Not sure what else homesick has up its sleeve? There's always the built in help:
homesick help
## Note on Patches/Pull Requests
* Fork the project. * Fork the project.
* Make your feature addition or bug fix. * Make your feature addition or bug fix.
@@ -38,6 +41,6 @@ If you're not sure what castles you have around, you can easily list them:
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull) * Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
* Send me a pull request. Bonus points for topic branches. * Send me a pull request. Bonus points for topic branches.
== Copyright ## Copyright
Copyright (c) 2010 Joshua Nichols. See LICENSE for details. Copyright (c) 2010 Joshua Nichols. See LICENSE for details.

View File

@@ -22,7 +22,7 @@ Jeweler::Tasks.new do |gem|
gem.email = "josh@technicalpickles.com" gem.email = "josh@technicalpickles.com"
gem.homepage = "http://github.com/technicalpickles/homesick" gem.homepage = "http://github.com/technicalpickles/homesick"
gem.authors = ["Joshua Nichols"] gem.authors = ["Joshua Nichols"]
gem.version = "0.2.0" gem.version = "0.3.0"
# Have dependencies? Add them to Gemfile # Have dependencies? Add them to Gemfile
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings

View File

@@ -2,7 +2,7 @@
require 'pathname' require 'pathname'
lib = Pathname.new(__FILE__).dirname.join('..', 'lib').expand_path lib = Pathname.new(__FILE__).dirname.join('..', 'lib').expand_path
$LOAD_PATH.unshift.unshift lib.to_s unless $LOAD_PATH.include?(lib.to_s) $LOAD_PATH.unshift lib.to_s
require 'homesick' require 'homesick'

View File

@@ -5,11 +5,11 @@
Gem::Specification.new do |s| Gem::Specification.new do |s|
s.name = %q{homesick} s.name = %q{homesick}
s.version = "0.2.0" s.version = "0.3.0"
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
s.authors = ["Joshua Nichols"] s.authors = ["Joshua Nichols"]
s.date = %q{2010-03-19} s.date = %q{2010-04-01}
s.default_executable = %q{homesick} s.default_executable = %q{homesick}
s.description = %q{ s.description = %q{
A mans home (directory) is his castle, so dont leave home with out it. A mans home (directory) is his castle, so dont leave home with out it.
@@ -22,7 +22,7 @@ Gem::Specification.new do |s|
s.extra_rdoc_files = [ s.extra_rdoc_files = [
"ChangeLog.markdown", "ChangeLog.markdown",
"LICENSE", "LICENSE",
"README.rdoc" "README.markdown"
] ]
s.files = [ s.files = [
".document", ".document",
@@ -30,7 +30,7 @@ Gem::Specification.new do |s|
"ChangeLog.markdown", "ChangeLog.markdown",
"Gemfile", "Gemfile",
"LICENSE", "LICENSE",
"README.rdoc", "README.markdown",
"Rakefile", "Rakefile",
"bin/homesick", "bin/homesick",
"homesick.gemspec", "homesick.gemspec",

View File

@@ -28,8 +28,8 @@ class Homesick < Thor
end end
end end
desc "link NAME", "Symlinks all dotfiles from the specified castle" desc "symlink NAME", "Symlinks all dotfiles from the specified castle"
def link(home) def symlink(home)
unless castle_dir(home).exist? unless castle_dir(home).exist?
say_status :error, "Castle #{home} did not exist in #{repos_dir}", :red say_status :error, "Castle #{home} did not exist in #{repos_dir}", :red
@@ -44,7 +44,7 @@ class Homesick < Thor
inside user_dir do inside user_dir do
adjusted_path = (user_dir + path).basename adjusted_path = (user_dir + path).basename
symlink absolute_path, adjusted_path ln_s absolute_path, adjusted_path
end end
end end
end end

View File

@@ -18,7 +18,7 @@ class Homesick
end end
end end
def symlink(source, destination, config = {}) def ln_s(source, destination, config = {})
destination = Pathname.new(destination) destination = Pathname.new(destination)
if destination.symlink? if destination.symlink?
@@ -31,6 +31,12 @@ class Homesick
system "ln -sf #{source} #{destination}" unless options[:pretend] system "ln -sf #{source} #{destination}" unless options[:pretend]
end end
end end
elsif destination.exist?
say_status :conflict, "#{destination} exists", :red unless options[:quiet]
if shell.file_collision(destination) { source }
system "ln -sf #{source} #{destination}" unless options[:pretend]
end
else else
say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet] say_status :symlink, "#{source.expand_path} to #{destination.expand_path}", :green unless options[:quiet]
system "ln -s #{source} #{destination}" unless options[:pretend] system "ln -s #{source} #{destination}" unless options[:pretend]