schacon-git 1.0.7 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/git/object.rb CHANGED
@@ -8,36 +8,35 @@ module Git
8
8
 
9
9
  class AbstractObject
10
10
  attr_accessor :objectish, :size, :type, :mode
11
-
12
- @base = nil
13
- @contents = nil
14
- @size = nil
15
- @sha = nil
16
11
 
17
12
  def initialize(base, objectish)
18
13
  @base = base
19
14
  @objectish = objectish.to_s
20
- setup
15
+ @contents = nil
16
+ @trees = nil
17
+ @size = nil
18
+ @sha = nil
21
19
  end
22
20
 
23
21
  def sha
24
- @sha || @sha = @base.lib.revparse(@objectish)
22
+ @sha ||= @base.lib.revparse(@objectish)
25
23
  end
26
24
 
27
25
  def size
28
- @size || @size = @base.lib.object_size(@objectish)
26
+ @size ||= @base.lib.object_size(@objectish)
29
27
  end
30
28
 
31
- # get the object's contents
32
- # if no block is given, the contents are cached in memory and returned as a string
33
- # if a block is given, it yields an IO object (via IO::popen) which could be used to
34
- # read a large file in chunks. use this for large files so that they are not held
35
- # in memory
29
+ # Get the object's contents.
30
+ # If no block is given, the contents are cached in memory and returned as a string.
31
+ # If a block is given, it yields an IO object (via IO::popen) which could be used to
32
+ # read a large file in chunks.
33
+ #
34
+ # Use this for large files so that they are not held in memory.
36
35
  def contents(&block)
37
36
  if block_given?
38
37
  @base.lib.object_contents(@objectish, &block)
39
38
  else
40
- @contents || @contents = @base.lib.object_contents(@objectish)
39
+ @contents ||= @base.lib.object_contents(@objectish)
41
40
  end
42
41
  end
43
42
 
@@ -45,18 +44,13 @@ module Git
45
44
  self.contents.split("\n")
46
45
  end
47
46
 
48
- def setup
49
- raise NotImplementedError
50
- end
51
-
52
47
  def to_s
53
48
  @objectish
54
49
  end
55
50
 
56
51
  def grep(string, path_limiter = nil, opts = {})
57
- default = {:object => sha, :path_limiter => path_limiter}
58
- grep_options = default.merge(opts)
59
- @base.lib.grep(string, grep_options)
52
+ opts = {:object => sha, :path_limiter => path_limiter}.merge(opts)
53
+ @base.lib.grep(string, opts)
60
54
  end
61
55
 
62
56
  def diff(objectish)
@@ -72,21 +66,13 @@ module Git
72
66
  @base.lib.archive(@objectish, file, opts)
73
67
  end
74
68
 
75
- def tree?
76
- @type == 'tree'
77
- end
69
+ def tree?; false; end
78
70
 
79
- def blob?
80
- @type == 'blob'
81
- end
71
+ def blob?; false; end
82
72
 
83
- def commit?
84
- @type == 'commit'
85
- end
86
-
87
- def tag?
88
- @type == 'tag'
89
- end
73
+ def commit?; false; end
74
+
75
+ def tag?; false; end
90
76
 
91
77
  end
92
78
 
@@ -98,11 +84,10 @@ module Git
98
84
  @mode = mode
99
85
  end
100
86
 
101
- private
102
-
103
- def setup
104
- @type = 'blob'
105
- end
87
+ def blob?
88
+ true
89
+ end
90
+
106
91
  end
107
92
 
108
93
  class Tree < AbstractObject
@@ -139,16 +124,16 @@ module Git
139
124
  def depth
140
125
  @base.lib.tree_depth(@objectish)
141
126
  end
127
+
128
+ def tree?
129
+ true
130
+ end
142
131
 
143
132
  private
144
-
145
- def setup
146
- @type = 'tree'
147
- end
148
133
 
149
134
  # actually run the git command
150
135
  def check_tree
151
- if !@trees
136
+ unless @trees
152
137
  @trees = {}
