2015-09-04 53 views
0

我自動化了一下git工作流程,並且在使用git gem的in_branch方法時發現了一些好奇的行爲,並想知道是否有人可以解釋這個問題出現的原因或方式?下面是一些測試代碼應該重現該問題:在git gem中打破in_branch?

#!/usr/bin/env ruby 

require 'git' 

# git details 
repo_name = 'SOME_REPO' 
working_dir = "#SOME_DIR/git_test_repo" 
repo_owner = 'SOME_GIT_USER' 
repo_host = 'SOME_GIT_HOST' 
repo_dir = "#{working_dir}/#{repo_name}" 
remote_repo = "[email protected]#{repo_host}:#{repo_owner}/#{repo_name}.git" 
branch_name = 'testbranch' 
commit_message = 'log line breaking in_branch test' 

Dir.mkdir(working_dir) unless Dir.exist?(working_dir) 
Dir.chdir(working_dir) 
Git.clone(remote_repo, repo_name) unless Dir.exists?(repo_dir) 

repo = Git.open(repo_dir) 
repo.pull(remote = 'origin', branch = 'master') 
repo.branch(branch_name).in_branch(message = commit_message) do 
    File.write(repo_dir + '/test.txt', Time.now) 
    repo.add('.') 

    # -----this line breaks it -------------- 
    puts 'committing changes' 
    # --------------------------------------- 

end 

運行此代碼時,該in_branch塊結束前的最後一個放線,實際運行時,不知何故導致分支的改變將被恢復,但當它被註釋掉時,所有代碼都按預期行事。我已經在塊中的任何地方測試了輸出線,並且它們都表現良好。它似乎發生在許多版本的ruby(自定義安裝,rvm安裝)和不同的操作系統(linux和mac)上。

是否有一些紅寶石的神祕行爲及其終端輸出我需要在這裏知道?

回答

1

不是真正的「紅寶石般的奧術行爲」。但方法最後一行的結果是該方法返回的結果。將puts置於該位置通常會破壞該方法。

0

只是測試和我看到相同的行爲使用打印(不添加換行符)。

這不是一個換行符問題,將(現在打印)行移到repo.add行上面並且所有的作品。

再想一想嗎?