arpm 0.9.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 +7 -0
 - data/.gitignore +23 -0
 - data/Gemfile +4 -0
 - data/LICENSE.txt +22 -0
 - data/README.md +92 -0
 - data/Rakefile +2 -0
 - data/arpm.gemspec +27 -0
 - data/bin/arpm +6 -0
 - data/lib/arpm.rb +14 -0
 - data/lib/arpm/cli.rb +250 -0
 - data/lib/arpm/config.rb +16 -0
 - data/lib/arpm/libfile.rb +33 -0
 - data/lib/arpm/list.rb +106 -0
 - data/lib/arpm/os.rb +17 -0
 - data/lib/arpm/package.rb +120 -0
 - data/lib/arpm/string.rb +24 -0
 - data/lib/arpm/vendor/ruby-git/git.rb +148 -0
 - data/lib/arpm/vendor/ruby-git/git/author.rb +14 -0
 - data/lib/arpm/vendor/ruby-git/git/base.rb +560 -0
 - data/lib/arpm/vendor/ruby-git/git/branch.rb +122 -0
 - data/lib/arpm/vendor/ruby-git/git/branches.rb +71 -0
 - data/lib/arpm/vendor/ruby-git/git/diff.rb +146 -0
 - data/lib/arpm/vendor/ruby-git/git/index.rb +5 -0
 - data/lib/arpm/vendor/ruby-git/git/lib.rb +848 -0
 - data/lib/arpm/vendor/ruby-git/git/log.rb +128 -0
 - data/lib/arpm/vendor/ruby-git/git/object.rb +282 -0
 - data/lib/arpm/vendor/ruby-git/git/path.rb +31 -0
 - data/lib/arpm/vendor/ruby-git/git/remote.rb +36 -0
 - data/lib/arpm/vendor/ruby-git/git/repository.rb +6 -0
 - data/lib/arpm/vendor/ruby-git/git/stash.rb +27 -0
 - data/lib/arpm/vendor/ruby-git/git/stashes.rb +44 -0
 - data/lib/arpm/vendor/ruby-git/git/status.rb +117 -0
 - data/lib/arpm/vendor/ruby-git/git/version.rb +7 -0
 - data/lib/arpm/vendor/ruby-git/git/working_directory.rb +4 -0
 - data/lib/arpm/version.rb +3 -0
 - data/packages.json +8 -0
 - metadata +122 -0
 
    
        data/lib/arpm/config.rb
    ADDED
    
    | 
         @@ -0,0 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ARPM
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Config
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def self.base_directory
         
     | 
| 
      
 5 
     | 
    
         
            +
                  if OS.windows?
         
     | 
| 
      
 6 
     | 
    
         
            +
                    lib_dir = "/My Documents/Arduino/libraries/"
         
     | 
| 
      
 7 
     | 
    
         
            +
                  else OS.mac?
         
     | 
| 
      
 8 
     | 
    
         
            +
                    lib_dir = "/Documents/Arduino/libraries/"
         
     | 
| 
      
 9 
     | 
    
         
            +
                  end
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                  base = File.expand_path("~")
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                  "#{base}#{lib_dir}"
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/arpm/libfile.rb
    ADDED
    
    | 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ARPM
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Libfile
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                attr_accessor :content
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
                def initialize(content)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  @content = content
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                def self.location
         
     | 
| 
      
 11 
     | 
    
         
            +
                  Dir.pwd + "/Libfile"
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                def dependencies
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  packages = []
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  content.gsub!(/\r\n?/, "\n")
         
     | 
| 
      
 19 
     | 
    
         
            +
                  content.each_line do |line|
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    if line.start_with?('lib')
         
     | 
| 
      
 22 
     | 
    
         
            +
                        elements = line.scan(/"([^"]*)"/) + line.scan(/'([^']*)'/)
         
     | 
| 
      
 23 
     | 
    
         
            +
                        packages << {elements[0][0] => elements[1][0]}
         
     | 
| 
      
 24 
     | 
    
         
            +
                    end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  packages
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/arpm/list.rb
    ADDED
    
    | 
         @@ -0,0 +1,106 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ARPM
         
     | 
