lace 0.2.3 → 0.3.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 +8 -8
- data/bin/lace +1 -0
- data/lib/cmd/fetch.rb +9 -1
- data/lib/cmd/help.rb +3 -3
- data/lib/cmd/list.rb +1 -1
- data/lib/cmd/setup.rb +9 -0
- data/lib/cmd/validate.rb +6 -6
- data/lib/extend/ARGV.rb +4 -0
- data/lib/extend/pathname.rb +2 -125
- data/lib/lace/exceptions.rb +1 -1
- data/lib/lace/package.rb +16 -22
- data/lib/lace/version.rb +1 -1
- metadata +3 -3
- data/lib/cmd/install.rb +0 -10
    
        checksums.yaml
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            !binary "U0hBMQ==":
         | 
| 3 3 | 
             
              metadata.gz: !binary |-
         | 
| 4 | 
            -
                 | 
| 4 | 
            +
                YTE1YjU3OTUwMmFjYzNkOTYwZWFjODA1ZjUyZDU5NWY3YzYwMDA2ZQ==
         | 
| 5 5 | 
             
              data.tar.gz: !binary |-
         | 
| 6 | 
            -
                 | 
| 6 | 
            +
                OGYxN2E5M2ZhY2VjZDQzMWJmY2I3MWFmYWM1YzRiMDA0ODRmOGRmNg==
         | 
| 7 7 | 
             
            SHA512:
         | 
| 8 8 | 
             
              metadata.gz: !binary |-
         | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
                 | 
| 9 | 
            +
                MjEzNDY5ZmQxNzE5ODJlMmNiZjM2YmRkZjkxOWY1MWY5MzE1YmRmYzZlZDIx
         | 
| 10 | 
            +
                ODRiY2EwMjYwMDEzYjJiZDEzM2JlZTVlMjllNjNhODlmZWJiNTZiZmZlNzYy
         | 
| 11 | 
            +
                ZDc0MjVjYmZhMTNjNGM4ODYwMTMxNWJiMGZiNzhkMTUxNzI1N2M=
         | 
| 12 12 | 
             
              data.tar.gz: !binary |-
         | 
| 13 | 
            -
                 | 
| 14 | 
            -
                 | 
| 15 | 
            -
                 | 
| 13 | 
            +
                Y2RkNzExZWJiNzQ2NjJmNzNmNTg5NjZmZjA1OTlhM2Y2MWU3ZjE4NjJiYWU5
         | 
| 14 | 
            +
                NWUwOTJhMzYxYWRjMTIxODg4ZTUyN2I3MWE2MjY5YWRlNzZlOWUzN2QwNWI0
         | 
| 15 | 
            +
                NWQyM2QwNWZkZTgzYTcyZjE3NmQwNDJhOWU4M2U5NGRmNjM1ZTY=
         | 
    
        data/bin/lace
    CHANGED
    
    
    
        data/lib/cmd/fetch.rb
    CHANGED
    
    | @@ -5,6 +5,14 @@ module Lace extend self | |
| 5 5 | 
             
            	def fetch
         | 
| 6 6 | 
             
            		resource = ARGV.shift
         | 
| 7 7 | 
             
            		raise ResourceNotSpecified if not resource
         | 
| 8 | 
            -
            		PackageUtils.fetch resource
         | 
| 8 | 
            +
            		package_name, target_folder = PackageUtils.fetch resource
         | 
| 9 | 
            +
                begin
         | 
| 10 | 
            +
                    Package.new package_name, false
         | 
| 11 | 
            +
                rescue PackageFactsNotFound => e
         | 
| 12 | 
            +
                    onoe e.message
         | 
| 13 | 
            +
                    onoe "Removing fetched files"
         | 
| 14 | 
            +
                    FileUtils.rm_rf target_folder
         | 
| 15 | 
            +
                    Lace.failed = true
         | 
| 16 | 
            +
                end
         | 
| 9 17 | 
             
            	end
         | 
| 10 18 | 
             
            end
         | 
    
        data/lib/cmd/help.rb
    CHANGED
    
    | @@ -1,15 +1,15 @@ | |
| 1 1 | 
             
            HELP = <<-EOS
         | 
