2015-02-10 1 views
0

Я пытаюсь подражать следующее в Ruby: объект = $ 1 tag_name = $ 2 сообщение = $ 3 user_name = git config user.name user_email = git config user.email дата = date +%sМогу ли я создать осиротевший тег с использованием прочной или другой библиотеки Ruby?

tag="object ${object} 
type commit 
tag ${tag_name} 
tagger ${user_name} <${user_email}> ${date} +0000 

${message}" 

echo "${tag}" | git mktag 

Я попытался следующие, используя Прочные : repo = Rugged :: Repository.new (@full_path) tag_collection = Rugged :: TagCollection.new (repo) annotated_tag_sha = tag_collection.create (tag_name, sha, {: message => msg,: time => Time. теперь}) repo.close

Однако эти два варианта не являются эквивалентными. Мы ценим любые предложения.

я получить работу на местном уровне с помощью:

repo = Rugged::Config.global 
type = "commit" 
tagname = "v99.99.2" 
username = repo["user.name"] 
email = repo["user.email"] 
message = "this is the message for the annotated tag" 
tag_contents = "object f849f9e28c7f36a826d4b451efb16516c0c3acc2\ntype # {type}\ntag #{tagname}\ntagger #{username} <#{email}> #{Time.new.to_i}  +0000\n\n#{message}" 
executecommand = "printf \"#{tag_contents}\" | git mktag" 
Open3.popen3(executecommand) do |stdin, stdout, stderr, wait_thr| 
exit_stats = wait_thr.value 
errors = stderr.readlines 
puts "Errors are #{errors}" 
unless exit_stats.success? 
    raise Exception, 'There was an error encountered' 
end 
signature_file_sha = stdout.readline.chomp 
puts "signature sha is #{signature_file_sha}" 

конец

с помощью мерзавца 1.9, но он бросает ошибку теперь мерзавец 2.0.4 не удалось проверить объект с идентификатором

ответ

0

Да , вы можете:

# Get the repo 
repo = Rugged::Repository.open("...") 

# Lookup the target object 
target = repo.lookup("$object") 

# Create the tag annotation object 
repo.tags.create_annotation("$tag_name", target, { 
    tagger: { 
    name: "$user_name" 
    email: "$user_email", 
    time: Date.parse("$date") 
    }, 
    message: "$message" 
}) 

Я не проверял это, но это должно дать вам хотя бы en ough указатели на то, как сделать это с прочным.

+0

Спасибо Артур. Можете ли вы сделать какие-либо предложения относительно того, почему дополнительный код в моем первом комментарии не работает с Git 2.0.4? –

+0

Не знаю. Возможно, что-то изменилось между git 1.9 и 2.0.4, но я действительно сомневаюсь, что это так. Вы уверены, что нет ничего другого? Кроме того, вы попробовали предлагаемое решение для надежной работы? –

+0

Я пытался запустить код через идеал, который работал из каталога без git. Запуск файла кода из командной строки разрешил проблему. Еще раз спасибо Артур. –