| 
      
 2 
     | 
    
         
            +
              class List
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                def self.register(package, version)
         
     | 
| 
      
 5 
     | 
    
         
            +
                  # Make sure the list exists
         
     | 
| 
      
 6 
     | 
    
         
            +
                  FileUtils.touch(path) unless File.exists?(path)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                  packages = JSON.parse(File.read(path)) rescue []
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                  # Is any version of this pacakge installed?
         
     | 
| 
      
 11 
     | 
    
         
            +
                  if ARPM::List.includes?(package.name)
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    # Is this version already installed?
         
     | 
| 
      
 14 
     | 
    
         
            +
                    unless ARPM::List.includes?(package.name, version)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                      # No it isn't, so add this version to the list
         
     | 
| 
      
 17 
     | 
    
         
            +
                      packages.select { |p| p.keys[0] == package.name }.first[package.name] << version
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                  else
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                    # It isn't so add the whole package
         
     | 
| 
      
 24 
     | 
    
         
            +
                    packages << {package.name => [version]}
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                  # Write that shit down
         
     | 
| 
      
 29 
     | 
    
         
            +
                  f = File.open(path, 'w')
         
     | 
| 
      
 30 
     | 
    
         
            +
                  f.write(JSON.generate(packages, :quirks_mode => true))
         
     | 
| 
      
 31 
     | 
    
         
            +
                  f.close
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                def self.unregister(package, version)
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                  packages = JSON.parse(File.read(path)) rescue []
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                  # Is any version of this pacakge installed?
         
     | 
| 
      
 40 
     | 
    
         
            +
                  if ARPM::List.includes?(package.name)
         
     | 
| 
      
 41 
     | 
    
         
            +
                    if package.installed_versions.size > 0
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                      # Get the remaining versions
         
     | 
| 
      
 44 
     | 
    
         
            +
                      remaining_versions = packages.select { |p| p.keys[0] == package.name }.first[package.name] - [version]
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                      packages.select { |p| p.keys[0] == package.name }.first[package.name] = remaining_versions
         
     | 
| 
      
 47 
     | 
    
         
            +
                    else
         
     | 
| 
      
 48 
     | 
    
         
            +
                      packages.delete(package.name)
         
     | 
| 
      
 49 
     | 
    
         
            +
                    end
         
     | 
| 
      
 50 
     | 
    
         
            +
                  end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                  # Write that shit down
         
     | 
| 
      
 53 
     | 
    
         
            +
                  f = File.open(path, 'w')
         
     | 
| 
      
 54 
     | 
    
         
            +
                  f.write(JSON.generate(packages, :quirks_mode => true))
         
     | 
| 
      
 55 
     | 
    
         
            +
                  f.close
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                def self.includes?(package_name, version = nil)
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  # Get all the packages
         
     | 
| 
      
 62 
     | 
    
         
            +
                  packages = JSON.parse(File.read(path)) rescue []
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  # Search for the specified package
         
     | 
| 
      
 65 
     | 
    
         
            +
                  list_package = packages.select { |p| p.keys[0] == package_name }
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                  # Was the version specified?
         
     | 
| 
      
 68 
     | 
    
         
            +
                  if version
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
                    # Yes, so only return yes if the specified version is installed
         
     | 
| 
      
 71 
     | 
    
         
            +
                    return list_package.first[package_name].include?(version)
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  else
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    # No, so return yes if any versions of the package are installed
         
     | 
| 
      
 76 
     | 
    
         
            +
                    return list_package.first
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                def self.versions(package_name)
         
     | 
| 
      
 81 
     | 
    
         
            +
                  # Get all the packages
         
     | 
| 
      
 82 
     | 
    
         
            +
                  packages = JSON.parse(File.read(path)) rescue []
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  # Search for the specified package
         
     | 
| 
      
 85 
     | 
    
         
            +
                  list_package = packages.select { |p| p.keys[0] == package_name }.first
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                  # Return an array of the versions
         
     | 
| 
      
 88 
     | 
    
         
            +
                  list_package[package_name]
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                def self.all
         
     | 
| 
      
 93 
     | 
    
         
            +
                  # Get all the packages
         
     | 
| 
      
 94 
     | 
    
         
            +
                  packages = JSON.parse(File.read(path)) rescue []
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                  packages
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                private
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                def self.path
         
     | 
