2013-04-25 114 views
1

我正在嘗試處理Github數據挑戰的入口,並試圖分析一組PushEvent,但我得到了一些奇怪的(?)結果。解析githubarchive響應

users = Hash.new(0) 
(0..23).each do |hour| 
    gz = open("http://data.githubarchive.org/2013-04-01-#{hour}.json.gz") 
    js = Zlib::GzipReader.new(gz).read 
    Yajl::Parser.parse(js) do |event| 
     if event["type"] == "PushEvent" && event["actor_attributes"] && event["actor_attributes"]["login"] 
      users[event["actor_attributes"]["login"]] += 1 
     end 
    end 
end 

這個腳本工作,正常,但當我通過

users.values.max 

看看最提交了幾次由我一個人看到有人制作了超過7K一天提交。當我經過,並打印出

event["payload"]["shas"] 

所有的打印結果的基本相同:

585a2f02f36da9ee0625a42aa2d5e98836c8a2de 
[email protected] 
Notes added by 'git notes add' 
Jenkins 
true 

我相信,隨着PushEvent相關的提交信息是「通過「git的筆記添加註釋添加'「,這似乎是正確的?或者我在這裏誤讀了一些數據?

回答

0

我知道這是一個相當古老的問題,但我今天剛碰到這個。 當你陳述「基本相同」時......這是什麼意思?是最後一個布爾真正的所有這些?

原因如果我沒有弄錯(我可能...沒有發現這個歸檔轉儲的格式很多文檔)最後布爾應該是如果該提交SHA在該特定的Push上是唯一的(意思是如果該特定提交尚未在該存儲庫中看到)。機會是相同的SHA和消息,所有可能被推送幾次,但只有其中一個應該將該布爾值設置爲true。

因爲Git是分佈式的,你只是合併,看一個人的承諾,我建議做基於獨特的支票提交SHA僅計算「真正的」標誌作爲提交的數目。相同的SHA將在PushEvents中多次出現,因爲叉和分支在存儲庫的整個歷史記錄中打開和關閉/合併。作爲一個便箋,名稱'Jenkins'告訴你,這是一個由持續集成系統(http://jenkins-ci.org/)提交的提交,因此在生成這些7k重複提交消息時可能會涉及到錯誤或自動化任務。