2011-03-06 94 views
0

當我將macfusion放入我的Ubuntu VM中,並且hg從bitbucket中克隆一些東西 - 然後嘗試對其執行提交/導出/等操作時,一個名稱前綴爲'hg-checklinks-'的文件夾。Mercurial:通過NFS/SAMBA/SSHFS網絡驅動器的hg-checklinks-recursive符號鏈接

在檢查時,它似乎將一個永無止境的符號鏈鏈接回其父文件夾。這讓我完全瘋狂,到目前爲止,我已經失去了對mercurial的信心。

請注意,當我在本地文件夾上使用它時似乎工作正常。有沒有人有任何想法我可以解決這個問題......或甚至更多的信息,爲什麼發生?

乾杯!

回答

4

DVCS的分散部分是在本地運行它 - 這應該比本地系統以外的任何其他做的唯一的Mercurial操作是pushpullclone。如果你從bitbucket克隆到你的Ubuntu虛擬機上,那麼你應該從你的Ubuntu虛擬機克隆到你的Mac上並推送到Ubuntu虛擬機。

這就是說,它看起來像你的網絡FS是不正確的刪除文件,當它被告知。下面是相關的代碼(在這裏找到:https://www.mercurial-scm.org/repo/hg/file/a2dc8819bb0d/mercurial/util.py#l710):

name = tempfile.mktemp(dir=path, prefix='hg-checklink-') 
try: 
    os.symlink(".", name) 
    os.unlink(name) 
    return True 
except (OSError, AttributeError): 
    return False 

因此,無論您的網絡FS是創建符號鏈接,但無論如何拋出異常或拋出異常時,要求刪除(取消鏈接)的符號鏈接。

+0

嗯。感謝你 - 真正的信息。不知道該如何處理網絡FS。關於克隆Ubuntu回購的好處很明顯,但顯然這意味着每當我對文件進行更改並想要預覽時,我都必須進行一次推動 - 這並不是那麼有趣。 – 2011-03-07 15:58:25

+0

就像我所說的,我試過NFS,Samba和SSHFS。這個問題只發生在我犯下的時候。這是很好的解決方法: – 2011-03-07 16:05:21

+0

我懷疑把'os.unlink(name)'放在'except'行之後,'return False'之前會阻止該文件出現,但是誰知道你的保險絲層可能注入了哪些其他錯誤,這是不容易看到的。唯一安全的行爲是修改你的工作流,以推/拉網絡並在本地提交 – 2011-03-07 16:39:24

0

這裏的問題是SSHFS的非常特殊的「-o follow_symlinks」,它會高興地創建符號鏈接固定,然後聲稱它無法創建它們,然後將它們顯示爲極好的遞歸不可移動目錄。此錯誤選項可能會自動由Macfusion中的錯誤(https://code.google.com/p/macfusion/issues/detail?id=284)啓用。所以如果有的話,你應該在sshfs和Macfusion中「失去信心」,而不是Mercurial。

這將在Mercurial 2.7中解決。同時,您應該可以在沒有選項的情況下手動運行sshfs。

(爲了更快的bug修復,請報告錯誤到水銀/ SSHFS/macfusion項目,不是隨機的互聯網問題的論壇。)