重置/tmp值以推送Mercurial更改时遇到问题
我已经使用Mercurial大约一年了,一直没有遇到什么问题。
今天我第一次遇到了一个问题。
当我尝试用以下命令推送到远程服务器时:
$ hg push
我得到了以下回应:
searching for changes
remote: abort: No space left on device
abort: unexpected response: empty string
我在网上搜索了这个问题,发现这是一个已知的问题,并找到了Mercurial常见问题解答中的一段内容:
4.28. 我在推送时收到“没有剩余空间”或“磁盘配额超出”的错误
我在推送时收到“没有剩余空间”或“磁盘配额超出”的错误,但我在远程hg仓库所在的设备上有很多空间,或者根本没有配额限制。
这个问题可能是因为Mercurial使用/tmp(或者环境变量$TMPDIR、$TEMP或$TMP定义的某个目录)来解压从网络上收到的包。解压时可能会达到设备的限制。
当然,你可以在默认的shell配置文件中将$TMPDIR设置为远程的其他位置,但这可能会被Mercurial以外的其他进程使用。另一种解决方案是在远程的全局.hgrc中设置一个钩子。可以查看如何在推送时更改远程的临时目录的钩子设置说明。
我在我的/etc/mercurial/hgrc
文件中创建了一个钩子,内容如下:
[hooks]
pre-serve.tmpdir = python:hgenviron.settmpdir
然后我应该创建hgenviron.py
文件:
import os
#see http://docs.python.org/lib/module-tempfile.html
def settmpdir(ui, repo, hooktype, node=None, source=None, **kwargs):
os.environ["TMPDIR"] = "/home/tmp"
我遇到的问题是,我不知道如何在Fedora中将这个文件添加到$PYTHONPATH
。
我的操作系统是Fedora 12 x86_64
我使用的是Python 2.6
我使用的是Mercurial 1.6.4
更新:
我刚刚将hgenviron.py
添加到/usr/lib/python2.6/site-packages/hg/hgenviron.py
,并且
PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages/hg/hgenviron.py
export PYTHONPATH
在/etc/profile.d
中添加了一个.sh
文件,同时在/etc/mercurial/
中添加了钩子。
但是我仍然收到错误:
remote: abort: pre-serve.tmpdir hook is invalid (import of "hgenviron" failed) abort:
no suitable response from remote hg!
2 个回答
如果你在解决PYTHONPATH的问题时遇到困难,可以直接指定hgenviron.py文件的位置。
pre-serve.tmpdir = python:/var/hg/hgenviron.py:settmpdir
注意,这里调用settmpdir时用的是:
,而不是原例中的.
。
问题出在使用了错误的导入语句。正确的写法应该是 from hg import hgenviron
设置 PYTHONPATH 的方式取决于你想在哪里添加它。
在 /etc/profile.d
目录下,你可以找到一组在 bash 启动时运行的脚本。/etc/profile
是一个全局文件,它会调用这些脚本,并且里面有这样的注释:
# System wide environment and startup programs, for login setup
# Functions and aliases go in /etc/bashrc
# It's NOT good idea to change this file unless you know what you
# are doing. Much better way is to create custom.sh shell script in
# /etc/profile.d/ to make custom changes to environment. This will
# prevent need for merging in future updates.
/etc/profile
在 bash 环境加载时会被执行。对于每个用户来说,你可以编辑 ~/.bash_profile
或 ~/.bashrc
(如果这些文件不存在,你可以自己创建)。这些脚本会在特定用户登录时运行。你应该仔细查看这些文件,以了解环境是如何创建和设置的。
你可以添加类似这样的内容:
PYTHONPATH=/home/tmp:$PYTHONPATH
export PYTHONPATH