| 
      
 102 
     | 
    
         
            +
                  ARPM::Config.base_directory + "/arpm.txt"
         
     | 
| 
      
 103 
     | 
    
         
            +
                end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              end
         
     | 
| 
      
 106 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/arpm/os.rb
    ADDED
    
    | 
         @@ -0,0 +1,17 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module OS
         
     | 
| 
      
 2 
     | 
    
         
            +
              def OS.windows?
         
     | 
| 
      
 3 
     | 
    
         
            +
                (/cygwin|mswin|mingw|bccwin|wince|emx/ =~ RUBY_PLATFORM) != nil
         
     | 
| 
      
 4 
     | 
    
         
            +
              end
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
              def OS.mac?
         
     | 
| 
      
 7 
     | 
    
         
            +
               (/darwin/ =~ RUBY_PLATFORM) != nil
         
     | 
| 
      
 8 
     | 
    
         
            +
              end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              def OS.unix?
         
     | 
| 
      
 11 
     | 
    
         
            +
                !OS.windows?
         
     | 
| 
      
 12 
     | 
    
         
            +
              end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
              def OS.linux?
         
     | 
| 
      
 15 
     | 
    
         
            +
                OS.unix? and not OS.mac?
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/arpm/package.rb
    ADDED
    
    | 
         @@ -0,0 +1,120 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module ARPM
         
     | 
| 
      
 2 
     | 
    
         
            +
              class Package
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
                attr_accessor :name
         
     | 
| 
      
 5 
     | 
    
         
            +
                attr_accessor :authors
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_accessor :versions
         
     | 
| 
      
 7 
     | 
    
         
            +
                attr_accessor :repository
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                def initialize(opts = {})
         
     | 
| 
      
 10 
     | 
    
         
            +
                  opts.each { |k,v| instance_variable_set("@#{k}", v) }
         
     | 
| 
      
 11 
     | 
    
         
            +
                end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                # Search for a new package
         
     | 
| 
      
 14 
     | 
    
         
            +
                def self.search(name, exact_match = true)
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  # Grab the package list
         
     | 
| 
      
 17 
     | 
    
         
            +
                  data = URI.parse("https://raw.githubusercontent.com/alfo/arpm/master/packages.json").read
         
     | 
| 
      
 18 
     | 
    
         
            +
                  packages = JSON.parse(data)
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                  if exact_match
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                    # Search the packages for one with the same name
         
     | 
| 
      
 23 
     | 
    
         
            +
                    remote_packages = packages.select { |p| p['name'] == name }
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                  else
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                    # Search for packages with similar names and return them
         
     | 
| 
      
 28 
     | 
    
         
            +
                    remote_packages = packages.select { |p| p['name'].include? name }
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                  # Did the search return any results?
         
     | 
| 
      
 33 
     | 
    
         
            +
                  if remote_packages.any?
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    packages = []
         
     | 
| 
      
 36 
     | 
    
         
            +
                    remote_packages.each do |remote_package|
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                      # Get a list of tags from the remote repo
         
     | 
| 
      
 39 
     | 
    
         
            +
                      tags = Git::Lib.new.ls_remote(remote_package["repository"])["tags"]
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                      # Delete any tags that aren't version numbers
         
     | 
| 
      
 42 
     | 
    
         
            +
                      tags.each { |t| tags.delete(t) unless t[0].is_number? }
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                      # Sort the tags newest to oldest
         
     | 
| 
      
 45 
     | 
    
         
            +
                      versions = Hash[tags.sort.reverse]
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                      # Create a new package object and return it
         
     | 
| 
      
 48 
     | 
    
         
            +
                      packages << Package.new(:name => remote_package["name"],
         
     | 
| 
      
 49 
     | 
    
         
            +
                                  :authors => remote_package["authors"],
         
     | 
| 
      
 50 
     | 
    
         
            +
                                  :repository => remote_package["repository"],
         
     | 
| 
      
 51 
     | 
    
         
            +
                                  :versions => versions)
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                    if exact_match
         
     | 
| 
      
 56 
     | 
    
         
            +
                      return packages.first
         
     | 
