lib/gitlab_git/repository.rb in gitlab_git-9.0.0 vs lib/gitlab_git/repository.rb in gitlab_git-9.0.1
- old
+ new
@@ -238,11 +238,12 @@
limit: 10,
offset: 0,
path: nil,
ref: root_ref,
follow: false,
- skip_merges: false
+ skip_merges: false,
+ disable_walk: false
}
options = default_options.merge(options)
options[:limit] ||= 0
options[:offset] ||= 0
@@ -252,11 +253,31 @@
rescue Rugged::OdbError, Rugged::InvalidError, Rugged::ReferenceError
# Return an empty array if the ref wasn't found
return []
end
- repo = options[:repo]
+ if can_walk?(options)
+ log_by_walk(sha, options)
+ else
+ log_by_shell(sha, options)
+ end
+ end
+ def can_walk?(options)
+ options[:path].blank? && !options[:skip_merges] && !options[:disable_walk]
+ end
+
+ def log_by_walk(sha, options)
+ walk_options = {
+ show: sha,
+ sort: Rugged::SORT_DATE,
+ limit: options[:limit],
+ offset: options[:offset]
+ }
+ Rugged::Walker.walk(rugged, walk_options).to_a
+ end
+
+ def log_by_shell(sha, options)
cmd = %W(git --git-dir=#{path} log)
cmd += %W(-n #{options[:limit].to_i})
cmd += %W(--format=%H)
cmd += %W(--skip=#{options[:offset].to_i})
cmd += %W(--follow) if options[:follow]