amp-git 0.1.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.
Files changed (48) hide show
  1. data/.document +5 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +15 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +17 -0
  6. data/Rakefile +68 -0
  7. data/VERSION +1 -0
  8. data/features/amp-git.feature +9 -0
  9. data/features/step_definitions/amp-git_steps.rb +0 -0
  10. data/features/support/env.rb +4 -0
  11. data/lib/amp-git/encoding/binary_delta.rb +171 -0
  12. data/lib/amp-git/repo_format/changeset.rb +348 -0
  13. data/lib/amp-git/repo_format/commit_object.rb +87 -0
  14. data/lib/amp-git/repo_format/index.rb +169 -0
  15. data/lib/amp-git/repo_format/loose_object.rb +78 -0
  16. data/lib/amp-git/repo_format/packfile.rb +263 -0
  17. data/lib/amp-git/repo_format/packfile_index.rb +196 -0
  18. data/lib/amp-git/repo_format/raw_object.rb +56 -0
  19. data/lib/amp-git/repo_format/staging_area.rb +215 -0
  20. data/lib/amp-git/repo_format/tag_object.rb +87 -0
  21. data/lib/amp-git/repo_format/tree_object.rb +98 -0
  22. data/lib/amp-git/repo_format/versioned_file.rb +133 -0
  23. data/lib/amp-git/repositories/local_repository.rb +192 -0
  24. data/lib/amp-git/repository.rb +57 -0
  25. data/lib/amp-git.rb +49 -0
  26. data/lib/amp_plugin.rb +1 -0
  27. data/spec/amp-git_spec.rb +15 -0
  28. data/spec/repository_spec.rb +74 -0
  29. data/spec/spec.opts +1 -0
  30. data/spec/spec_helper.rb +29 -0
  31. data/test/index_tests/index +0 -0
  32. data/test/index_tests/test_helper.rb +16 -0
  33. data/test/index_tests/test_index.rb +69 -0
  34. data/test/packfile_tests/hasindex.idx +0 -0
  35. data/test/packfile_tests/hasindex.pack +0 -0
  36. data/test/packfile_tests/pack-4e1941122fd346526b0a3eee2d92f3277a0092cd.pack +0 -0
  37. data/test/packfile_tests/pack-d23ff2538f970371144ae7182c28730b11eb37c1.idx +0 -0
  38. data/test/packfile_tests/test_helper.rb +16 -0
  39. data/test/packfile_tests/test_packfile.rb +75 -0
  40. data/test/packfile_tests/test_packfile_index_v2.rb +90 -0
  41. data/test/packfile_tests/test_packfile_with_index.rb +76 -0
  42. data/test/test_commit_object.rb +60 -0
  43. data/test/test_git_delta.rb +67 -0
  44. data/test/test_helper.rb +71 -0
  45. data/test/test_loose_object.rb +51 -0
  46. data/test/test_tag_object.rb +72 -0
  47. data/test/test_tree_object.rb +55 -0
  48. metadata +215 -0
