git-trip 0.0.4 → 0.0.5

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.
Files changed (72) hide show
  1. data.tar.gz.sig +2 -1
  2. data/History.txt +4 -0
  3. data/Manifest.txt +3 -56
  4. data/bin/git-trip +3 -0
  5. data/git-trip.gemspec +36 -0
  6. data/lib/git-trip.rb +3 -5
  7. data/lib/git-trip/errors.rb +1 -0
  8. data/lib/git-trip/gitter.rb +1 -0
  9. data/lib/git-trip/gitter/github.rb +68 -0
  10. data/lib/git-trip/gitter/uri.rb +27 -0
  11. data/spec/git-trip/errors_spec.rb +4 -0
  12. data/spec/git-trip/gitter/github_spec.rb +30 -0
  13. data/spec/git-trip/gitter/uri_spec.rb +4 -1
  14. data/spec/git-trip/gitter_spec.rb +8 -0
  15. metadata +5 -61
  16. metadata.gz.sig +0 -0
  17. data/vendor/grit/History.txt +0 -6
  18. data/vendor/grit/Manifest.txt +0 -53
  19. data/vendor/grit/README.txt +0 -213
  20. data/vendor/grit/Rakefile +0 -29
  21. data/vendor/grit/grit.gemspec +0 -16
  22. data/vendor/grit/lib/grit.rb +0 -37
  23. data/vendor/grit/lib/grit/actor.rb +0 -36
  24. data/vendor/grit/lib/grit/blob.rb +0 -117
  25. data/vendor/grit/lib/grit/commit.rb +0 -208
  26. data/vendor/grit/lib/grit/config.rb +0 -44
  27. data/vendor/grit/lib/grit/diff.rb +0 -70
  28. data/vendor/grit/lib/grit/errors.rb +0 -7
  29. data/vendor/grit/lib/grit/git.rb +0 -116
  30. data/vendor/grit/lib/grit/index.rb +0 -77
  31. data/vendor/grit/lib/grit/lazy.rb +0 -31
  32. data/vendor/grit/lib/grit/ref.rb +0 -110
  33. data/vendor/grit/lib/grit/repo.rb +0 -318
  34. data/vendor/grit/lib/grit/tree.rb +0 -99
  35. data/vendor/grit/test/fixtures/blame +0 -131
  36. data/vendor/grit/test/fixtures/cat_file_blob +0 -1
  37. data/vendor/grit/test/fixtures/cat_file_blob_size +0 -1
  38. data/vendor/grit/test/fixtures/diff_2 +0 -54
  39. data/vendor/grit/test/fixtures/diff_2f +0 -19
  40. data/vendor/grit/test/fixtures/diff_f +0 -15
  41. data/vendor/grit/test/fixtures/diff_i +0 -201
  42. data/vendor/grit/test/fixtures/diff_mode_only +0 -1152
  43. data/vendor/grit/test/fixtures/diff_new_mode +0 -17
  44. data/vendor/grit/test/fixtures/diff_p +0 -610
  45. data/vendor/grit/test/fixtures/for_each_ref +0 -0
  46. data/vendor/grit/test/fixtures/for_each_ref_remotes +0 -0
  47. data/vendor/grit/test/fixtures/for_each_ref_tags +0 -0
  48. data/vendor/grit/test/fixtures/ls_tree_a +0 -7
  49. data/vendor/grit/test/fixtures/ls_tree_b +0 -2
  50. data/vendor/grit/test/fixtures/ls_tree_commit +0 -3
  51. data/vendor/grit/test/fixtures/rev_list +0 -26
  52. data/vendor/grit/test/fixtures/rev_list_count +0 -655
  53. data/vendor/grit/test/fixtures/rev_list_single +0 -7
  54. data/vendor/grit/test/fixtures/rev_parse +0 -1
  55. data/vendor/grit/test/fixtures/show_empty_commit +0 -6
  56. data/vendor/grit/test/fixtures/simple_config +0 -2
  57. data/vendor/grit/test/helper.rb +0 -17
  58. data/vendor/grit/test/profile.rb +0 -21
  59. data/vendor/grit/test/suite.rb +0 -6
  60. data/vendor/grit/test/test_actor.rb +0 -35
  61. data/vendor/grit/test/test_blob.rb +0 -74
  62. data/vendor/grit/test/test_commit.rb +0 -182
  63. data/vendor/grit/test/test_config.rb +0 -58
  64. data/vendor/grit/test/test_diff.rb +0 -18
  65. data/vendor/grit/test/test_git.rb +0 -52
  66. data/vendor/grit/test/test_head.rb +0 -22
  67. data/vendor/grit/test/test_real.rb +0 -19
  68. data/vendor/grit/test/test_reality.rb +0 -17
  69. data/vendor/grit/test/test_remote.rb +0 -15
  70. data/vendor/grit/test/test_repo.rb +0 -278
  71. data/vendor/grit/test/test_tag.rb +0 -29
  72. data/vendor/grit/test/test_tree.rb +0 -91
