5ee7876534
Gitaly's FetchIntoObjectPool RPC will idempotently fetch objects into an object pool. If the pool doesn't exist, it will create an empty pool before attempting the fetch. This change adds client code as well as specs to cover this behavior.
210 lines
6.2 KiB
Ruby
210 lines
6.2 KiB
Ruby
module RepoHelpers
|
|
extend self
|
|
|
|
# Text file in repo
|
|
#
|
|
# Ex.
|
|
#
|
|
# # Get object
|
|
# blob = RepoHelpers.text_blob
|
|
#
|
|
# blob.path # => 'files/js/commit.js.coffee'
|
|
# blob.data # => 'class Commit...'
|
|
#
|
|
# Build the options hash that's passed to Rugged::Commit#create
|
|
|
|
def sample_blob
|
|
OpenStruct.new(
|
|
oid: '5f53439ca4b009096571d3c8bc3d09d30e7431b3',
|
|
path: "files/js/commit.js.coffee",
|
|
data: <<eos
|
|
class Commit
|
|
constructor: ->
|
|
$('.files .diff-file').each ->
|
|
new CommitFile(this)
|
|
|
|
@Commit = Commit
|
|
eos
|
|
)
|
|
end
|
|
|
|
def sample_commit
|
|
OpenStruct.new(
|
|
id: "570e7b2abdd848b95f2f578043fc23bd6f6fd24d",
|
|
parent_id: '6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9',
|
|
author_full_name: "Dmitriy Zaporozhets",
|
|
author_email: "dmitriy.zaporozhets@gmail.com",
|
|
files_changed_count: 2,
|
|
line_code: '2f6fcd96b88b36ce98c38da085c795a27d92a3dd_15_14',
|
|
line_code_path: 'files/ruby/popen.rb',
|
|
del_line_code: '2f6fcd96b88b36ce98c38da085c795a27d92a3dd_13_13',
|
|
message: <<eos
|
|
Change some files
|
|
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
|
|
eos
|
|
)
|
|
end
|
|
|
|
def another_sample_commit
|
|
OpenStruct.new(
|
|
id: "e56497bb5f03a90a51293fc6d516788730953899",
|
|
parent_id: '4cd80ccab63c82b4bad16faa5193fbd2aa06df40',
|
|
author_full_name: "Sytse Sijbrandij",
|
|
author_email: "sytse@gitlab.com",
|
|
files_changed_count: 1,
|
|
message: <<eos
|
|
Add directory structure for tree_helper spec
|
|
|
|
This directory structure is needed for a testing the method flatten_tree(tree) in the TreeHelper module
|
|
|
|
See [merge request #275](https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/275#note_732774)
|
|
|
|
See merge request !2
|
|
eos
|
|
)
|
|
end
|
|
|
|
def sample_big_commit
|
|
OpenStruct.new(
|
|
id: "913c66a37b4a45b9769037c55c2d238bd0942d2e",
|
|
author_full_name: "Dmitriy Zaporozhets",
|
|
author_email: "dmitriy.zaporozhets@gmail.com",
|
|
message: <<eos
|
|
Files, encoding and much more
|
|
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
|
|
eos
|
|
)
|
|
end
|
|
|
|
def sample_image_commit
|
|
OpenStruct.new(
|
|
id: "2f63565e7aac07bcdadb654e253078b727143ec4",
|
|
author_full_name: "Dmitriy Zaporozhets",
|
|
author_email: "dmitriy.zaporozhets@gmail.com",
|
|
old_blob_id: '33f3729a45c02fc67d00adb1b8bca394b0e761d9',
|
|
new_blob_id: '2f63565e7aac07bcdadb654e253078b727143ec4',
|
|
message: <<eos
|
|
Modified image
|
|
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
|
|
eos
|
|
)
|
|
end
|
|
|
|
def sample_compare
|
|
changes = [
|
|
{
|
|
line_code: 'a5cc2925ca8258af241be7e5b0381edf30266302_20_20',
|
|
file_path: '.gitignore'
|
|
},
|
|
{
|
|
line_code: '7445606fbf8f3683cd42bdc54b05d7a0bc2dfc44_4_6',
|
|
file_path: '.gitmodules'
|
|
}
|
|
]
|
|
|
|
commits = %w(
|
|
5937ac0a7beb003549fc5fd26fc247adbce4a52e
|
|
570e7b2abdd848b95f2f578043fc23bd6f6fd24d
|
|
6f6d7e7ed97bb5f0054f2b1df789b39ca89b6ff9
|
|
d14d6c0abdd253381df51a723d58691b2ee1ab08
|
|
c1acaa58bbcbc3eafe538cb8274ba387047b69f8
|
|
).reverse # last commit is recent one
|
|
|
|
OpenStruct.new(
|
|
source_branch: 'master',
|
|
target_branch: 'feature',
|
|
changes: changes,
|
|
commits: commits
|
|
)
|
|
end
|
|
|
|
def create_file_in_repo(
|
|
project, start_branch, branch_name, filename, content,
|
|
commit_message: 'Add new content')
|
|
Files::CreateService.new(
|
|
project,
|
|
project.owner,
|
|
commit_message: commit_message,
|
|
start_branch: start_branch,
|
|
branch_name: branch_name,
|
|
file_path: filename,
|
|
file_content: content
|
|
).execute
|
|
end
|
|
|
|
def commit_options(repo, index, target, ref, message)
|
|
options = {}
|
|
options[:tree] = index.write_tree(repo)
|
|
options[:author] = {
|
|
email: "test@example.com",
|
|
name: "Test Author",
|
|
time: Time.gm(2014, "mar", 3, 20, 15, 1)
|
|
}
|
|
options[:committer] = {
|
|
email: "test@example.com",
|
|
name: "Test Author",
|
|
time: Time.gm(2014, "mar", 3, 20, 15, 1)
|
|
}
|
|
options[:message] ||= message
|
|
options[:parents] = repo.empty? ? [] : [target].compact
|
|
options[:update_ref] = ref
|
|
|
|
options
|
|
end
|
|
|
|
# Writes a new commit to the repo and returns a Rugged::Commit. Replaces the
|
|
# contents of CHANGELOG with a single new line of text.
|
|
def new_commit_edit_old_file(repo)
|
|
oid = repo.write("I replaced the changelog with this text", :blob)
|
|
index = repo.index
|
|
index.read_tree(repo.head.target.tree)
|
|
index.add(path: "CHANGELOG", oid: oid, mode: 0100644)
|
|
|
|
options = commit_options(
|
|
repo,
|
|
index,
|
|
repo.head.target,
|
|
"HEAD",
|
|
"Edit CHANGELOG in its original location"
|
|
)
|
|
|
|
sha = Rugged::Commit.create(repo, options)
|
|
repo.lookup(sha)
|
|
end
|
|
|
|
# Writes a new commit to the repo and returns a Rugged::Commit. Replaces the
|
|
# contents of the specified file_path with new text.
|
|
def new_commit_edit_new_file(repo, file_path, commit_message, text, branch = repo.head)
|
|
oid = repo.write(text, :blob)
|
|
index = repo.index
|
|
index.read_tree(branch.target.tree)
|
|
index.add(path: file_path, oid: oid, mode: 0100644)
|
|
options = commit_options(repo, index, branch.target, branch.canonical_name, commit_message)
|
|
sha = Rugged::Commit.create(repo, options)
|
|
repo.lookup(sha)
|
|
end
|
|
|
|
# Writes a new commit to the repo and returns a Rugged::Commit. Replaces the
|
|
# contents of encoding/CHANGELOG with new text.
|
|
def new_commit_edit_new_file_on_branch(repo, file_path, branch_name, commit_message, text)
|
|
branch = repo.branches[branch_name]
|
|
new_commit_edit_new_file(repo, file_path, commit_message, text, branch)
|
|
end
|
|
|
|
# Writes a new commit to the repo and returns a Rugged::Commit. Moves the
|
|
# CHANGELOG file to the encoding/ directory.
|
|
def new_commit_move_file(repo)
|
|
blob_oid = repo.head.target.tree.detect { |i| i[:name] == "CHANGELOG" }[:oid]
|
|
file_content = repo.lookup(blob_oid).content
|
|
oid = repo.write(file_content, :blob)
|
|
index = repo.index
|
|
index.read_tree(repo.head.target.tree)
|
|
index.add(path: "encoding/CHANGELOG", oid: oid, mode: 0100644)
|
|
index.remove("CHANGELOG")
|
|
|
|
options = commit_options(repo, index, repo.head.target, "HEAD", "Move CHANGELOG to encoding/")
|
|
|
|
sha = Rugged::Commit.create(repo, options)
|
|
repo.lookup(sha)
|
|
end
|
|
end
|