| 2 2 | 
             
            Example usage:
         | 
| 3 3 | 
             
              Synopsis:
         | 
| 4 | 
            -
                lace <cmd> <pkg-uri/name> [<flavor>] [--name=<name>] [--version] [--no-hooks]
         | 
| 4 | 
            +
                lace <cmd> <pkg-uri/name> [<flavor>] [--name=<name>] [--version] [--no-hooks] [--force]
         | 
| 5 5 |  | 
| 6 6 | 
             
              lace ls
         | 
| 7 7 |  | 
| 8 8 | 
             
              lace fetch <pkg-uri>
         | 
| 9 9 | 
             
              lace fetch <pkg-uri>
         | 
| 10 10 |  | 
| 11 | 
            -
              lace  | 
| 12 | 
            -
              lace  | 
| 11 | 
            +
              lace setup <pkg-uri>
         | 
| 12 | 
            +
              lace setup <pkg-uri> <flavor>
         | 
| 13 13 |  | 
| 14 14 | 
             
              lace activate <pkg-name>
         | 
| 15 15 | 
             
              lace activate <pkg-name> <flavor>
         | 
    
        data/lib/cmd/list.rb
    CHANGED
    
    | @@ -26,7 +26,7 @@ module Lace extend self | |
| 26 26 | 
             
                if installed_packages.length > 0
         | 
| 27 27 | 
             
                  installed_packages.map do |d|
         | 
| 28 28 | 
             
                    package = Package.new d, false
         | 
| 29 | 
            -
                    puts " | 
| 29 | 
            +
                    puts "[#{Tty.green}#{package.is_active? ? "*" : " "}#{Tty.reset}] #{d}"
         | 
| 30 30 | 
             
                  end
         | 
| 31 31 | 
             
                else
         | 
| 32 32 | 
             
                  puts "There are no pkgs installed"
         | 
    
        data/lib/cmd/setup.rb
    ADDED
    
    
    
        data/lib/cmd/validate.rb
    CHANGED
    
    | @@ -40,7 +40,7 @@ class PackageValidator | |
| 40 40 | 
             
              validate 'config-files', :config_files_present
         | 
| 41 41 | 
             
              validate 'version', :version_present
         | 
| 42 42 | 
             
              validate 'homepage', :homepage_present
         | 
| 43 | 
            -
              validate ' | 
| 43 | 
            +
              validate 'setup', :setup_ok
         | 
| 44 44 | 
             
              validate 'post-update hook', :post_update_hooks_ok
         | 
| 45 45 |  | 
| 46 46 | 
             
              def initialize facts, flavor=nil
         | 
| @@ -64,8 +64,8 @@ class PackageValidator | |
| 64 64 | 
             
                end.compact
         | 
| 65 65 | 
             
              end
         | 
| 66 66 |  | 
| 67 | 
            -
              def hook_ok  | 
| 68 | 
            -
                hook_cmd =  | 
| 67 | 
            +
              def hook_ok config_files
         | 
| 68 | 
            +
                hook_cmd = config_files
         | 
| 69 69 | 
             
                if hook_cmd.empty?
         | 
| 70 70 | 
             
                  ["#{Tty.green}skipped#{Tty.reset}", nil]
         | 
| 71 71 | 
             
                else
         | 
| @@ -78,12 +78,12 @@ class PackageValidator | |
| 78 78 | 
             
                end
         | 
| 79 79 | 
             
              end
         | 
| 80 80 |  | 
| 81 | 
            -
              def  | 
| 82 | 
            -
                hook_ok  | 
| 81 | 
            +
              def setup_ok
         | 
| 82 | 
            +
                hook_ok @facts.setup_files
         | 
| 83 83 | 
             
              end
         | 
| 84 84 |  | 
| 85 85 | 
             
              def post_update_hooks_ok
         | 
| 86 | 
            -
                hook_ok :update
         | 
| 86 | 
            +
                hook_ok @facts.post :update
         | 
| 87 87 | 
             
              end
         | 
| 88 88 |  | 
| 89 89 | 
             
              def homepage_present
         | 
    
        data/lib/extend/ARGV.rb
    CHANGED
    
    
    
        data/lib/extend/pathname.rb
    CHANGED
    
    | @@ -12,16 +12,6 @@ class Pathname | |
