44 lines
1,013 B
Ruby
44 lines
1,013 B
Ruby
|
module Gitlab
|
||
|
module Git
|
||
|
class RevList
|
||
|
attr_reader :oldrev, :newrev, :path_to_repo
|
||
|
|
||
|
def initialize(path_to_repo:, newrev:, oldrev: nil)
|
||
|
@oldrev = oldrev
|
||
|
@newrev = newrev
|
||
|
@path_to_repo = path_to_repo
|
||
|
end
|
||
|
|
||
|
# This method returns an array of new references
|
||
|
def new_refs
|
||
|
execute([*base_args, newrev, '--not', '--all'])
|
||
|
end
|
||
|
|
||
|
# This methods returns an array of missed references
|
||
|
def missed_ref
|
||
|
execute([*base_args, '--max-count=1', oldrev, "^#{newrev}"])
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def execute(args)
|
||
|
output, status = Gitlab::Popen.popen(args, nil, Gitlab::Git::Env.all.stringify_keys)
|
||
|
|
||
|
unless status.zero?
|
||
|
raise "Got a non-zero exit code while calling out `#{args.join(' ')}`."
|
||
|
end
|
||
|
|
||
|
output.split("\n")
|
||
|
end
|
||
|
|
||
|
def base_args
|
||
|
[
|
||
|
Gitlab.config.git.bin_path,
|
||
|
"--git-dir=#{path_to_repo}",
|
||
|
'rev-list'
|
||
|
]
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|