lib/rugged/index.rb in rugged-0.25.0b10 vs lib/rugged/index.rb in rugged-0.25.0

- old
+ new

@@ -1,7 +1,127 @@ +# Copyright (C) the Rugged contributors. All rights reserved. +# +# This file is part of Rugged, distributed under the MIT license. +# For full terms see the included LICENSE file. + module Rugged class Index include Enumerable + + + # call-seq: + # index.diff([options]) -> diff + # index.diff(diffable[, options]) -> diff + # + # The first form returns a diff between the index and the current working + # directory. + # + # The second form returns a diff between the index and the given diffable object. + # +diffable+ can either be a +Rugged::Commit+ or a +Rugged::Tree+. + # + # The index will be used as the "old file" side of the diff, while the working + # directory or the +diffable+ will be used for the "new file" side. + # + # The following options can be passed in the +options+ Hash: + # + # :paths :: + # An array of paths / fnmatch patterns to constrain the diff to a specific + # set of files. Also see +:disable_pathspec_match+. + # + # :max_size :: + # An integer specifying the maximum byte size of a file before a it will + # be treated as binary. The default value is 512MB. + # + # :context_lines :: + # The number of unchanged lines that define the boundary of a hunk (and + # to display before and after the actual changes). The default is 3. + # + # :interhunk_lines :: + # The maximum number of unchanged lines between hunk boundaries before the hunks + # will be merged into a one. The default is 0. + # + # :reverse :: + # If true, the sides of the diff will be reversed. + # + # :force_text :: + # If true, all files will be treated as text, disabling binary attributes & detection. + # + # :ignore_whitespace :: + # If true, all whitespace will be ignored. + # + # :ignore_whitespace_change :: + # If true, changes in amount of whitespace will be ignored. + # + # :ignore_whitespace_eol :: + # If true, whitespace at end of line will be ignored. + # + # :ignore_submodules :: + # if true, submodules will be excluded from the diff completely. + # + # :patience :: + # If true, the "patience diff" algorithm will be used (currenlty unimplemented). + # + # :include_ignored :: + # If true, ignored files will be included in the diff. + # + # :include_untracked :: + # If true, untracked files will be included in the diff. + # + # :include_unmodified :: + # If true, unmodified files will be included in the diff. + # + # :recurse_untracked_dirs :: + # Even if +:include_untracked+ is true, untracked directories will only be + # marked with a single entry in the diff. If this flag is set to true, + # all files under ignored directories will be included in the diff, too. + # + # :disable_pathspec_match :: + # If true, the given +:paths+ will be applied as exact matches, instead of + # as fnmatch patterns. + # + # :deltas_are_icase :: + # If true, filename comparisons will be made with case-insensitivity. + # + # :include_untracked_content :: + # if true, untracked content will be contained in the the diff patch text. + # + # :skip_binary_check :: + # If true, diff deltas will be generated without spending time on binary + # detection. This is useful to improve performance in cases where the actual + # file content difference is not needed. + # + # :include_typechange :: + # If true, type changes for files will not be interpreted as deletion of + # the "old file" and addition of the "new file", but will generate + # typechange records. + # + # :include_typechange_trees :: + # Even if +:include_typechange+ is true, blob -> tree changes will still + # usually be handled as a deletion of the blob. If this flag is set to true, + # blob -> tree changes will be marked as typechanges. + # + # :ignore_filemode :: + # If true, file mode changes will be ignored. + # + # :recurse_ignored_dirs :: + # Even if +:include_ignored+ is true, ignored directories will only be + # marked with a single entry in the diff. If this flag is set to true, + # all files under ignored directories will be included in the diff, too. + def diff(*args) + options = args.last.is_a?(Hash) ? args.pop : {} + other = args.shift + + case other + when nil + diff_index_to_workdir options + when ::Rugged::Commit + diff_tree_to_index other.tree, options + when ::Rugged::Tree + diff_tree_to_index other, options + else + raise TypeError, "A Rugged::Commit or Rugged::Tree instance is required" + end + end def to_s s = "#<Rugged::Index\n" self.each do |entry| s << " [#{entry[:stage]}] '#{entry[:path]}'\n"