summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorscott Chacon <schacon@agadorsparticus.(none)>2007-11-11 10:43:27 -0800
committerscott Chacon <schacon@agadorsparticus.(none)>2007-11-11 10:43:27 -0800
commita4fa110279ea28873fe1e4df10c89ddc591046b4 (patch)
tree60e08ccf8caca2fe428dee76c06c102cc54bc98b
parenta1237671ba3ec38f5b123ee6600e4352dc03196b (diff)
downloadthird_party-ruby-git-a4fa110279ea28873fe1e4df10c89ddc591046b4.tar.gz
third_party-ruby-git-a4fa110279ea28873fe1e4df10c89ddc591046b4.tar.xz
third_party-ruby-git-a4fa110279ea28873fe1e4df10c89ddc591046b4.zip
added the commit(), changed base.commit, base.tree, base.blob to gcommit, gtree, gblob
-rw-r--r--EXAMPLES34
-rw-r--r--lib/git/base.rb15
-rw-r--r--lib/git/lib.rb21
-rw-r--r--lib/git/status.rb23
-rw-r--r--tests/all_tests.rb1
-rw-r--r--tests/units/test_diff.rb6
-rw-r--r--tests/units/test_index.rb35
-rw-r--r--tests/units/test_object.rb8
8 files changed, 98 insertions, 45 deletions
diff --git a/EXAMPLES b/EXAMPLES
index b454a32..0105611 100644
--- a/EXAMPLES
+++ b/EXAMPLES
@@ -15,16 +15,16 @@ g.log # returns array of Git::Commit objects
g.log.since('2 weeks ago')
g.log.between('v2.5', 'v2.6')
g.log.each {|l| puts l.sha }
-g.blob('v2.5:Makefile').log.since('2 weeks ago')
+g.gblob('v2.5:Makefile').log.since('2 weeks ago')
g.object('HEAD^').to_s # git show / git rev-parse
g.object('HEAD^').contents
g.object('v2.5:Makefile').size
g.object('v2.5:Makefile').sha
-g.tree(treeish)
-g.blob(treeish)
-g.commit(treeish)
+g.gtree(treeish)
+g.gblob(treeish)
+g.gcommit(treeish)
g.revparse('v2.5:Makefile')
@@ -40,13 +40,13 @@ g.tag('v2.5').grep('hello', 'docs/')
g.diff(commit1, commit2).size
g.diff(commit1, commit2).stats
-g.tree('v2.5').diff('v2.6').insertions
+g.gtree('v2.5').diff('v2.6').insertions
g.diff('gitsearch1', 'v2.5').path('lib/')
-g.diff('gitsearch1', @git.tree('v2.5'))
+g.diff('gitsearch1', @git.gtree('v2.5'))
g.diff('gitsearch1', 'v2.5').path('docs/').patch
-g.tree('v2.5').diff('v2.6').patch
+g.gtree('v2.5').diff('v2.6').patch
-g.tree('v2.5').diff('v2.6').each do |file_diff|
+g.gtree('v2.5').diff('v2.6').each do |file_diff|
puts file_diff.path
puts file_diff.patch
puts file_diff.blob(:src).contents
@@ -57,18 +57,11 @@ g.config # returns whole config hash
***** IMPLEMENTED *****
-g.ls_files
-g.ls_files(:stage => true)
-
g.tag # returns array of Git::Tag objects
-
-
-
-
# needs write permission
@@ -84,18 +77,17 @@ g = Git.clone(URI, :name => 'name', :path => '/tmp/checkout'
g.config('user.name', 'Scott Chacon')
g.config('user.email', 'email@email.com')
+g.add('.')
+g.add([file1, file2])
-***** IMPLEMENTED *****
+g.commit('message')
+g.commit_all('message')
-g.add('.')
-g.add([file1, file2])
+***** IMPLEMENTED *****
g.remove('file.txt').and_file
-g.commit('message')
-g.commit_a('message')
-
g.reset # defaults to HEAD
g.reset_hard(Git::Commit)
diff --git a/lib/git/base.rb b/lib/git/base.rb
index eded12d..9be9fec 100644
--- a/lib/git/base.rb
+++ b/lib/git/base.rb
@@ -107,9 +107,9 @@ module Git
def object(objectish)
Git::Object.new(self, objectish)
end
- alias_method :tree, :object
- alias_method :commit, :object
- alias_method :blob, :object
+ alias_method :gtree, :object
+ alias_method :gcommit, :object
+ alias_method :gblob, :object
def log(count = 30)
@@ -140,6 +140,15 @@ module Git
def add(path = '.')
self.lib.add(path)
end
+
+ def commit(message, opts = {})
+ self.lib.commit(message, opts)
+ end
+
+ def commit_all(message, opts = {})
+ opts = {:add_all => true}.merge(opts)
+ self.lib.commit(message, opts)
+ end
# convenience methods
diff --git a/lib/git/lib.rb b/lib/git/lib.rb
index ec65e55..d0dda8b 100644
--- a/lib/git/lib.rb
+++ b/lib/git/lib.rb
@@ -150,7 +150,7 @@ module Git
command_lines('diff-files').each do |line|
(info, file) = line.split("\t")
(mode_src, mode_dest, sha_src, sha_dest, type) = info.split
- hsh[file] = {:path => file, :mode_file => mode_src, :mode_index => mode_dest,
+ hsh[file] = {:path => file, :mode_file => mode_src.to_s[1, 7], :mode_index => mode_dest,
:sha_file => sha_src, :sha_index => sha_dest, :type => type}
end
hsh
@@ -162,7 +162,7 @@ module Git
command_lines('diff-index', treeish).each do |line|
(info, file) = line.split("\t")
(mode_src, mode_dest, sha_src, sha_dest, type) = info.split
- hsh[file] = {:path => file, :mode_repo => mode_src, :mode_index => mode_dest,
+ hsh[file] = {:path => file, :mode_repo => mode_src.to_s[1, 7], :mode_index => mode_dest,
:sha_repo => sha_src, :sha_index => sha_dest, :type => type}
end
hsh
@@ -208,10 +208,16 @@ module Git
end
def add(path = '.')
+ path = path.join(' ') if path.is_a?(Array)
command('add', path)
end
-
+ def commit(message, opts = {})
+ arr_opts = ["-m '#{message}'"]
+ arr_opts << '-a' if opts[:add_all]
+ command('commit', arr_opts)
+ end
+
private
def command_lines(cmd, opts = {})
@@ -222,10 +228,15 @@ module Git
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 || @path) do
+ path = @git_work_dir || @git_dir || @path
+ Dir.chdir(path) do
opts = opts.to_a.join(' ')
- #puts "git #{cmd} #{opts}"
out = `git #{cmd} #{opts} 2>&1`.chomp
+ #puts path
+ #puts "gd: #{@git_work_dir}"
+ #puts "gi: #{@git_index_file}"
+ #puts "pp: #{@path}"
+ #puts "git #{cmd} #{opts}"
#puts out
#puts
if $?.exitstatus > 1
diff --git a/lib/git/status.rb b/lib/git/status.rb
index 24fd98d..f738644 100644
--- a/lib/git/status.rb
+++ b/lib/git/status.rb
@@ -27,8 +27,8 @@ module Git
out = ''
self.each do |file|
out << file.path
- out << "\n\tsha(r) " + file.sha_repo.to_s
- out << "\n\tsha(i) " + file.sha_index.to_s
+ out << "\n\tsha(r) " + file.sha_repo.to_s + ' ' + file.mode_repo.to_s
+ out << "\n\tsha(i) " + file.sha_index.to_s + ' ' + file.mode_index.to_s
out << "\n\ttype " + file.type.to_s
out << "\n\tstage " + file.stage.to_s
out << "\n\tuntrac " + file.untracked.to_s
@@ -55,7 +55,10 @@ module Git
attr_accessor :mode_index, :mode_repo
attr_accessor :sha_index, :sha_repo
- def initialize(hash)
+ @base = nil
+
+ def initialize(base, hash)
+ @base = base
@path = hash[:path]
@type = hash[:type]
@stage = hash[:stage]
@@ -66,6 +69,14 @@ module Git
@untracked = hash[:untracked]
end
+ def blob(type = :index)
+ if type == :repo
+ @base.object(@sha_repo)
+ else
+ @base.object(@sha_index) rescue @base.object(@sha_repo)
+ end
+ end
+
end
@@ -85,16 +96,16 @@ module Git
# find modified in tree
@base.lib.diff_files.each do |path, data|
- @files[path].merge!(data)
+ @files[path] ? @files[path].merge!(data) : @files[path] = data
end
# find added but not committed - new files
@base.lib.diff_index('HEAD').each do |path, data|
- @files[path].merge!(data)
+ @files[path] ? @files[path].merge!(data) : @files[path] = data
end
@files.each do |k, file_hash|
- @files[k] = StatusFile.new(file_hash)
+ @files[k] = StatusFile.new(@base, file_hash)
end
end
diff --git a/tests/all_tests.rb b/tests/all_tests.rb
index 0fc5f75..d671b24 100644
--- a/tests/all_tests.rb
+++ b/tests/all_tests.rb
@@ -1,3 +1,4 @@
Dir.chdir(File.dirname(__FILE__)) do
Dir.glob('**/test_*.rb') { |test_case| require test_case }
+ #Dir.glob('**/test_index.rb') { |test_case| require test_case }
end
diff --git a/tests/units/test_diff.rb b/tests/units/test_diff.rb
index b989c8a..16db0f3 100644
--- a/tests/units/test_diff.rb
+++ b/tests/units/test_diff.rb
@@ -31,18 +31,18 @@ class TestDiff < Test::Unit::TestCase
end
def test_diff_objects
- d = @git.diff('gitsearch1', @git.tree('v2.5'))
+ d = @git.diff('gitsearch1', @git.gtree('v2.5'))
assert(3, d.size)
end
def test_object_diff
- d = @git.tree('v2.5').diff('gitsearch1')
+ d = @git.gtree('v2.5').diff('gitsearch1')
assert_equal(3, d.size)
assert_equal(74, d.lines)
assert_equal(10, d.insertions)
assert_equal(64, d.deletions)
- d = @git.tree('v2.6').diff(@git.tree('gitsearch1'))
+ d = @git.gtree('v2.6').diff(@git.gtree('gitsearch1'))
assert_equal(2, d.size)
assert_equal(9, d.lines)
end
diff --git a/tests/units/test_index.rb b/tests/units/test_index.rb
index cf20eaf..b4e2f81 100644
--- a/tests/units/test_index.rb
+++ b/tests/units/test_index.rb
@@ -11,24 +11,53 @@ class TestIndex< Test::Unit::TestCase
def test_add
in_temp_dir do |path|
- #puts path
g = Git.clone(@wbare, 'new')
Dir.chdir('new') do
- assert_equal('100644', g.status['example.txt'].mode_index)
+ puts `pwd`
+ #assert_equal('100644', g.status['example.txt'].mode_index)
+
new_file('test-file', 'blahblahblah')
assert(g.status.untracked.assoc('test-file'))
+
g.add
assert(g.status.added.assoc('test-file'))
assert(!g.status.untracked.assoc('test-file'))
assert(!g.status.changed.assoc('example.txt'))
+
append_file('example.txt', 'hahahaha')
+ puts g.status.pretty
assert(g.status.changed.assoc('example.txt'))
+
g.add
assert(g.status.changed.assoc('example.txt'))
+
g.commit('my message')
assert(!g.status.changed.assoc('example.txt'))
assert(!g.status.added.assoc('test-file'))
- assert(!g.status.untracked.assoc('test-file'))
+ assert(!g.status.untracked.assoc('test-file'))
+ assert_equal('hahahaha', g.status['example.txt'].blob.contents)
+ end
+ end
+ end
+
+ def test_add_array
+ in_temp_dir do |path|
+ g = Git.clone(@wbare, 'new')
+ Dir.chdir('new') do
+
+ new_file('test-file1', 'blahblahblah1')
+ new_file('test-file2', 'blahblahblah2')
+ assert(g.status.untracked.assoc('test-file1'))
+
+ g.add(['test-file1', 'test-file2'])
+ assert(g.status.added.assoc('test-file1'))
+ assert(g.status.added.assoc('test-file1'))
+ assert(!g.status.untracked.assoc('test-file1'))
+
+ g.commit('my message')
+ assert(!g.status.added.assoc('test-file1'))
+ assert(!g.status.untracked.assoc('test-file1'))
+ assert_equal('blahblahblah1', g.status['test-file1'].blob.contents)
end
end
end
diff --git a/tests/units/test_object.rb b/tests/units/test_object.rb
index c115b75..a8c6bce 100644
--- a/tests/units/test_object.rb
+++ b/tests/units/test_object.rb
@@ -77,17 +77,17 @@ class TestObject < Test::Unit::TestCase
end
def test_grep
- g = @git.tree('a3db7143944dcfa0').grep('search') # there
+ g = @git.gtree('a3db7143944dcfa0').grep('search') # there
assert_equal(3, g.to_a.flatten.size)
assert_equal(1, g.size)
- assert_equal({}, @git.tree('a3db7143944dcfa0').grep('34a566d193')) # not there
+ assert_equal({}, @git.gtree('a3db7143944dcfa0').grep('34a566d193')) # not there
- g = @git.commit('gitsearch1').grep('search') # there
+ g = @git.gcommit('gitsearch1').grep('search') # there
assert_equal(8, g.to_a.flatten.size)
assert_equal(2, g.size)
- g = @git.commit('gitsearch1').grep('search', 'scott/new*') # there
+ g = @git.gcommit('gitsearch1').grep('search', 'scott/new*') # there
assert_equal(3, g.to_a.flatten.size)
assert_equal(1, g.size)
end