@@ -0,0 +1,133 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ module Amp
16
+ module Git
17
+
18
+ ##
19
+ # This class allows you to access a file at a given revision in the repo's
20
+ # history. You can compare them, sort them, access the changeset, and
21
+ # all sorts of stuff.
22
+ class VersionedFile < Amp::Core::Repositories::AbstractVersionedFile
23
+
24
+ attr_accessor :revision
25
+ attr_accessor :path
26
+ attr_accessor :repo
27
+
28
+ def initialize(repo, path, opts={})
29
+ @repo = repo
30
+ @path = path
31
+ @revision = opts[:revision]
32
+ end
33
+
34
+ ##
35
+ # The changeset to which this versioned file belongs.
36
+ #
37
+ # @return [AbstractChangeset]
38
+ def changeset
39
+ @changeset ||= Changeset.new @repo, @revision
40
+ end
41
+
42
+ ##
43
+ # The size of this file
44
+ #
45
+ # @return [Integer]
46
+ def size
47
+ @size ||= data.size
48
+ end
49
+
50
+ ##
51
+ # The contents of a file at the given revision
52
+ #
53
+ # @return [String] the data at the current revision
54
+ def data
55
+ @data ||= `git show #{revision}:#{path} 2> /dev/null`
56
+ end
57
+
58
+ ##
59
+ # The hash value for sticking this fucker in a hash.
60
+ #
61
+ # @return [Integer]
62
+ def hash
63
+ "#{size}--#{path}--#{repo.root}--#{revision} 2> /dev/null".hash
64
+ end
65
+
66
+ ##
67
+ # Has this file been renamed? If so, return some useful info
68
+ def renamed?
69
+ nil
70
+ end
71
+
72
+ ##
73
+ # Compares to either a bit of text or another versioned file.
74
+ # Returns true if different, false for the same.
75
+ # (much like <=> == 0 for the same)
76
+ #
77
+ # @param [AbstractVersionedFile, String] item what we're being compared to
78
+ # @return [Boolean] true if different, false if same.
79
+ def cmp(item)
80
+ return data == item if item.is_a? String
81
+
82
+ not (data == item.data &&
83
+ size == item.size &&
84
+ revision == item.revision &&
85
+ repo.root == item.repo.root )
86
+ end
87
+
88
+ ##
89
+ # Are two versioned files the same? This means same path and revision indexes.
90
+ #
91
+ # @param [AbstractVersionedFile] vfile what we're being compared to
92
+ # @return [Boolean]
93
+ def ==(vfile)
94
+ !cmp(vfile)
95
+ end
96
+
97
+ ##
98
+ # Gets the flags for this file ('x', 'l', or '')
99
+ #
100
+ # @return [String] 'x', 'l', or ''
101
+ def flags
102
+ '' # because git doesn't track them
103
+ end
104
+
105
+ end
106
+
107
+ ##
108
+ # This is a VersionedFile, except it's in the working directory, so its data
109
+ # is stored on disk in the actual file. Other than that, it's basically the
110
+ # same in its interface!
111
+ class VersionedWorkingFile < VersionedFile
112
+
113
+ ##
114
+ # Initializes a new working dir file - slightly different semantics here
115
+ def initialize(repo, path, opts={})
116
+ super(repo, path, opts)
117
+ end
118
+
119
+ def size
120
+ File.stat(repo.join(path)).size
121
+ end
122
+
123
+ def data
124
+ File.read repo.working_join(path)
125
+ end
126
+
127
+ def changeset
128
+ WorkingDirectoryChangeset.new repo
129
+ end
130
+
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,192 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ module Amp
16
+ module Core
17
+ module Repositories
18
+ module Git
19
+
20
+ class LocalRepository < Amp::Core::Repositories::AbstractLocalRepository
21
+
22
+ attr_accessor :root
23
+ attr_accessor :config
24
+ attr_accessor :file_opener
25
+ attr_accessor :git_opener
26
+ attr_accessor :staging_area
27
+
28
+ def initialize(path="", create=false, config=nil)
29
+ super(path, create, config)
30
+
31
+ @config = config
32
+
33
+ @file_opener = Support::RootedOpener.new @root # This will open relative to the repo root
34
+ @file_opener.default = :open_file # these two are the same, pretty much
35
+ @git_opener = Support::RootedOpener.new @root # this will open relative to root/.git
36
+ @git_opener.default = :open_git # just with different defaults
37
+
38
+ @staging_area = Amp::Core::Repositories::Git::StagingArea.new self
39
+
40
+ if create
41
+ init
42
+ end
43
+ end
44
+
45
+ def init(config=@config)
46
+ super(config)
47
+
48
+ `cd #{@root} && git init 2> /dev/null`
49
+ true
50
+ end
51
+
52
+ ##
53
+ # Regarding branch support.
54
+ #
55
+ # For each repository format, you begin in a default branch. Each repo format, of
56
+ # course, starts with a different default branch. Git's is "master".
57
+ #
58
+ # @api
59
+ # @return [String] the default branch name
60
+ def default_branch_name
61
+ "master"
62
+ end
63
+
64
+ def commit(opts={})
65
+ add_all_files
66
+ string = "git commit #{opts[:user] ? "--author #{opts[:user].inspect}" : "" }" +
67
+ " #{opts[:empty_ok] ? "--allow-empty" : "" }" +
68
+ " #{opts[:message] ? "-m #{opts[:message].inspect}" : "" } 2> /dev/null"
69
+ string.strip!
70
+
71
+ system string
72
+ end
73
+
74
+ def add_all_files
75
+ staging_area.add status[:modified]
76
+ end
77
+
78
+ def forget(*files)
79
+ staging_area.forget *files
80
+ end
81
+
82
+ def [](rev)
83
+ case rev
84
+ when String
85
+ Amp::Git::Changeset.new self, rev
86
+ when nil
87
+ Amp::Git::WorkingDirectoryChangeset.new self
88
+ when 'tip', :tip
89
+ Amp::Git::Changeset.new self, parents[0]
90
+ when Integer
91
+ revs = `git log --pretty=oneline 2> /dev/null`.split("\n")
92
+ short_name = revs[revs.size - 1 - rev].split(' ').first
93
+ Amp::Git::Changeset.new self, short_name
94
+ end
95
+ end
96
+
97
+ def size
98
+ `git log --pretty=oneline 2> /dev/null`.split("\n").size
99
+ end
100
+
101
+ ##
102
+ # Write +text+ to +filename+, where +filename+
103
+ # is local to the root.
104
+ #
105
+ # @param [String] filename The file as relative to the root
106
+ # @param [String] text The text to write to said file
107
+ def working_write(filename, text)
108
+ file_opener.open filename, 'w' do |f|
109
+ f.write text
110
+ end
111
+ end
112
+
113
+ ##
114
+ # Determines if a file has been modified from :node1 to :node2.
115
+ #
116
+ # @return [Boolean] has it been modified
117
+ def file_modified?(file, opts={})
118
+ file_status(file, opts) == :included
119
+ end
120
+
121
+ ##
122
+ # Returns a Symbol.
123
+ # Possible results:
124
+ # :added (subset of :included)
125
+ # :removed
126
+ # :untracked
127
+ # :included (aka :modified)
128
+ # :normal
129
+ #
130
+ # If you call localrepo#status from this method... well...
131
+ # I DARE YOU!
132
+ def file_status(filename, opts={})
133
+ parse_status! opts
134
+ inverted = @status.inject({}) do |h, (k, v)|
135
+ v.each {|v_| h[v_] = k }
136
+ h
137
+ end
138
+
139
+ # Now convert it so it uses the same jargon
140
+ # we REALLY need to get the dirstate and localrepo on
141
+ # the same page here.
142
+ case inverted[filename]
143
+ when :modified
144
+ :included
145
+ when :added
146
+ :added
147
+ when :removed
148
+ :removed
149
+ when :unknown
150
+ :untracked
151
+ else
152
+ :normal
153
+ end
154
+
155
+ end
156
+
157
+ def parse_status!(opts={})
158
+ return if @parsed
159
+
160
+ data = `git status #{opts[:node1]}..#{opts[:node2]} 2> /dev/null`.split("\n")
161
+ @status = data.inject({}) do |h, line| # yeah i know stfu
162
+ case line
163
+ when /^#\s+(\w+):\s(.+)$/
164
+ h[$1.to_sym] = $2; h
165
+ when /^#\s+([^ ]+)$/
166
+ h[:unknown] = $1; h
167
+ else
168
+ h
169
+ end
170
+ end
171
+ @parsed = true
172
+ end
173
+
174
+ def parents
175
+ first = `git log -1 HEAD 2> /dev/null`
176
+ dad = first[/^commit (.+)$/, 1]
177
+ dad = dad ? dad[0..6] : nil
178
+ mom = nil
179
+
180
+ if first =~ /Merge: (.+)\.\.\. (.+)\.\.\.$/ # Merge: 1c002dd... 35cfb2b...
181
+ dad = $1 # just have them both use the short name, nbd
182
+ mom = $2
183
+ end
184
+
185
+ [dad, mom]
186
+ end
187
+
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
@@ -0,0 +1,57 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ module Amp
16
+ module Core
17
+ module Repositories
18
+ module Git
19
+
20
+ class GitPicker < Amp::Core::Repositories::GenericRepoPicker
21
+
22
+ def pick(config, path='', create=false)
23
+ # hot path so we don't load the HTTP repos!
24
+ unless path[0,4] == "http"
25
+ return LocalRepository.new(find_repo(path), create, config)
26
+ end
27
+ raise "Unknown repository format for Git"
28
+ end
29
+
30
+ def repo_in_dir?(path)
31
+ return true if path[0, 4] == "http"
32
+ until File.directory? File.join(path, ".git")
33
+ old_path, path = path, File.dirname(path)
34
+ if path == old_path
35
+ return false
36
+ end
37
+ end
38
+ true
39
+ end
40
+
41
+ ################################
42
+ private
43
+ ################################
44
+ def find_repo(path)
45
+ until File.directory? File.join(path, ".git")
46
+ old_path, path = path, File.dirname(path)
47
+ if path == old_path
48
+ raise ArgumentError.new("No Repository Found")
49
+ end
50
+ end
51
+ path
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/amp-git.rb ADDED
@@ -0,0 +1,49 @@
1
+ class Amp::Plugins::Git < Amp::Plugins::Base
2
+ @loader = lambda {
3
+ module ::Amp
4
+ module Git
5
+ autoload :Changeset, "amp-git/repo_format/changeset.rb"
6
+ autoload :WorkingDirectoryChangeset, "amp-git/repo_format/changeset.rb"
7
+ autoload :VersionedFile, "amp-git/repo_format/versioned_file.rb"
8
+ autoload :VersionedWorkingFile, "amp-git/repo_format/versioned_file.rb"
9
+ end
10
+ module Core
11
+ module Repositories
12
+ module Git
13
+ include Support
14
+ autoload :LocalRepository, "amp-git/repositories/local_repository.rb"
15
+ autoload :GitPicker, "amp-git/repository.rb"
16
+ autoload :StagingArea, "amp-git/repo_format/staging_area.rb"
17
+ autoload :RawObject, "amp-git/repo_format/raw_object.rb"
18
+ autoload :LooseObject, "amp-git/repo_format/loose_object.rb"
19
+ autoload :TreeObject, "amp-git/repo_format/tree_object.rb"
20
+ autoload :CommitObject, "amp-git/repo_format/commit_object.rb"
21
+ autoload :TagObject, "amp-git/repo_format/tag_object.rb"
22
+ autoload :PackFile, "amp-git/repo_format/packfile.rb"
23
+ autoload :PackFileIndex, "amp-git/repo_format/packfile_index.rb"
24
+ autoload :PackFileIndexV1, "amp-git/repo_format/packfile_index.rb"
25
+ autoload :PackFileIndexV2, "amp-git/repo_format/packfile_index.rb"
26
+ autoload :Index, "amp-git/repo_format/index.rb"
27
+ module Encoding
28
+ autoload :BinaryDelta, "amp-git/encoding/binary_delta.rb"
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ require 'zlib'
35
+ require 'stringio'
36
+ }
37
+ class << self
38
+ attr_reader :loader
39
+ end
40
+ def initialize(opts = {})
41
+ @opts = opts
42
+ end
43
+
44
+ def load!
45
+ puts "Loading amp-git..."
46
+ require 'zlib'
47
+ self.class.loader.call
48
+ end
49
+ end
data/lib/amp_plugin.rb ADDED
@@ -0,0 +1 @@
1
+ require File.expand_path(File.join(File.dirname(__FILE__), 'amp-git'))
@@ -0,0 +1,15 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
@@ -0,0 +1,74 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
16
+
17
+ describe Amp::Core::Repositories::Git::GitPicker do
18
+ include ::Construct::Helpers
19
+ describe '#repo_in_dir?' do
20
+ it 'returns true if there is a .git directory' do
21
+ within_construct do |c|
22
+ c.directory 'my_repo' do |dir|
23
+ dir.directory '.git' do |final|
24
+ Amp::Core::Repositories::Git::GitPicker.new.repo_in_dir?(final.to_s).should be_true
25
+ end
26
+ end
27
+ end
28
+ end
29
+
30
+ it 'returns false if there is no .git directory' do
31
+ within_construct do |c|
32
+ c.directory 'my_repo' do |dir|
33
+ dir.directory '.hg'
34
+ dir.directory '.svn'
35
+ Amp::Core::Repositories::Git::GitPicker.new.repo_in_dir?(dir.to_s).should be_false
36
+ end
37
+ end
38
+ end
39
+ end
40
+
41
+ describe '#pick' do
42
+ it 'returns a LocalRepository object' do
43
+ within_construct do |c|
44
+ c.directory 'my_repo' do |dir|
45
+ dir.directory '.git'
46
+ repo = Amp::Core::Repositories::Git::GitPicker.new.pick({}, dir.to_s)
47
+ repo.should be_a(Amp::Core::Repositories::Git::LocalRepository)
48
+ end
49
+ end
50
+ end
51
+
52
+ it 'returns nil when no .hg found' do
53
+ within_construct do |c|
54
+ c.directory 'my_repo' do |dir|
55
+ dir.directory '.hg'
56
+ dir.directory '.svn'
57
+ lambda {
58
+ repo = Amp::Core::Repositories::Git::GitPicker.new.pick({}, dir.to_s)
59
+ }.should raise_error(ArgumentError)
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ it 'is used by Amp::Core::Repositories.pick' do
66
+ within_construct do |c|
67
+ c.directory 'my_repo' do |dir|
68
+ dir.directory '.git'
69
+ repo = Amp::Core::Repositories.pick({}, dir.to_s)
70
+ repo.should be_a(Amp::Core::Repositories::Git::LocalRepository)
71
+ end
72
+ end
73
+ end
74
+ end
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --color
@@ -0,0 +1,29 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
16
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
17
+ require 'rubygems'
18
+ require 'amp-front'
19
+ require 'amp-core'
20
+ require 'amp-git'
21
+ require 'spec'
22
+ require 'spec/autorun'
23
+ require 'construct'
24
+
25
+ Amp::Plugins::Core.new.load!
26
+ Amp::Plugins::Git.new.load!
27
+ Spec::Runner.configure do |config|
28
+
29
+ end
Binary file
@@ -0,0 +1,16 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
16
+
@@ -0,0 +1,69 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ require File.expand_path(File.join(File.dirname(__FILE__), 'test_helper'))
16
+
17
+ class TestGitIndex < AmpTestCase
18
+ include Amp::Core::Repositories::Git
19
+ INPUT_FILE = "index"
20
+
21
+ def setup
22
+ super
23
+ @opener = Amp::Core::Support::RootedOpener.new(File.expand_path(File.dirname(__FILE__)))
24
+ @opener.default = :open_file # for testing purposes!
25
+ @index = Amp::Core::Repositories::Git::Index.parse(INPUT_FILE, @opener)
26
+ end
27
+
28
+ def test_open_index
29
+ assert_not_nil @index
30
+ end
31
+
32
+ def test_lookup_fails
33
+ assert_nil @index["roflkopterz"]
34
+ end
35
+
36
+ def test_failed_fourcc
37
+ self.write_file "fakeindex" do |io|
38
+ io << "DIRT\x00\x00\x00\x02"
39
+ end
40
+ opener = Amp::Core::Support::RootedOpener.new(tempdir)
41
+ opener.default = :open_file
42
+ assert_raises Index::IndexParseError do
43
+ Amp::Core::Repositories::Git::Index.parse("fakeindex", opener)
44
+ end
45
+ end
46
+
47
+ def test_lookup_succeeds
48
+ assert_not_nil @index["Rakefile"]
49
+ end
50
+
51
+ def test_info_loads
52
+ rakefile_info = @index["Rakefile"]
53
+ assert_equal 0x4be39e30, rakefile_info.ctime
54
+ assert_equal 0, rakefile_info.ctime_ns
55
+ assert_equal 0x4be39e30, rakefile_info.mtime
56
+ assert_equal 0, rakefile_info.mtime_ns
57
+ assert_equal 0x0e000003, rakefile_info.dev
58
+ assert_equal 0x01d75ecc, rakefile_info.inode
59
+ assert_equal 0x81a4, rakefile_info.mode
60
+ assert_equal 0x01f5, rakefile_info.uid
61
+ assert_equal 0x14, rakefile_info.gid
62
+ assert_equal 0x05c5, rakefile_info.size
63
+ assert_equal "53bbb0b38868a1bd2059a1174f54de63764013af", hexlify(rakefile_info.hash_id)
64
+ assert_false rakefile_info.assume_valid
65
+ assert_false rakefile_info.update_needed
66
+ assert_equal 0, rakefile_info.stage
67
+ assert_equal "Rakefile", rakefile_info.name
68
+ end
69
+ end
Binary file
Binary file
@@ -0,0 +1,16 @@
1
+ ##################################################################
2
+ # Licensing Information #
3
+ # #
4
+ # The following code is licensed, as standalone code, under #
5
+ # the Ruby License, unless otherwise directed within the code. #
6
+ # #
7
+ # For information on the license of this code when distributed #
8
+ # with and used in conjunction with the other modules in the #
9
+ # Amp project, please see the root-level LICENSE file. #
10
+ # #
11
+ # © Michael J. Edgar and Ari Brown, 2009-2010 #
12
+ # #
13
+ ##################################################################
14
+
15
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_helper'))
16
+