| 
      
 57 
     | 
    
         
            +
                    else
         
     | 
| 
      
 58 
     | 
    
         
            +
                      return packages
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                  else
         
     | 
| 
      
 62 
     | 
    
         
            +
                    # The package doesn't exist, so return false
         
     | 
| 
      
 63 
     | 
    
         
            +
                    false
         
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                def latest_version
         
     | 
| 
      
 68 
     | 
    
         
            +
                  if versions.kind_of?(Array)
         
     | 
| 
      
 69 
     | 
    
         
            +
                    versions.first
         
     | 
| 
      
 70 
     | 
    
         
            +
                  else
         
     | 
| 
      
 71 
     | 
    
         
            +
                    versions.keys.first.to_s
         
     | 
| 
      
 72 
     | 
    
         
            +
                  end
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                def install_path(version = nil)
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                  # Take the latest_version unless it's been specified
         
     | 
| 
      
 78 
     | 
    
         
            +
                  version = latest_version unless version
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
                  # Creat the install path
         
     | 
| 
      
 81 
     | 
    
         
            +
                  path = ARPM::Config.base_directory + name
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                  # Arduino doesn't like dots or dashes in library names
         
     | 
| 
      
 84 
     | 
    
         
            +
                  path = path + "_#{version.gsub('.', '_')}"
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                def install(version)
         
     | 
| 
      
 89 
     | 
    
         
            +
                  # Clone the repository!
         
     | 
| 
      
 90 
     | 
    
         
            +
                  repo = Git.clone(repository, install_path(version))
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                  # It does, so checkout the right version
         
     | 
| 
      
 93 
     | 
    
         
            +
                  repo.checkout("tags/#{version}")
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                  # Register the package to the list
         
     | 
| 
      
 96 
     | 
    
         
            +
                  register(version)
         
     | 
| 
      
 97 
     | 
    
         
            +
                end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                def uninstall(version)
         
     | 
| 
      
 100 
     | 
    
         
            +
                  # Remove the files
         
     | 
| 
      
 101 
     | 
    
         
            +
                  FileUtils.rm_r(install_path(version)) rescue ""
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                  # Unregister it
         
     | 
| 
      
 104 
     | 
    
         
            +
                  unregister(version)
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
                def register(version)
         
     | 
| 
      
 108 
     | 
    
         
            +
                  ARPM::List.register(self, version)
         
     | 
| 
      
 109 
     | 
    
         
            +
                end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
                def unregister(version)
         
     | 
| 
      
 112 
     | 
    
         
            +
                  ARPM::List.unregister(self, version)
         
     | 
| 
      
 113 
     | 
    
         
            +
                end
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
                def installed_versions
         
     | 
| 
      
 116 
     | 
    
         
            +
                  ARPM::List.versions(self.name)
         
     | 
| 
      
 117 
     | 
    
         
            +
                end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
              end
         
     | 
| 
      
 120 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/arpm/string.rb
    ADDED
    
    | 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class String
         
     | 
| 
      
 2 
     | 
    
         
            +
                def black;          "\033[30m#{self}\033[0m" end
         
     | 
| 
      
 3 
     | 
    
         
            +
                def red;            "\033[31m#{self}\033[0m" end
         
     | 
| 
      
 4 
     | 
    
         
            +
                def green;          "\033[32m#{self}\033[0m" end
         
     | 
| 
      
 5 
     | 
    
         
            +
                def  brown;         "\033[33m#{self}\033[0m" end
         
     | 
| 
      
 6 
     | 
    
         
            +
                def blue;           "\033[34m#{self}\033[0m" end
         
     | 
| 
      
 7 
     | 
    
         
            +
                def magenta;        "\033[35m#{self}\033[0m" end
         
     | 
| 
      
 8 
     | 
    
         
            +
                def cyan;           "\033[36m#{self}\033[0m" end
         
     | 
| 
      
 9 
     | 
    
         
            +
                def gray;           "\033[37m#{self}\033[0m" end
         
     | 
| 
      
 10 
     | 
    
         
            +
                def bg_black;       "\033[40m#{self}\0330m"  end
         
     | 
| 
      
 11 
     | 
    
         
            +
                def bg_red;         "\033[41m#{self}\033[0m" end
         
     | 