| 12 12 | 
             
                return dst
         | 
| 13 13 | 
             
              end
         | 
| 14 14 |  | 
| 15 | 
            -
              # extended to support common double extensions
         | 
| 16 | 
            -
              alias extname_old extname
         | 
| 17 | 
            -
              def extname(path=to_s)
         | 
| 18 | 
            -
                BOTTLE_EXTNAME_RX.match(path)
         | 
| 19 | 
            -
                return $1 if $1
         | 
| 20 | 
            -
                /(\.(tar|cpio|pax)\.(gz|bz2|xz|Z))$/.match(path)
         | 
| 21 | 
            -
                return $1 if $1
         | 
| 22 | 
            -
                return File.extname(path)
         | 
| 23 | 
            -
              end
         | 
| 24 | 
            -
             | 
| 25 15 | 
             
              # for filetypes we support, basename without extension
         | 
| 26 16 | 
             
              def stem
         | 
| 27 17 | 
             
                File.basename((path = to_s), extname(path))
         | 
| @@ -49,68 +39,6 @@ class Pathname | |
| 49 39 | 
             
                FileUtils.chmod_R perms, to_s
         | 
| 50 40 | 
             
              end
         | 
| 51 41 |  | 
| 52 | 
            -
              def abv
         | 
| 53 | 
            -
                out=''
         | 
| 54 | 
            -
                n=`find #{to_s} -type f ! -name .DS_Store | wc -l`.to_i
         | 
| 55 | 
            -
                out<<"#{n} files, " if n > 1
         | 
| 56 | 
            -
                out<<`/usr/bin/du -hs #{to_s} | cut -d"\t" -f1`.strip
         | 
| 57 | 
            -
              end
         | 
| 58 | 
            -
             | 
| 59 | 
            -
              def compression_type
         | 
| 60 | 
            -
                # Don't treat jars or wars as compressed
         | 
| 61 | 
            -
                return nil if self.extname == '.jar'
         | 
| 62 | 
            -
                return nil if self.extname == '.war'
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                # OS X installer package
         | 
| 65 | 
            -
                return :pkg if self.extname == '.pkg'
         | 
| 66 | 
            -
             | 
| 67 | 
            -
                # If the filename ends with .gz not preceded by .tar
         | 
| 68 | 
            -
                # then we want to gunzip but not tar
         | 
| 69 | 
            -
                return :gzip_only if self.extname == '.gz'
         | 
| 70 | 
            -
             | 
| 71 | 
            -
                # Get enough of the file to detect common file types
         | 
| 72 | 
            -
                # POSIX tar magic has a 257 byte offset
         | 
| 73 | 
            -
                # magic numbers stolen from /usr/share/file/magic/
         | 
| 74 | 
            -
                case open('rb') { |f| f.read(262) }
         | 
| 75 | 
            -
                when /^PK\003\004/n         then :zip
         | 
| 76 | 
            -
                when /^\037\213/n           then :gzip
         | 
| 77 | 
            -
                when /^BZh/n                then :bzip2
         | 
| 78 | 
            -
                when /^\037\235/n           then :compress
         | 
| 79 | 
            -
                when /^.{257}ustar/n        then :tar
         | 
| 80 | 
            -
                when /^\xFD7zXZ\x00/n       then :xz
         | 
| 81 | 
            -
                when /^Rar!/n               then :rar
         | 
| 82 | 
            -
                when /^7z\xBC\xAF\x27\x1C/n then :p7zip
         | 
| 83 | 
            -
                else
         | 
| 84 | 
            -
                  # This code so that bad-tarballs and zips produce good error messages
         | 
| 85 | 
            -
                  # when they don't unarchive properly.
         | 
| 86 | 
            -
                  case extname
         | 
| 87 | 
            -
                  when ".tar.gz", ".tgz", ".tar.bz2", ".tbz" then :tar
         | 
| 88 | 
            -
                  when ".zip" then :zip
         | 
| 89 | 
            -
                  end
         | 
| 90 | 
            -
                end
         | 
| 91 | 
            -
              end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
              def text_executable?
         | 