@@ -1,77 +0,0 @@
1
- module Grit
2
-
3
- class Index
4
- attr_accessor :repo, :tree
5
-
6
- def initialize(repo)
7
- self.repo = repo
8
- self.tree = {}
9
- end
10
-
11
- # Add a file to the index
12
- # +path+ is the path (including filename)
13
- # +data+ is the binary contents of the file
14
- #
15
- # Returns nothing
16
- def add(file_path, data)
17
- path = file_path.split('/')
18
- filename = path.pop
19
-
20
- current = self.tree
21
-
22
- path.each do |dir|
23
- current[dir] ||= {}
24
- node = current[dir]
25
- current = node
26
- end
27
-
28
- current[filename] = data
29
- end
30
-
31
- # Commit the contents of the index
32
- # +message+ is the commit message
33
- #
34
- # Returns a String of the SHA1 of the commit
35
- def commit(message)
36
- tree_sha1 = write_tree(self.tree)
37
-
38
- message = message.gsub("'", "\\'")
39
- commit_sha1 = self.repo.git.run("echo '#{message}' | ", :commit_tree, '', {}, [tree_sha1])
40
-
41
- # self.repo.git.update_ref({}, 'HEAD', commit_sha1)
42
- File.open(File.join(self.repo.path, 'refs', 'heads', 'master'), 'w') do |f|
43
- f.write(commit_sha1)
44
- end
45
-
46
- commit_sha1
47
- end
48
-
49
- # Recursively write a tree to the index
50
- # +tree+ is the tree
51
- #
52
- # Returns the SHA1 String of the tree
53
- def write_tree(tree)
54
- lstree = []
55
- tree.each do |k, v|
56
- case v
57
- when String:
58
- lstree << "100644 blob #{write_blob(v)}\t#{k}"
59
- when Hash:
60
- lstree << "040000 tree #{write_tree(v)}\t#{k}"
61
- end
62
- end
63
-
64
- lstree_string = lstree.join("\n").gsub("'", "\\'")
65
- self.repo.git.run("echo '#{lstree_string}' | ", :mktree, '', {}, []).chomp
66
- end
67
-
68
- # Write the blob to the index
69
- # +data+ is the data to write
70
- #
71
- # Returns the SHA1 String of the blob
72
- def write_blob(data)
73
- self.repo.git.run("echo '#{data}' | ", :hash_object, '', {:w => true, :stdin => true}, []).chomp
74
- end
75
- end # Index
76
-
77
- end # Grit
@@ -1,31 +0,0 @@
1
- ##
2
- # Allows attributes to be declared as lazy, meaning that they won't be
3
- # computed until they are asked for.
4
- #
5
- # Works by delegating each lazy_reader to a cached lazy_source method.
6
- #
7
- # class Person
8
- # lazy_reader :eyes
9
- #
10
- # def lazy_source
11
- # OpenStruct.new(:eyes => 2)
12
- # end
13
- # end
14
- #
15
- # >> Person.new.eyes
16
- # => 2
17
- #
18
- module Lazy
19
- def lazy_reader(*args)
20
- args.each do |arg|
21
- ivar = "@#{arg}"
22
- define_method(arg) do
23
- val = instance_variable_get(ivar)
24
- return val if val
25
- instance_variable_set(ivar, (@lazy_source ||= lazy_source).send(arg))
26
- end
27
- end
28
- end
29
- end
30
-
31
- Object.extend Lazy unless Object.ancestors.include? Lazy
@@ -1,110 +0,0 @@
1
- module Grit
2
-
3
- class Ref
4
-
5
- class << self
6
-
7
- # Find all Refs
8
- # +repo+ is the Repo
9
- # +options+ is a Hash of options
10
- #
11
- # Returns Grit::Ref[] (baked)
12
- def find_all(repo, options = {})
13
- default_options = {:sort => "committerdate",
14
- :format => "%(refname)%00%(objectname)"}
15
-
16
- actual_options = default_options.merge(options)
17
-
18
- output = repo.git.for_each_ref(actual_options, prefix)
19
-
20
- self.list_from_string(repo, output)
21
- end
22
-
23
- # Parse out ref information into an array of baked refs objects
24
- # +repo+ is the Repo
25
- # +text+ is the text output from the git command
26
- #
27
- # Returns Grit::Ref[] (baked)
28
- def list_from_string(repo, text)
29
- refs = []
30
-
31
- text.split("\n").each do |line|
32
- refs << self.from_string(repo, line)
33
- end
34
-
35
- refs.sort { | x, y | x.name <=> y.name }
36
- end
37
-
38
- # Create a new Ref instance from the given string.
39
- # +repo+ is the Repo
40
- # +line+ is the formatted head information
41
- #
42
- # Format
43
- # name: [a-zA-Z_/]+
44
- # <null byte>
45
- # id: [0-9A-Fa-f]{40}
46
- #
47
- # Returns Grit::Ref (baked)
48
- def from_string(repo, line)
49
- full_name, id = line.split("\0")
50
- name = full_name.sub("#{prefix}/", '')
51
- commit = Commit.create(repo, :id => id)
52
- self.new(name, commit)
53
- end
54
-
55
- protected
56
-
57
- def prefix
58
- "refs/#{name.to_s.gsub(/^.*::/, '').downcase}s"
59
- end
60
-
61
- end
62
-
63
- attr_reader :name
64
- attr_reader :commit
65
-
66
- # Instantiate a new Head
67
- # +name+ is the name of the head
68
- # +commit+ is the Commit that the head points to
69
- #
70
- # Returns Grit::Head (baked)
71
- def initialize(name, commit)
72
- @name = name
73
- @commit = commit
74
- end
75
-
76
- # Pretty object inspection
77
- def inspect
78
- %Q{#<#{self.class.name} "#{@name}">}
79
- end
80
- end # Ref
81
-
82
- # A Head is a named reference to a Commit. Every Head instance contains a name
83
- # and a Commit object.
84
- #
85
- # r = Grit::Repo.new("/path/to/repo")
86
- # h = r.heads.first
87
- # h.name # => "master"
88
- # h.commit # => #<Grit::Commit "1c09f116cbc2cb4100fb6935bb162daa4723f455">
89
- # h.commit.id # => "1c09f116cbc2cb4100fb6935bb162daa4723f455"
90
- class Head < Ref
91
-
92
- # Get the HEAD revision of the repo.
93
- # +repo+ is the Repo
94
- # +options+ is a Hash of options
95
- #
96
- # Returns Grit::Head (baked)
97
- def self.current(repo, options = {})
98
- head = File.open(File.join(repo.path, 'HEAD')).read.chomp
99
- if /ref: refs\/heads\/(.*)/.match(head)
100
- self.new($1, repo.git.rev_parse(options, 'HEAD'))
101
- end
102
- end
103
-
104
- end # Head
105
-
106
- class Tag < Ref ; end
107
-
108
- class Remote < Ref ; end
109
-
110
- end # Grit
@@ -1,318 +0,0 @@
1
- module Grit
2
-
3
- class Repo
4
- DAEMON_EXPORT_FILE = 'git-daemon-export-ok'
5
-
6
- # The path of the git repo as a String
7
- attr_accessor :path
8
- attr_reader :bare
9
-
10
- # The git command line interface object
11
- attr_accessor :git
12
-
13
- # Create a new Repo instance
14
- # +path+ is the path to either the root git directory or the bare git repo
15
- #
16
- # Examples
17
- # g = Repo.new("/Users/tom/dev/grit")
18
- # g = Repo.new("/Users/tom/public/grit.git")
19
- #
20
- # Returns Grit::Repo
21
- def initialize(path)
22
- epath = File.expand_path(path)
23
-
24
- if File.exist?(File.join(epath, '.git'))
25
- self.path = File.join(epath, '.git')
26
- @bare = false
27
- elsif File.exist?(epath) && epath =~ /\.git$/
28
- self.path = epath
29
- @bare = true
30
- elsif File.exist?(epath)
31
- raise InvalidGitRepositoryError.new(epath)
32
- else
33
- raise NoSuchPathError.new(epath)
34
- end
35
-
36
- self.git = Git.new(self.path)
37
- end
38
-
39
- # The project's description. Taken verbatim from GIT_REPO/description
40
- #
41
- # Returns String
42
- def description
43
- File.open(File.join(self.path, 'description')).read.chomp
44
- end
45
-
46
- # An array of Head objects representing the branch heads in
47
- # this repo
48
- #
49
- # Returns Grit::Head[] (baked)
50
- def heads
51
- Head.find_all(self)
52
- end
53
-
54
- alias_method :branches, :heads
55
-
56
- # Object reprsenting the current repo head.
57
- #
58
- # Returns Grit::Head (baked)
59
- def head
60
- Head.current(self)
61
- end
62
-
63
- # An array of Tag objects that are available in this repo
64
- #
65
- # Returns Grit::Tag[] (baked)
66
- def tags
67
- Tag.find_all(self)
68
- end
69
-
70
- # An array of Remote objects representing the remote branches in
71
- # this repo
72
- #
73
- # Returns Grit::Remote[] (baked)
74
- def remotes
75
- Remote.find_all(self)
76
- end
77
-
78
- # An array of Ref objects representing the refs in
79
- # this repo
80
- #
81
- # Returns Grit::Ref[] (baked)
82
- def refs
83
- [ Head.find_all(self), Tag.find_all(self), Remote.find_all(self) ].flatten
84
- end
85
-
86
- # An array of Commit objects representing the history of a given ref/commit
87
- # +start+ is the branch/commit name (default 'master')
88
- # +max_count+ is the maximum number of commits to return (default 10)
89
- # +skip+ is the number of commits to skip (default 0)
90
- #
91
- # Returns Grit::Commit[] (baked)
92
- def commits(start = 'master', max_count = 10, skip = 0)
93
- options = {:max_count => max_count,
94
- :skip => skip}
95
-
96
- Commit.find_all(self, start, options)
97
- end
98
-
99
- # The Commits objects that are reachable via +to+ but not via +from+
100
- # Commits are returned in chronological order.
101
- # +from+ is the branch/commit name of the younger item
102
- # +to+ is the branch/commit name of the older item
103
- #
104
- # Returns Grit::Commit[] (baked)
105
- def commits_between(from, to)
106
- Commit.find_all(self, "#{from}..#{to}").reverse
107
- end
108
-
109
- # The Commits objects that are newer than the specified date.
110
- # Commits are returned in chronological order.
111
- # +start+ is the branch/commit name (default 'master')
112
- # +since+ is a string represeting a date/time
113
- # +extra_options+ is a hash of extra options
114
- #
115
- # Returns Grit::Commit[] (baked)
116
- def commits_since(start = 'master', since = '1970-01-01', extra_options = {})
117
- options = {:since => since}.merge(extra_options)
118
-
119
- Commit.find_all(self, start, options)
120
- end
121
-
122
- # The number of commits reachable by the given branch/commit
123
- # +start+ is the branch/commit name (default 'master')
124
- #
125
- # Returns Integer
126
- def commit_count(start = 'master')
127
- Commit.count(self, start)
128
- end
129
-
130
- # The Commit object for the specified id
131
- # +id+ is the SHA1 identifier of the commit
132
- #
133
- # Returns Grit::Commit (baked)
134
- def commit(id)
135
- options = {:max_count => 1}
136
-
137
- Commit.find_all(self, id, options).first
138
- end
139
-
140
- # The Tree object for the given treeish reference
141
- # +treeish+ is the reference (default 'master')
142
- # +paths+ is an optional Array of directory paths to restrict the tree (deafult [])
143
- #
144
- # Examples
145
- # repo.tree('master', ['lib/'])
146
- #
147
- # Returns Grit::Tree (baked)
148
- def tree(treeish = 'master', paths = [])
149
- Tree.construct(self, treeish, paths)
150
- end
151
-
152
- # The Blob object for the given id
153
- # +id+ is the SHA1 id of the blob
154
- #
155
- # Returns Grit::Blob (unbaked)
156
- def blob(id)
157
- Blob.create(self, :id => id)
158
- end
159
-
160
- # The commit log for a treeish
161
- #
162
- # Returns Grit::Commit[]
163
- def log(commit = 'master', path = nil, options = {})
164
- default_options = {:pretty => "raw"}
165
- actual_options = default_options.merge(options)
166
- arg = path ? [commit, '--', path] : [commit]
167
- commits = self.git.log(actual_options, *arg)
168
- Commit.list_from_string(self, commits)
169
- end
170
-
171
- # The diff from commit +a+ to commit +b+, optionally restricted to the given file(s)
172
- # +a+ is the base commit
173
- # +b+ is the other commit
174
- # +paths+ is an optional list of file paths on which to restrict the diff
175
- def diff(a, b, *paths)
176
- self.git.diff({}, a, b, '--', *paths)
177
- end
178
-
179
- # The commit diff for the given commit
180
- # +commit+ is the commit name/id
181
- #
182
- # Returns Grit::Diff[]
183
- def commit_diff(commit)
184
- Commit.diff(self, commit)
185
- end
186
-
187
- # Initialize a bare git repository at the given path
188
- # +path+ is the full path to the repo (traditionally ends with /<name>.git)
189
- # +options+ is any additional options to the git init command
190
- #
191
- # Examples
192
- # Grit::Repo.init_bare('/var/git/myrepo.git')
193
- #
194
- # Returns Grit::Repo (the newly created repo)
195
- def self.init_bare(path, options = {})
196
- git = Git.new(path)
197
- git.init(options)
198
- self.new(path)
199
- end
200
-
201
- # Fork a bare git repository from this repo
202
- # +path+ is the full path of the new repo (traditionally ends with /<name>.git)
203
- # +options+ is any additional options to the git clone command
204
- #
205
- # Returns Grit::Repo (the newly forked repo)
206
- def fork_bare(path, options = {})
207
- default_options = {:bare => true, :shared => true}
208
- real_options = default_options.merge(options)
209
- self.git.clone(real_options, self.path, path)
210
- Repo.new(path)
211
- end
212
-
213
- # Archive the given treeish
214
- # +treeish+ is the treeish name/id (default 'master')
215
- # +prefix+ is the optional prefix
216
- #
217
- # Examples
218
- # repo.archive_tar
219
- # # => <String containing tar archive>
220
- #
221
- # repo.archive_tar('a87ff14')
222
- # # => <String containing tar archive for commit a87ff14>
223
- #
224
- # repo.archive_tar('master', 'myproject/')
225
- # # => <String containing tar archive and prefixed with 'myproject/'>
226
- #
227
- # Returns String (containing tar archive)
228
- def archive_tar(treeish = 'master', prefix = nil)
229
- options = {}
230
- options[:prefix] = prefix if prefix
231
- self.git.archive(options, treeish)
232
- end
233
-
234
- # Archive and gzip the given treeish
235
- # +treeish+ is the treeish name/id (default 'master')
236
- # +prefix+ is the optional prefix
237
- #
238
- # Examples
239
- # repo.archive_tar_gz
240
- # # => <String containing tar.gz archive>
241
- #
242
- # repo.archive_tar_gz('a87ff14')
243
- # # => <String containing tar.gz archive for commit a87ff14>
244
- #
245
- # repo.archive_tar_gz('master', 'myproject/')
246
- # # => <String containing tar.gz archive and prefixed with 'myproject/'>
247
- #
248
- # Returns String (containing tar.gz archive)
249
- def archive_tar_gz(treeish = 'master', prefix = nil)
250
- options = {}
251
- options[:prefix] = prefix if prefix
252
- self.git.archive(options, treeish, "| gzip")
253
- end
254
-
255
- # Enable git-daemon serving of this repository by writing the
256
- # git-daemon-export-ok file to its git directory
257
- #
258
- # Returns nothing
259
- def enable_daemon_serve
260
- FileUtils.touch(File.join(self.path, DAEMON_EXPORT_FILE))
261
- end
262
-
263
- # Disable git-daemon serving of this repository by ensuring there is no
264
- # git-daemon-export-ok file in its git directory
265
- #
266
- # Returns nothing
267
- def disable_daemon_serve
268
- FileUtils.rm_f(File.join(self.path, DAEMON_EXPORT_FILE))
269
- end
270
-
271
- # The list of alternates for this repo
272
- #
273
- # Returns Array[String] (pathnames of alternates)
274
- def alternates
275
- alternates_path = File.join(self.path, *%w{objects info alternates})
276
-
277
- if File.exist?(alternates_path)
278
- File.read(alternates_path).strip.split("\n")
279
- else
280
- []
281
- end
282
- end
283
-
284
- # Sets the alternates
285
- # +alts+ is the Array of String paths representing the alternates
286
- #
287
- # Returns nothing
288
- def alternates=(alts)
289
- alts.each do |alt|
290
- unless File.exist?(alt)
291
- raise "Could not set alternates. Alternate path #{alt} must exist"
292
- end
293
- end
294
-
295
- if alts.empty?
296
- File.delete(File.join(self.path, *%w{objects info alternates}))
297
- else
298
- File.open(File.join(self.path, *%w{objects info alternates}), 'w') do |f|
299
- f.write alts.join("\n")
300
- end
301
- end
302
- end
303
-
304
- def config
305
- @config ||= Config.new(self)
306
- end
307
-
308
- def index
309
- Index.new(self)
310
- end
311
-
312
- # Pretty object inspection
313
- def inspect
314
- %Q{#<Grit::Repo "#{@path}">}
315
- end
316
- end # Repo
317
-
318
- end # Grit