| 
      
 12 
     | 
    
         
            +
                def bg_green;       "\033[42m#{self}\033[0m" end
         
     | 
| 
      
 13 
     | 
    
         
            +
                def bg_brown;       "\033[43m#{self}\033[0m" end
         
     | 
| 
      
 14 
     | 
    
         
            +
                def bg_blue;        "\033[44m#{self}\033[0m" end
         
     | 
| 
      
 15 
     | 
    
         
            +
                def bg_magenta;     "\033[45m#{self}\033[0m" end
         
     | 
| 
      
 16 
     | 
    
         
            +
                def bg_cyan;        "\033[46m#{self}\033[0m" end
         
     | 
| 
      
 17 
     | 
    
         
            +
                def bg_gray;        "\033[47m#{self}\033[0m" end
         
     | 
| 
      
 18 
     | 
    
         
            +
                def bold;           "\033[1m#{self}\033[22m" end
         
     | 
| 
      
 19 
     | 
    
         
            +
                def reverse_color;  "\033[7m#{self}\033[27m" end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def is_number?
         
     | 
| 
      
 22 
     | 
    
         
            +
                  true if Float(self) rescue false
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,148 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # Add the directory containing this file to the start of the load path if it
         
     | 
| 
      
 2 
     | 
    
         
            +
            # isn't there already.
         
     | 
| 
      
 3 
     | 
    
         
            +
            $:.unshift(File.dirname(__FILE__)) unless
         
     | 
| 
      
 4 
     | 
    
         
            +
              $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            require 'git/author'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'git/base'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'git/branch'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'git/branches'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'git/diff'
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'git/index'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'git/lib'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'git/log'
         
     | 
| 
      
 14 
     | 
    
         
            +
            require 'git/object'
         
     | 
| 
      
 15 
     | 
    
         
            +
            require 'git/path'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'git/remote'
         
     | 
| 
      
 17 
     | 
    
         
            +
            require 'git/repository'
         
     | 
| 
      
 18 
     | 
    
         
            +
            require 'git/status'
         
     | 
| 
      
 19 
     | 
    
         
            +
            require 'git/stash'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'git/stashes'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'git/working_directory'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            lib = Git::Lib.new(nil, nil)
         
     | 
| 
      
 24 
     | 
    
         
            +
            unless lib.meets_required_version?
         
     | 
| 
      
 25 
     | 
    
         
            +
              $stderr.puts "[WARNING] The git gem requires git #{lib.required_command_version.join('.')} or later, but only found #{lib.current_command_version.join('.')}. You should probably upgrade."
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            # Git/Ruby Library
         
     | 
| 
      
 29 
     | 
    
         
            +
            #
         
     | 
| 
      
 30 
     | 
    
         
            +
            # This provides bindings for working with git in complex
         
     | 
| 
      
 31 
     | 
    
         
            +
            # interactions, including branching and merging, object
         
     | 
| 
      
 32 
     | 
    
         
            +
            # inspection and manipulation, history, patch generation
         
     | 
| 
      
 33 
     | 
    
         
            +
            # and more.  You should be able to do most fundamental git
         
     | 
| 
      
 34 
     | 
    
         
            +
            # operations with this library.
         
     | 
| 
      
 35 
     | 
    
         
            +
            #
         
     | 
| 
      
 36 
     | 
    
         
            +
            # This module provides the basic functions to open a git
         
     | 
| 
      
 37 
     | 
    
         
            +
            # reference to work with. You can open a working directory,
         
     | 
| 
      
 38 
     | 
    
         
            +
            # open a bare repository, initialize a new repo or clone an
         
     | 
| 
      
 39 
     | 
    
         
            +
            # existing remote repository.
         
     | 
| 
      
 40 
     | 
    
         
            +
            #
         
     | 
| 
      
 41 
     | 
    
         
            +
            # Author::    Scott Chacon (mailto:schacon@gmail.com)
         
     | 
| 
      
 42 
     | 
    
         
            +
            # License::   MIT License
         
     | 
| 
      
 43 
     | 
    
         
            +
            module Git
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              #g.config('user.name', 'Scott Chacon') # sets value
         
     | 