| 94 | 
            -
                %r[^#!\s*\S+] === open('r') { |f| f.read(1024) }
         | 
| 95 | 
            -
              end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
              def incremental_hash(hasher)
         | 
| 98 | 
            -
                incr_hash = hasher.new
         | 
| 99 | 
            -
                buf = ""
         | 
| 100 | 
            -
                open('rb') { |f| incr_hash << buf while f.read(1024, buf) }
         | 
| 101 | 
            -
                incr_hash.hexdigest
         | 
| 102 | 
            -
              end
         | 
| 103 | 
            -
             | 
| 104 | 
            -
              def sha1
         | 
| 105 | 
            -
                require 'digest/sha1'
         | 
| 106 | 
            -
                incremental_hash(Digest::SHA1)
         | 
| 107 | 
            -
              end
         | 
| 108 | 
            -
             | 
| 109 | 
            -
              def sha256
         | 
| 110 | 
            -
                require 'digest/sha2'
         | 
| 111 | 
            -
                incremental_hash(Digest::SHA2)
         | 
| 112 | 
            -
              end
         | 
| 113 | 
            -
             | 
| 114 42 | 
             
              if '1.9' <= RUBY_VERSION
         | 
| 115 43 | 
             
                alias_method :to_str, :to_s
         | 
| 116 44 | 
             
              end
         | 
| @@ -140,59 +68,8 @@ class Pathname | |
| 140 68 | 
             
                join that.to_s
         | 
| 141 69 | 
             
              end
         | 
| 142 70 |  | 
| 143 | 
            -
              def  | 
| 144 | 
            -
                 | 
| 145 | 
            -
                unless writable_real?
         | 
| 146 | 
            -
                  saved_perms = stat.mode
         | 
| 147 | 
            -
                  chmod 0644
         | 
| 148 | 
            -
                end
         | 
| 149 | 
            -
                yield
         | 
| 150 | 
            -
              ensure
         | 
| 151 | 
            -
                chmod saved_perms if saved_perms
         | 
| 152 | 
            -
              end
         | 
| 153 | 
            -
             | 
| 154 | 
            -
              # Writes an exec script in this folder for each target pathname
         | 
| 155 | 
            -
              def write_exec_script *targets
         | 
| 156 | 
            -
                targets.flatten!
         | 
| 157 | 
            -
                if targets.empty?
         | 
| 158 | 
            -
                  opoo "tried to write exec scripts to #{self} for an empty list of targets"
         | 
| 159 | 
            -
                end
         | 
| 160 | 
            -
                targets.each do |target|
         | 
| 161 | 
            -
                  target = Pathname.new(target) # allow pathnames or strings
         | 
| 162 | 
            -
                  (self+target.basename()).write <<-EOS.undent
         | 
| 163 | 
            -
                  #!/bin/bash
         | 
| 164 | 
            -
                  exec "#{target}" "$@"
         | 
| 165 | 
            -
                  EOS
         | 
| 166 | 
            -
                end
         | 
| 71 | 
            +
              def as_dotfile base_folder
         | 
| 72 | 
            +
                Pathname.new File.join(base_folder, ".#{basename}")
         | 
| 167 73 | 
             
              end
         | 
| 168 74 |  | 
| 169 | 
            -
              # We redefine these private methods in order to add the /o modifier to
         | 
| 170 | 
            -
              # the Regexp literals, which forces string interpolation to happen only
         | 
| 171 | 
            -
              # once instead of each time the method is called. This is fixed in 1.9+.
         | 
| 172 | 
            -
              if RUBY_VERSION <= "1.8.7"
         | 
| 173 | 
            -
                alias_method :old_chop_basename, :chop_basename
         | 
| 174 | 
            -
                def chop_basename(path)
         | 
| 175 | 
            -
                  base = File.basename(path)
         | 
| 176 | 
            -
                  if /\A#{Pathname::SEPARATOR_PAT}?\z/o =~ base
         | 
| 177 | 
            -
                    return nil
         | 
| 178 | 
            -
                  else
         | 
| 179 | 
            -
                    return path[0, path.rindex(base)], base
         | 
| 180 | 
            -
                  end
         | 
| 181 | 
            -
                end
         | 
| 182 | 
            -
                private :chop_basename
         | 
| 183 | 
            -
             | 
| 184 | 
            -
                alias_method :old_prepend_prefix, :prepend_prefix
         | 
| 185 | 
            -
                def prepend_prefix(prefix, relpath)
         | 
| 186 | 
            -
                  if relpath.empty?
         | 
| 187 | 
            -
                    File.dirname(prefix)
         | 
| 188 | 
            -
                  elsif /#{SEPARATOR_PAT}/o =~ prefix
         | 
| 189 | 
            -
                    prefix = File.dirname(prefix)
         | 
| 190 | 
            -
                    prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a'
         | 
| 191 | 
            -
                    prefix + relpath
         | 
| 192 | 
            -
                  else
         | 
| 193 | 
            -
                    prefix + relpath
         | 
| 194 | 
            -
                  end
         | 
| 195 | 
            -
                end
         | 
| 196 | 
            -
                private :prepend_prefix
         | 
| 197 | 
            -
              end
         | 
| 198 75 | 
             
            end
         | 
    
        data/lib/lace/exceptions.rb
    CHANGED
    
    
    
        data/lib/lace/package.rb
    CHANGED
    
    | @@ -16,14 +16,8 @@ class PackageUtils | |
| 16 16 | 
             
                downloader = DownloadStrategyDetector.detect(uri).new(uri)
         | 
| 17 17 | 
             
                raise PackageAlreadyInstalled.new if downloader.target_folder.exist?
         | 
| 18 18 | 
             
                downloader.fetch
         | 
| 19 | 
            -
                 | 
| 20 | 
            -
             | 
| 21 | 
            -
                rescue PackageFactsNotFound => e
         | 
| 22 | 
            -
                  onoe e.message
         | 
| 23 | 
            -
                  onoe "Removing fetched files"
         | 
| 24 | 
            -
                  FileUtils.rm_rf downloader.target_folder
         | 
| 25 | 
            -
                end
         | 
| 26 | 
            -
              end
         | 
| 19 | 
            +
                return downloader.name, downloader.target_folder
         | 
| 20 | 
            +
             end
         | 
| 27 21 |  | 
| 28 22 | 
             
              def self.remove package_name
         | 
| 29 23 | 
             
                package = Package.new package_name, false
         | 
| @@ -32,13 +26,11 @@ class PackageUtils | |
| 32 26 | 
             
                FileUtils.rm_rf package.path
         | 
| 33 27 | 
             
              end
         | 
| 34 28 |  | 
| 35 | 
            -
              def self. | 
| 36 | 
            -
                downloader = DownloadStrategyDetector.detect(uri).new(uri)
         | 
| 37 | 
            -
                self.fetch uri
         | 
| 29 | 
            +
              def self.setup package_name
         | 
| 38 30 | 
             
                begin
         | 
| 39 | 
            -
                  package = Package.new  | 
| 31 | 
            +
                  package = Package.new package_name, ARGV.first
         | 
| 40 32 | 
             
                  package.activate!
         | 
| 41 | 
            -
                  package. | 
| 33 | 
            +
                  package.setup
         | 
| 42 34 | 
             
                rescue FlavorError => e
         | 
| 43 35 | 
             
                  onoe e.message
         | 
| 44 36 | 
             
                  onoe "Package remains installed but was not activated"
         | 
| @@ -47,7 +39,7 @@ class PackageUtils | |
| 47 39 |  | 
| 48 40 | 
             
              def self.deactivate package_name
         | 
| 49 41 | 
             
                package = Package.new package_name, ARGV.first
         | 
| 50 | 
            -
                raise NonActiveFlavorError.new unless package.is_active?
         | 
| 42 | 
            +
                raise NonActiveFlavorError.new unless package.is_active? || ARGV.force?
         | 
| 51 43 | 
             
                ohai "Deactivating"
         | 
| 52 44 | 
             
                package.deactivate!
         | 
| 53 45 | 
             
              end
         | 
| @@ -104,6 +96,10 @@ class Facts | |
| 104 96 | 
             
                @_facts["version"] if @_facts.key? "version"
         | 
| 105 97 | 
             
              end
         | 
| 106 98 |  | 
| 99 | 
            +
              def setup_files
         | 
| 100 | 
            +
                @facts["setup"].flatten rescue []
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
             | 
| 107 103 | 
             
              def homepage
         | 
| 108 104 | 
             
                @_facts["homepage"] if @_facts.key? "homepage"
         | 
| 109 105 | 
             
              end
         | 
| @@ -149,11 +145,10 @@ class Package | |
| 149 145 | 
             
              include GitCommands
         | 
| 150 146 | 
             
              attr_reader :name, :facts, :path
         | 
| 151 147 |  | 
| 152 | 
            -
              def  | 
| 148 | 
            +
              def setup
         | 
| 153 149 | 
             
                return if ARGV.nohooks?
         | 
| 154 150 | 
             
                 @path.cd do
         | 
| 155 | 
            -
                    | 
| 156 | 
            -
                   facts.post(:install).each do |cmd|
         | 
| 151 | 
            +
                   facts.setup_files.each do |cmd|
         | 
| 157 152 | 
             
                     safe_system cmd
         | 
| 158 153 | 
             
                   end
         | 
| 159 154 | 
             
                 end
         | 
| @@ -162,7 +157,6 @@ class Package | |
| 162 157 | 
             
              def after_update
         | 
| 163 158 | 
             
                return if ARGV.nohooks?
         | 
| 164 159 | 
             
                @path.cd do
         | 
| 165 | 
            -
                  ENV["CURRENT_DOTTY"] = @path
         | 
| 166 160 | 
             
                  facts.post(:update).each do |cmd|
         | 
| 167 161 | 
             
                    system cmd
         | 
| 168 162 | 
             
                  end
         | 
| @@ -207,8 +201,9 @@ class Package | |
| 207 201 | 
             
                files = @facts.config_files
         | 
| 208 202 | 
             
                home_dir = ENV["HOME"]
         | 
| 209 203 | 
             
                files.each do |file|
         | 
| 210 | 
            -
                   | 
| 211 | 
            -
                   | 
| 204 | 
            +
                  file = Pathname.new(file)
         | 
| 205 | 
            +
                  dotfile = file.as_dotfile(home_dir)
         | 
| 206 | 
            +
                  FileUtils.rm_f dotfile if dotfile.exist? && dotfile.readlink == file
         | 
| 212 207 | 
             
                end
         | 
| 213 208 | 
             
              end
         | 
| 214 209 |  | 
| @@ -217,8 +212,7 @@ class Package | |
| 217 212 | 
             
                home_dir = ENV["HOME"]
         | 
| 218 213 | 
             
                files.each do |file|
         | 
| 219 214 | 
             
                  # if ends in erb -> generate it
         | 
| 220 | 
            -
                   | 
| 221 | 
            -
                  FileUtils.ln_s file, File.join(home_dir, "." + pn.basename)
         | 
| 215 | 
            +
                  FileUtils.ln_s file, Pathname.new(file).as_dotfile(home_dir), force: ARGV.force?
         | 
| 222 216 | 
             
                end
         | 
| 223 217 | 
             
              end
         | 
| 224 218 | 
             
            end
         | 
    
        data/lib/lace/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: lace
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.3.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Kai Richard Koenig
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014-01- | 
| 11 | 
            +
            date: 2014-01-12 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: This is a simple/unfinished tool which i use to manage my dotfiles on
         | 
| 14 14 | 
             
              all the different machines
         | 
| @@ -24,9 +24,9 @@ files: | |
| 24 24 | 
             
            - lib/cmd/fetch.rb
         | 
| 25 25 | 
             
            - lib/cmd/help.rb
         | 
| 26 26 | 
             
            - lib/cmd/inspect.rb
         | 
| 27 | 
            -
            - lib/cmd/install.rb
         | 
| 28 27 | 
             
            - lib/cmd/list.rb
         | 
| 29 28 | 
             
            - lib/cmd/remove.rb
         | 
| 29 | 
            +
            - lib/cmd/setup.rb
         | 
| 30 30 | 
             
            - lib/cmd/update.rb
         | 
| 31 31 | 
             
            - lib/cmd/validate.rb
         | 
| 32 32 | 
             
            - lib/extend/ARGV.rb
         |