153
138
  @blobs = {}
154
139
  data = @base.lib.ls_tree(@objectish)
@@ -161,14 +146,13 @@ module Git
161
146
 
162
147
  class Commit < AbstractObject
163
148
 
164
- @tree = nil
165
- @parents = nil
166
- @author = nil
167
- @committer = nil
168
- @message = nil
169
-
170
149
  def initialize(base, sha, init = nil)
171
150
  super(base, sha)
151
+ @tree = nil
152
+ @parents = nil
153
+ @author = nil
154
+ @committer = nil
155
+ @message = nil
172
156
  if init
173
157
  set_commit(init)
174
158
  end
@@ -233,16 +217,16 @@ module Git
233
217
  @parents = data['parent'].map{ |sha| Git::Object::Commit.new(@base, sha) }
234
218
  @message = data['message'].chomp
235
219
  end
236
-
237
- private
238
220
 
239
- def setup
240
- @type = 'commit'
241
- end
221
+ def commit?
222
+ true
223
+ end
224
+
225
+ private
242
226
 
243
227
  # see if this object has been initialized and do so if not
244
228
  def check_commit
245
- if !@tree
229
+ unless @tree
246
230
  data = @base.lib.commit_data(@objectish)
247
231
  set_commit(data)
248
232
  end
@@ -257,40 +241,33 @@ module Git
257
241
  super(base, sha)
258
242
  @name = name
259
243
  end
260
-
261
- private
262
-
263
- def setup
264
- @type = 'tag'
265
- end
244
+
245
+ def tag?
246
+ true
247
+ end
266
248
 
267
249
  end
268
250
 
269
- class << self
270
- # if we're calling this, we don't know what type it is yet
271
- # so this is our little factory method
272
- def new(base, objectish, type = nil, is_tag = false)
273
- if is_tag
274
- sha = base.lib.tag_sha(objectish)
275
- if sha == ''
276
- raise Git::GitTagNameDoesNotExist.new(objectish)
277
- end
278
- return Git::Object::Tag.new(base, sha, objectish)
279
- else
280
- if !type
281
- type = base.lib.object_type(objectish)
282
- end
251
+ # if we're calling this, we don't know what type it is yet
252
+ # so this is our little factory method
253
+ def self.new(base, objectish, type = nil, is_tag = false)
254
+ if is_tag
255
+ sha = base.lib.tag_sha(objectish)
256
+ if sha == ''
257
+ raise Git::GitTagNameDoesNotExist.new(objectish)
283
258
  end
284
-
285
- klass =
286
- case type
287
- when /blob/: Blob
288
- when /commit/: Commit
289
- when /tree/: Tree
290
- end
291
- klass::new(base, objectish)
259
+ return Git::Object::Tag.new(base, sha, objectish)
292
260
  end
293
- end
261
+
262
+ type ||= base.lib.object_type(objectish)
263
+ klass =
264
+ case type
265
+ when /blob/ then Blob
266
+ when /commit/ then Commit
267
+ when /tree/ then Tree
268
+ end
269
+ klass.new(base, objectish)
270
+ end
294
271
 
295
272
  end
296
- end
273
+ end
data/lib/git/remote.rb CHANGED
@@ -3,8 +3,6 @@ module Git
3
3
 
4
4
  attr_accessor :name, :url, :fetch_opts
5
5
 
6
- @base = nil
7
-
8
6
  def initialize(base, name)
9
7
  @base = base
10
8
  config = @base.lib.config_remote(name)
@@ -39,4 +37,4 @@ module Git
39
37
  end
40
38
 
41
39
  end
42
- end
40
+ end
data/lib/git/stash.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  module Git
2
2
  class Stash
3
+
3
4
  def initialize(base, message, existing=false)
4
5
  @base = base
5
6
  @message = message
6
- save if existing == false
7
+ save unless existing
7
8
  end
8
9
 
9
10
  def save
data/lib/git/stashes.rb CHANGED
@@ -4,9 +4,6 @@ module Git
4
4
  class Stashes
