lib/grit_adapter/file_access/diff.rb in dtk-common-0.11.0 vs lib/grit_adapter/file_access/diff.rb in dtk-common-0.12.0
- old
+ new
@@ -13,87 +13,87 @@
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
-class DTK::Common::GritAdapter::FileAccess
- module DiffMixin
- def diff(*args)
- diff_comamnd_args =
- case args.size
- when 1 then [@branch,args[0]]
- when 2 then args
- else raise Error.new("diff must have 1 or 2 arguments")
- end
- grit_diffs = @grit_repo.diff(*diff_comamnd_args)
- array_diff_hashes = grit_diffs.map do |diff|
- Diff::Attributes.inject(Hash.new) do |h,a|
- val = diff.send(a)
- val ? h.merge(a => val) : h
- end
- end
- Diffs.new(array_diff_hashes)
- end
-
- class Diffs < Array
-
- class Summary < ::DTK::Common::SimpleHashObject
- def any_diffs?()
- !keys().empty?
- end
- def any_added_or_deleted_files?()
- !!(self[:files_renamed] or self[:files_added] or self[:files_deleted])
- end
-
- def meta_file_changed?()
- self[:files_modified] and !!self[:files_modified].find{|r|r[:path] =~ /^r8meta/}
- end
-
- #note: in paths_to_add and paths_to_delete rename appears both since rename can be accomplsihed by a add + a delete
- def paths_to_add()
- (self[:files_added]||[]).map{|r|r[:path]} + (self[:files_renamed]||[]).map{|r|r[:new_path]}
- end
- def paths_to_delete()
- (self[:files_deleted]||[]).map{|r|r[:path]} + (self[:files_renamed]||[]).map{|r|r[:old_path]}
- end
- end
-
- def initialize(array_diff_hashes)
- super(array_diff_hashes.map{|hash|Diff.new(hash)})
- end
-
- #returns a hash with keys :file_renamed, :file_added, :file_deleted, :file_modified
- def ret_summary()
- [:renamed,:added,:deleted,:modified].inject(Summary.new) do |h,cnd|
- res = map{|diff|diff.send("file_#{cnd}".to_sym)}.compact
- res.empty? ? h : h.merge("files_#{cnd}".to_sym => res)
- end
- end
- end
-
- class Diff
- Attributes = [:new_file,:renamed_file,:deleted_file,:a_path,:b_path,:diff]
- AttributeAssignFn = Attributes.inject(Hash.new){|h,a|h.merge(a => "#{a}=".to_sym)}
- def initialize(hash_input)
- hash_input.each{|a,v|send(AttributeAssignFn[a],v)}
- end
-
- def file_added()
- @new_file && {:path => @a_path}
- end
-
- def file_renamed()
- @renamed_file && {:old_path => @b_path, :new_path => @a_path}
- end
-
- def file_deleted()
- @deleted_file && {:path => @a_path}
- end
-
- def file_modified()
- ((@new_file or @deleted_file or @renamed_file) ? nil : true) && {:path => @a_path}
- end
- private
- attr_writer(*Attributes)
- end
- end
-end
\ No newline at end of file
+class DTK::Common::GritAdapter::FileAccess
+ module DiffMixin
+ def diff(*args)
+ diff_comamnd_args =
+ case args.size
+ when 1 then [@branch,args[0]]
+ when 2 then args
+ else raise Error.new("diff must have 1 or 2 arguments")
+ end
+ grit_diffs = @grit_repo.diff(*diff_comamnd_args)
+ array_diff_hashes = grit_diffs.map do |diff|
+ Diff::Attributes.inject(Hash.new) do |h,a|
+ val = diff.send(a)
+ val ? h.merge(a => val) : h
+ end
+ end
+ Diffs.new(array_diff_hashes)
+ end
+
+ class Diffs < Array
+
+ class Summary < ::DTK::Common::SimpleHashObject
+ def any_diffs?()
+ !keys().empty?
+ end
+ def any_added_or_deleted_files?()
+ !!(self[:files_renamed] or self[:files_added] or self[:files_deleted])
+ end
+
+ def meta_file_changed?()
+ self[:files_modified] and !!self[:files_modified].find{|r|r[:path] =~ /^r8meta/}
+ end
+
+ #note: in paths_to_add and paths_to_delete rename appears both since rename can be accomplsihed by a add + a delete
+ def paths_to_add()
+ (self[:files_added]||[]).map{|r|r[:path]} + (self[:files_renamed]||[]).map{|r|r[:new_path]}
+ end
+ def paths_to_delete()
+ (self[:files_deleted]||[]).map{|r|r[:path]} + (self[:files_renamed]||[]).map{|r|r[:old_path]}
+ end
+ end
+
+ def initialize(array_diff_hashes)
+ super(array_diff_hashes.map{|hash|Diff.new(hash)})
+ end
+
+ #returns a hash with keys :file_renamed, :file_added, :file_deleted, :file_modified
+ def ret_summary()
+ [:renamed,:added,:deleted,:modified].inject(Summary.new) do |h,cnd|
+ res = map{|diff|diff.send("file_#{cnd}".to_sym)}.compact
+ res.empty? ? h : h.merge("files_#{cnd}".to_sym => res)
+ end
+ end
+ end
+
+ class Diff
+ Attributes = [:new_file,:renamed_file,:deleted_file,:a_path,:b_path,:diff]
+ AttributeAssignFn = Attributes.inject(Hash.new){|h,a|h.merge(a => "#{a}=".to_sym)}
+ def initialize(hash_input)
+ hash_input.each{|a,v|send(AttributeAssignFn[a],v)}
+ end
+
+ def file_added()
+ @new_file && {:path => @a_path}
+ end
+
+ def file_renamed()
+ @renamed_file && {:old_path => @b_path, :new_path => @a_path}
+ end
+
+ def file_deleted()
+ @deleted_file && {:path => @a_path}
+ end
+
+ def file_modified()
+ ((@new_file or @deleted_file or @renamed_file) ? nil : true) && {:path => @a_path}
+ end
+ private
+ attr_writer(*Attributes)
+ end
+ end
+end