| 
      
 46 
     | 
    
         
            +
              #g.config('user.email', 'email@email.com')  # sets value
         
     | 
| 
      
 47 
     | 
    
         
            +
              #g.config('user.name')  # returns 'Scott Chacon'
         
     | 
| 
      
 48 
     | 
    
         
            +
              #g.config # returns whole config hash
         
     | 
| 
      
 49 
     | 
    
         
            +
              def config(name = nil, value = nil)
         
     | 
| 
      
 50 
     | 
    
         
            +
                lib = Git::Lib.new
         
     | 
| 
      
 51 
     | 
    
         
            +
                if(name && value)
         
     | 
| 
      
 52 
     | 
    
         
            +
                  # set value
         
     | 
| 
      
 53 
     | 
    
         
            +
                  lib.config_set(name, value)
         
     | 
| 
      
 54 
     | 
    
         
            +
                elsif (name)
         
     | 
| 
      
 55 
     | 
    
         
            +
                  # return value
         
     | 
| 
      
 56 
     | 
    
         
            +
                  lib.config_get(name)
         
     | 
| 
      
 57 
     | 
    
         
            +
                else
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # return hash
         
     | 
| 
      
 59 
     | 
    
         
            +
                  lib.config_list
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              def global_config(name = nil, value = nil)
         
     | 
| 
      
 64 
     | 
    
         
            +
                self.class.global_config(name, value)
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              # open a bare repository
         
     | 
| 
      
 68 
     | 
    
         
            +
              #
         
     | 
| 
      
 69 
     | 
    
         
            +
              # this takes the path to a bare git repo
         
     | 
| 
      
 70 
     | 
    
         
            +
              # it expects not to be able to use a working directory
         
     | 
| 
      
 71 
     | 
    
         
            +
              # so you can't checkout stuff, commit things, etc.
         
     | 
| 
      
 72 
     | 
    
         
            +
              # but you can do most read operations
         
     | 
| 
      
 73 
     | 
    
         
            +
              def self.bare(git_dir, options = {})
         
     | 
| 
      
 74 
     | 
    
         
            +
                Base.bare(git_dir, options)
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              # clones a remote repository
         
     | 
| 
      
 78 
     | 
    
         
            +
              #
         
     | 
| 
      
 79 
     | 
    
         
            +
              # options
         
     | 
| 
      
 80 
     | 
    
         
            +
              #   :bare => true (does a bare clone)
         
     | 
| 
      
 81 
     | 
    
         
            +
              #   :repository => '/path/to/alt_git_dir'
         
     | 
| 
      
 82 
     | 
    
         
            +
              #   :index => '/path/to/alt_index_file'
         
     | 
| 
      
 83 
     | 
    
         
            +
              #
         
     | 
| 
      
 84 
     | 
    
         
            +
              # example
         
     | 
| 
      
 85 
     | 
    
         
            +
              #  Git.clone('git://repo.or.cz/rubygit.git', 'clone.git', :bare => true)
         
     | 
| 
      
 86 
     | 
    
         
            +
              #
         
     | 
| 
      
 87 
     | 
    
         
            +
              def self.clone(repository, name, options = {})
         
     | 
| 
      
 88 
     | 
    
         
            +
                Base.clone(repository, name, options)
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
              # Export the current HEAD (or a branch, if <tt>options[:branch]</tt>
         
     | 
| 
      
 92 
     | 
    
         
            +
              # is specified) into the +name+ directory, then remove all traces of git from the
         
     | 
| 
      
 93 
     | 
    
         
            +
              # directory.
         
     | 
| 
      
 94 
     | 
    
         
            +
              #
         
     | 
| 
      
 95 
     | 
    
         
            +
              # See +clone+ for options.  Does not obey the <tt>:remote</tt> option,
         
     | 
| 
      
 96 
     | 
    
         
            +
              # since the .git info will be deleted anyway; always uses the default
         
     | 
| 
      
 97 
     | 
    
         
            +
              # remote, 'origin.'
         
     | 
| 
      
 98 
     | 
    
         
            +
              def self.export(repository, name, options = {})
         
     | 
| 
      
 99 
     | 
    
         
            +
                options.delete(:remote)
         
     | 