5
5
  include Enumerable
6
6
 
7
- @base = nil
8
- @stashes = nil
9
-
10
7
  def initialize(base)
11
8
  @stashes = []
12
9
 
@@ -22,8 +19,8 @@ module Git
22
19
  @stashes.unshift(s) if s.saved?
23
20
  end
24
21
 
25
- def apply(index=0)
26
- @base.lib.stash_apply(index.to_i)
22
+ def apply(index=nil)
23
+ @base.lib.stash_apply(index)
27
24
  end
28
25
 
29
26
  def clear
@@ -35,10 +32,8 @@ module Git
35
32
  @stashes.size
36
33
  end
37
34
 
38
- def each
39
- @stashes.each do |s|
40
- yield s
41
- end
35
+ def each(&block)
36
+ @stashes.each(&block)
42
37
  end
43
38
 
44
39
  def [](index)
@@ -46,4 +41,4 @@ module Git
46
41
  end
47
42
 
48
43
  end
49
- end
44
+ end
data/lib/git/status.rb CHANGED
@@ -3,9 +3,6 @@ module Git
3
3
  class Status
4
4
  include Enumerable
5
5
 
6
- @base = nil
7
- @files = nil
8
-
9
6
  def initialize(base)
10
7
  @base = base
11
8
  construct_status
@@ -48,19 +45,15 @@ module Git
48
45
  @files[file]
49
46
  end
50
47
 
51
- def each
52
- @files.each do |k, file|
53
- yield file
54
- end
48
+ def each(&block)
49
+ @files.values.each(&block)
55
50
  end
56
51
 
57
52
  class StatusFile
58
53
  attr_accessor :path, :type, :stage, :untracked
59
54
  attr_accessor :mode_index, :mode_repo
60
55
  attr_accessor :sha_index, :sha_repo
61
-
62
- @base = nil
63
-
56
+
64
57
  def initialize(base, hash)
65
58
  @base = base
66
59
  @path = hash[:path]
@@ -88,16 +81,15 @@ module Git
88
81
 
89
82
  def construct_status
90
83
  @files = @base.lib.ls_files
84
+ ignore = @base.lib.ignored_files
91
85
 
92
86
  # find untracked in working dir
93
87
  Dir.chdir(@base.dir.path) do
94
88
  Dir.glob('**/*') do |file|
95
- if !@files[file]
96
- @files[file] = {:path => file, :untracked => true} if !File.directory?(file)
97
- end
89
+ @files[file] = {:path => file, :untracked => true} unless @files[file] || File.directory?(file) || ignore.include?(file)
98
90
  end
99
91
  end
100
-
92
+
101
93
  # find modified in tree
102
94
  @base.lib.diff_files.each do |path, data|
103
95
  @files[path] ? @files[path].merge!(data) : @files[path] = data
@@ -115,4 +107,4 @@ module Git
115
107
 
116
108
  end
117
109
 
118
- end
110
+ end
data/lib/git.rb CHANGED
@@ -92,5 +92,19 @@ module Git
92
92
  def self.clone(repository, name, options = {})
93
93
  Base.clone(repository, name, options)
94
94
  end
95
+
96
+ # Export the current HEAD (or a branch, if <tt>options[:branch]</tt>
97
+ # is specified) into the +name+ directory, then remove all traces of git from the
98
+ # directory.
99
+ #
100
+ # See +clone+ for options. Does not obey the <tt>:remote</tt> option,
101
+ # since the .git info will be deleted anyway; always uses the default
102
+ # remote, 'origin.'
103
+ def self.export(repository, name, options = {})
104
+ options.delete(:remote)
105
+ repo = clone(repository, name, {:depth => 1}.merge(options))
106
+ repo.checkout("origin/#{options[:branch]}") if options[:branch]
107
+ Dir.chdir(repo.dir.to_s) { FileUtils.rm_r '.git' }
108
+ end
95
109
 
