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]