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"