96
110
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schacon-git
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chacon
@@ -9,7 +9,7 @@ autorequire: git
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-05-14 00:00:00 -07:00
12
+ date: 2009-04-08 00:00:00 -07:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -42,7 +42,7 @@ files:
42
42
  - lib/git.rb
43
43
  - README
44
44
  has_rdoc: true
45
- homepage:
45
+ homepage: http://github.com/schacon/ruby-git/tree/master
46
46
  post_install_message:
47
47
  rdoc_options: []
48
48
 
@@ -63,10 +63,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  requirements: []
64
64
 
65
65
  rubyforge_project:
66
- rubygems_version: 1.0.1
66
+ rubygems_version: 1.2.0
67
67
  signing_key:
68
68
  specification_version: 2
69
69
  summary: A package for using Git in Ruby code.
70
- test_files:
71
- - tests/all_tests.rb
72
- - tests/test_helper.rb
70
+ test_files: []
71
+
data/tests/all_tests.rb DELETED
@@ -1,4 +0,0 @@
1
- Dir.chdir(File.dirname(__FILE__)) do
2
- Dir.glob('**/test_*.rb') { |test_case| require test_case }
3
- #Dir.glob('**/test_index.rb') { |test_case| require test_case }
4
- end
data/tests/test_helper.rb DELETED
@@ -1,77 +0,0 @@
1
- require 'test/unit'
2
- require 'fileutils'
3
- require 'logger'
4
- require File.dirname(__FILE__) + '/../lib/git'
5
-
6
- class Test::Unit::TestCase
7
-
8
- def set_file_paths
9
- cwd = `pwd`.chomp
10
- if File.directory?(File.join(cwd, 'files'))
11
- @test_dir = File.join(cwd, 'files')
12
- elsif File.directory?(File.join(cwd, '..', 'files'))
13
- @test_dir = File.join(cwd, '..', 'files')
14
- elsif File.directory?(File.join(cwd, 'tests', 'files'))
15
- @test_dir = File.join(cwd, 'tests', 'files')
16
- end
17
-
18
- @wdir_dot = File.expand_path(File.join(@test_dir, 'working'))
19
- @wbare = File.expand_path(File.join(@test_dir, 'working.git'))
20
- @index = File.expand_path(File.join(@test_dir, 'index'))
21
-
22
- @wdir = create_temp_repo(@wdir_dot)
23
- end
24
-
25
- def teardown
26
- if @tmp_path
27
- #puts "teardown #{@tmp_path}"
28
- FileUtils.rm_r(@tmp_path)
29
- end
30
- end
31
-
32
-
33
- def with_temp_bare
34
- in_temp_dir do |path|
35
- g = Git.clone(@wbare, 'new')
36
- Dir.chdir('new') do
37
- yield g
38
- end
39
- end
40
- end
41
-
42
- def create_temp_repo(clone_path)
43
- filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
44
- @tmp_path = File.join("/tmp/", filename)
45
- FileUtils.mkdir_p(@tmp_path)
46
- FileUtils.cp_r(clone_path, @tmp_path)
47
- tmp_path = File.join(@tmp_path, 'working')
48
- Dir.chdir(tmp_path) do
49
- FileUtils.mv('dot_git', '.git')
50
- end
51
- tmp_path
52
- end
53
-
54
- def in_temp_dir(remove_after = true)
55
- filename = 'git_test' + Time.now.to_i.to_s + rand(300).to_s.rjust(3, '0')
56
- tmp_path = File.join("/tmp/", filename)
57
- FileUtils.mkdir(tmp_path)
58
- Dir.chdir tmp_path do
59
- yield tmp_path
60
- end
61
- FileUtils.rm_r(tmp_path) if remove_after
62
- end
63
-
64
-
65
- def new_file(name, contents)
66
- File.open(name, 'w') do |f|
67
- f.puts contents
68
- end
69
- end
70
-
71
- def append_file(name, contents)
72
- File.open(name, 'a') do |f|
73
- f.puts contents
74
- end
75
- end
76
-
77
- end