c2cdefd441
Closes gitlab-org/gitaly#348
73 lines
2.1 KiB
Ruby
73 lines
2.1 KiB
Ruby
module Gitlab
|
|
module Git
|
|
class RevList
|
|
include Gitlab::Git::Popen
|
|
|
|
attr_reader :oldrev, :newrev, :repository
|
|
|
|
def initialize(repository, newrev:, oldrev: nil)
|
|
@oldrev = oldrev
|
|
@newrev = newrev
|
|
@repository = repository
|
|
end
|
|
|
|
# This method returns an array of new commit references
|
|
def new_refs
|
|
repository.rev_list(including: newrev, excluding: :all).split("\n")
|
|
end
|
|
|
|
# Finds newly added objects
|
|
# Returns an array of shas
|
|
#
|
|
# Can skip objects which do not have a path using required_path: true
|
|
# This skips commit objects and root trees, which might not be needed when
|
|
# looking for blobs
|
|
#
|
|
# When given a block it will yield objects as a lazy enumerator so
|
|
# the caller can limit work done instead of processing megabytes of data
|
|
def new_objects(options: [], require_path: nil, not_in: nil, &lazy_block)
|
|
opts = {
|
|
including: newrev,
|
|
options: options,
|
|
excluding: not_in.nil? ? :all : not_in,
|
|
require_path: require_path
|
|
}
|
|
|
|
get_objects(opts, &lazy_block)
|
|
end
|
|
|
|
def all_objects(options: [], require_path: nil, &lazy_block)
|
|
get_objects(including: :all,
|
|
options: options,
|
|
require_path: require_path,
|
|
&lazy_block)
|
|
end
|
|
|
|
private
|
|
|
|
def execute(args)
|
|
repository.rev_list(args).split("\n")
|
|
end
|
|
|
|
def get_objects(including: [], excluding: [], options: [], require_path: nil)
|
|
opts = { including: including, excluding: excluding, options: options, objects: true }
|
|
|
|
repository.rev_list(opts) do |lazy_output|
|
|
objects = objects_from_output(lazy_output, require_path: require_path)
|
|
|
|
yield(objects)
|
|
end
|
|
end
|
|
|
|
def objects_from_output(object_output, require_path: nil)
|
|
object_output.map do |output_line|
|
|
sha, path = output_line.split(' ', 2)
|
|
|
|
next if require_path && path.to_s.empty?
|
|
|
|
sha
|
|
end.reject(&:nil?)
|
|
end
|
|
end
|
|
end
|
|
end
|