What have you found for these years?

2009-03-24

殘廢 named_scope

in ActiveRecord, 問題良多的版本(隨時爛掉都不奇怪?):
named_scope :for_visitor, lambda{ |visitor, user|
{:conditions =>
"permissions.#{user.relationship(visitor)} != #{Permission.enum[:none]} AND
#{table_name}.status = 1", # 1 is :common, see app/datamapper/abstract/photo_album.rb
:include => :permission}
}

看看人家 DataMapper 多漂亮...
def self.for_visitor visitor, user
all(permission.send(user.relationship(visitor)).not => :none,
:status => :common)
end

另一件事,DateTime.new(0) 在 AR 的 DateTime 好像讀不出來...
photo.created_at # => nil in AR, DateTime(0) in DM.

只好改成 1970 試試看吧...

5 retries:

老林 said...

本來想用 git rebase 的方式把 irrlicht svn (pre 1.6)
和現有的 irrlicht-psc 做 merge,然後我去處理 conflict
處理完後理論上就是 irrlicht-psc 跟上 irr mainstream svn 版本的進度

但結果發現這樣反而是要先處理一大堆 irrlicht pre 1.6 與 1.4 之間的
conflict,數量已經遠大於 irrlicht-psc 在 1.4 版本中修改與加入的部份
因此結論仍然是手動目力 merge 比較有效率 ....

godfat 真常 said...

希望這種事是只要做第一次啦..

老林 said...

現在開了一個 irrlicht-1.6 branch,
還沒 push,因為仍有一些小問題 (詳見專案板),
從開始手動 merge 到遊戲可以玩才花了不到三小時,
感覺運氣算很好 ...

不過接下來要怎麼繼續跟上 irrlicht mainstream ?
是定時從 irrlicht mainstream pull 一份回來,
然後把 irrlicht-psc rebase 上去嗎?
還是把 mainstream rebase 到 irrlicht-psc?
我還是有點搞不太懂 XD

godfat 真常 said...

唔,先不考慮新版有問題的話,我想理想流程可能是:
開一個新的 cubeat-irrlicht project, 相對於 cubeat-core
這一個 repo 可以用 git svn clone 對方的版本
接著加上自己的修改,最後 git push github

cubeat-core 則用 git submodule 把 cubeat-irrlicht 涵蓋進來

需要更新時,則 git svn rebase 回來。此時如果 git push github
會出現 reject, 表示你的 commit history 跟 github 上版本不同...
改用 git push -f github 可以強迫遠端更新成你的資料

如果有人在你 push -f 之前 push 了東西上去,你又沒有 pull 下來的話,
push -f 會把上面的東西蓋掉!因此 force push 要很小心使用

但是如果只有你一個人開發的話,這應該不會是很大的問題
其他人該怎麼共同開發,也避開這個問題?我會覺得是 fork.
先假設使用 github 上的介面,比較好說明

按上面的 fork, 產生一份自己的 repo, 針對這個 repo 修改,
然後你再去 pull 或是 cherry-pick 這個額外的 repo.
也就是說,共同開發變成本身就有一大堆 repo...
你的 repo 就只有你一個人在用而已

pull 可能會因為 history 改變而失敗,但 cherry-pick 應該可以用
github 上也有提供簡單的介面,按 fork queue 那邊,
你可以隨便挑某一個 fork 的 commit 合併進去

*

不過如果說 irrlicht 的 branch/trunk 太不穩定的話...
可能會變成 cubeat-irrlicht 也要有許多的 branch.
理想上就是他有幾個 branch 這邊也會有幾個 branch.
這樣 cubeat-irrlicht 也可以在各個 branch 間切換,
互相 merge 或怎麼樣都可以。

而 cubeat-core 利用 git submodule 含入 cubeat-irrlicht,
意思就是獨立發展,可以任意指定使用某個 commit 的 irrlicht,
因此要測試應該也是很容易,就去 checkout 某個 commit 即可

理想上大概是這樣吧...
然後 cubeat-core master 可能就先用最穩定可用的 irrlicht.

最大的障礙可能是在不知道 git svn 能不能把 svn branch
對應到 git branch 上?如果可以的話就很簡單了
不行的話,就要再想想看怎麼做比較好了 @@

我查查看能不能這樣玩

godfat 真常 said...

嗯,可以參考這篇
http://www.jukie.net/~bart/blog/svn-branches-in-git

Post a Comment

All texts are licensed under CC Attribution 3.0