lib/gitlab_git/repository.rb in gitlab_git-7.2.21 vs lib/gitlab_git/repository.rb in gitlab_git-7.2.22

- old
+ new

@@ -837,9 +837,40 @@ } Blob.commit(self, options) end + # Returns result like "git ls-files" , recursive and full file path + # + # Ex. + # repo.ls_files('master') + # + def ls_files(ref) + actual_ref = ref || root_ref + + begin + sha_from_ref(actual_ref) + rescue Rugged::OdbError, Rugged::InvalidError, Rugged::ReferenceError + # Return an empty array if the ref wasn't found + return [] + end + + cmd = %W(git --git-dir=#{path} ls-tree) + cmd += %w(-r) + cmd += %w(--full-tree) + cmd += %w(--full-name) + cmd += %W(-- #{actual_ref}) + + raw_output = IO.popen(cmd, &:read).split("\n").map do |f| + stuff, path = f.split("\t") + mode, type, sha = stuff.split(" ") + path if type == "blob" + # Contain only blob type + end + + raw_output.compact + end + private # Get the content of a blob for a given commit. If the blob is a commit # (for submodules) then return the blob's OID. def blob_content(commit, blob_name)