diff options
author | scott Chacon <schacon@agadorsparticus.(none)> | 2007-11-10 15:34:12 -0800 |
---|---|---|
committer | scott Chacon <schacon@agadorsparticus.(none)> | 2007-11-10 15:34:12 -0800 |
commit | efcce7fc123b9e64fb9d93224e4e78d09144af3d (patch) | |
tree | 5c9966a11b18218d6e2f655e7f34a7604530b2a1 /lib | |
parent | fde3263abc5c7866aa7dce7aef28eacaa33d7664 (diff) | |
download | third_party-ruby-git-efcce7fc123b9e64fb9d93224e4e78d09144af3d.tar.gz third_party-ruby-git-efcce7fc123b9e64fb9d93224e4e78d09144af3d.tar.xz third_party-ruby-git-efcce7fc123b9e64fb9d93224e4e78d09144af3d.zip |
got clone and init to work - my first writing functions
Diffstat (limited to 'lib')
-rw-r--r-- | lib/git.rb | 10 | ||||
-rw-r--r-- | lib/git/base.rb | 45 | ||||
-rw-r--r-- | lib/git/lib.rb | 33 | ||||
-rw-r--r-- | lib/git/path.rb | 4 |
4 files changed, 70 insertions, 22 deletions
@@ -29,9 +29,9 @@ require 'git/ref' =end module Git - - def self.repo(git_dir) - Base.repo(git_dir) + + def self.bare(git_dir) + Base.bare(git_dir) end def self.open(working_dir, options = {}) @@ -42,8 +42,8 @@ module Git Base.init(working_dir, options) end - def self.clone(uri, options = {}) - Base.clone(working_dir, options) + def self.clone(repository, name, options = {}) + Base.clone(repository, name, options) end end diff --git a/lib/git/base.rb b/lib/git/base.rb index 1111887..00495c7 100644 --- a/lib/git/base.rb +++ b/lib/git/base.rb @@ -6,22 +6,26 @@ module Git @repository = nil @index = nil - # opens a Git Repository - no working directory options - def self.repo(git_dir) + # opens a bare Git Repository - no working directory options + def self.bare(git_dir) self.new :repository => git_dir end # opens a new Git Project from a working directory # you can specify non-standard git_dir and index file in the options def self.open(working_dir, opts={}) - default = {:working_directory => working_dir, - :repository => File.join(working_dir, '.git'), - :index => File.join(working_dir, '.git', 'index')} + default = {:working_directory => working_dir} git_options = default.merge(opts) self.new(git_options) end - + + # initializes a git repository + # + # options: + # :repository + # :index_file + # def self.init(working_dir, opts = {}) default = {:working_directory => working_dir, :repository => File.join(working_dir, '.git')} @@ -38,19 +42,36 @@ module Git self.new(git_options) end - def self.clone - raise NotImplementedError + # clones a git repository locally + # + # repository - http://repo.or.cz/w/sinatra.git + # name - sinatra + # + # options: + # :repository + # + # :bare + # or + # :working_directory + # :index_file + # + def self.clone(repository, name, opts = {}) + # run git-clone + self.new(Git::Lib.new.clone(repository, name, opts)) end def initialize(options = {}) + if working_dir = options[:working_directory] + options[:repository] = File.join(working_dir, '.git') if !options[:repository] + options[:index] = File.join(working_dir, '.git', 'index') if !options[:index] + end + @working_directory = Git::WorkingDirectory.new(options[:working_directory]) if options[:working_directory] @repository = Git::Repository.new(options[:repository]) if options[:repository] - @index = Git::Index.new(options[:index]) if options[:index] + @index = Git::Index.new(options[:index], false) if options[:index] end - - - + def dir @working_directory end diff --git a/lib/git/lib.rb b/lib/git/lib.rb index 8bb518b..9fa3986 100644 --- a/lib/git/lib.rb +++ b/lib/git/lib.rb @@ -8,8 +8,9 @@ module Git @git_dir = nil @git_index_file = nil @git_work_dir = nil + @path = nil - def initialize(base) + def initialize(base = nil) if base.is_a?(Git::Base) @git_dir = base.repo.path @git_index_file = base.index.path @@ -25,6 +26,32 @@ module Git command('init') end + # tries to clone the given repo + # + # returns {:repository} (if bare) + # {:working_directory} otherwise + # + # accepts options: + # :remote - name of remote (rather than 'origin') + # :bare - no working directory + # + # TODO - make this work with SSH password or auth_key + # + def clone(repository, name, opts = {}) + @path = opts[:path] || '.' + clone_dir = File.join(@path, name) + + arr_opts = [] + arr_opts << "--bare" if opts[:bare] + arr_opts << "-o #{opts[:remote]}" if opts[:remote] + arr_opts << repository + arr_opts << clone_dir + + command('clone', arr_opts) + + opts[:bare] ? {:repository => clone_dir} : {:working_directory => clone_dir} + end + def log_commits(opts = {}) arr_opts = ['--pretty=oneline'] arr_opts << "-#{opts[:count]}" if opts[:count] @@ -142,10 +169,10 @@ module Git end def command(cmd, opts = {}) - ENV['GIT_DIR'] = @git_dir + ENV['GIT_DIR'] = @git_dir if @git_dir ENV['GIT_INDEX_FILE'] = @git_index_file if @git_index_file ENV['GIT_WORK_DIR'] = @git_work_dir if @git_work_dir - Dir.chdir(@git_work_dir || @git_dir) do + Dir.chdir(@git_work_dir || @git_dir || @path) do opts = opts.to_a.join(' ') #puts "git #{cmd} #{opts}" out = `git #{cmd} #{opts} 2>&1`.chomp diff --git a/lib/git/path.rb b/lib/git/path.rb index 18845fa..e429d6f 100644 --- a/lib/git/path.rb +++ b/lib/git/path.rb @@ -5,9 +5,9 @@ module Git def initialize(path, check_path = true) if !check_path || File.exists?(path) - @path = path + @path = File.expand_path(path) else - raise ArgumentError, "path does not exist", path + raise ArgumentError, "path does not exist", File.expand_path(path) end end |