| 
      
 100 
     | 
    
         
            +
                repo = clone(repository, name, {:depth => 1}.merge(options))
         
     | 
| 
      
 101 
     | 
    
         
            +
                repo.checkout("origin/#{options[:branch]}") if options[:branch]
         
     | 
| 
      
 102 
     | 
    
         
            +
                Dir.chdir(repo.dir.to_s) { FileUtils.rm_r '.git' }
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              # Same as g.config, but forces it to be at the global level
         
     | 
| 
      
 106 
     | 
    
         
            +
              #
         
     | 
| 
      
 107 
     | 
    
         
            +
              #g.config('user.name', 'Scott Chacon') # sets value
         
     | 
| 
      
 108 
     | 
    
         
            +
              #g.config('user.email', 'email@email.com')  # sets value
         
     | 
| 
      
 109 
     | 
    
         
            +
              #g.config('user.name')  # returns 'Scott Chacon'
         
     | 
| 
      
 110 
     | 
    
         
            +
              #g.config # returns whole config hash
         
     | 
| 
      
 111 
     | 
    
         
            +
              def self.global_config(name = nil, value = nil)
         
     | 
| 
      
 112 
     | 
    
         
            +
                lib = Git::Lib.new(nil, nil)
         
     | 
| 
      
 113 
     | 
    
         
            +
                if(name && value)
         
     | 
| 
      
 114 
     | 
    
         
            +
                  # set value
         
     | 
| 
      
 115 
     | 
    
         
            +
                  lib.global_config_set(name, value)
         
     | 
| 
      
 116 
     | 
    
         
            +
                elsif (name)
         
     | 
| 
      
 117 
     | 
    
         
            +
                  # return value
         
     | 
| 
      
 118 
     | 
    
         
            +
                  lib.global_config_get(name)
         
     | 
| 
      
 119 
     | 
    
         
            +
                else
         
     | 
| 
      
 120 
     | 
    
         
            +
                  # return hash
         
     | 
| 
      
 121 
     | 
    
         
            +
                  lib.global_config_list
         
     | 
| 
      
 122 
     | 
    
         
            +
                end
         
     | 
| 
      
 123 
     | 
    
         
            +
              end
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
              # initialize a new git repository, defaults to the current working directory
         
     | 
| 
      
 126 
     | 
    
         
            +
              #
         
     | 
| 
      
 127 
     | 
    
         
            +
              # options
         
     | 
| 
      
 128 
     | 
    
         
            +
              #   :repository => '/path/to/alt_git_dir'
         
     | 
| 
      
 129 
     | 
    
         
            +
              #   :index => '/path/to/alt_index_file'
         
     | 
| 
      
 130 
     | 
    
         
            +
              def self.init(working_dir = '.', options = {})
         
     | 
| 
      
 131 
     | 
    
         
            +
                Base.init(working_dir, options)
         
     | 
| 
      
 132 
     | 
    
         
            +
              end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
      
 134 
     | 
    
         
            +
              # open an existing git working directory
         
     | 
| 
      
 135 
     | 
    
         
            +
              #
         
     | 
| 
      
 136 
     | 
    
         
            +
              # this will most likely be the most common way to create
         
     | 
| 
      
 137 
     | 
    
         
            +
              # a git reference, referring to a working directory.
         
     | 
| 
      
 138 
     | 
    
         
            +
              # if not provided in the options, the library will assume
         
     | 
| 
      
 139 
     | 
    
         
            +
              # your git_dir and index are in the default place (.git/, .git/index)
         
     | 
| 
      
 140 
     | 
    
         
            +
              #
         
     | 
| 
      
 141 
     | 
    
         
            +
              # options
         
     | 
| 
      
 142 
     | 
    
         
            +
              #   :repository => '/path/to/alt_git_dir'
         
     | 
| 
      
 143 
     | 
    
         
            +
              #   :index => '/path/to/alt_index_file'
         
     | 
| 
      
 144 
     | 
    
         
            +
              def self.open(working_dir, options = {})
         
     | 
| 
      
 145 
     | 
    
         
            +
                Base.open(working_dir, options)
         
     | 
| 
      
 146 
     | 
    
         
            +
              end
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            end
         
     |