懒惰,无根,但强大的配置文件管理主要使用符号链接
confman的Python项目详细描述
说明
在没有根权限的情况下,在计算机之间惰性地同步配置文件, 在需要的时候仍然能够创建强大的规则。
虽然它主要用于管理个人配置文件(dotfiles)。 它可以用来将文件部署到几乎任何地方。
它被设计成几乎没有依赖关系,并且包含在一个小文件中。
默认情况下,它将在目标目录中创建指向文件的符号链接 在源目录中。 但是,有些文件名可以指示特殊操作(见下文)。
要求
Python2.6或更高版本(对于2.5,请尝试v0.1)。 不需要安装,尽管您可以安装它。
用法
该项目是可用的,但目前没有cli接口。 示例可在example.py和公共点文件存储库中找到。
一个简单的例子:
from confman import ConfigSource c = ConfigSource("~/dotfiles", "~") c.sync()
特殊操作
- 名称以_开头的文件将被忽略。 这有助于为可编程操作提供数据。
- 名称以.copy结尾的文件将是副本。 它将每次更新目标文件。
- 名称以.copyonce结尾的文件将是副本。 如果任何一个文件被修改,它都不会更新目标文件。
- 名称以.empty结尾的文件将是空文件。 如果任何一个文件被修改,它都不会更新目标文件。
- 名称以.p.py结尾的文件是可编程操作。 它们包含python代码,并提供了一些特殊的方法。
- 名称以.F结尾的文件是普通文件。 这意味着blah.p.py.F将以blah.p.py结尾, 以及f.F.F作为f.F。把 一个目录而不是它的所有子目录(有效地处理 作为文件的目录)。
特殊操作的所有匹配部分都被删除;myfile.empty将创建 名为myfile的空文件。
可编程操作
可编程动作可以做特殊动作所能做的一切,等等。 他们必须提出一个“转发商”,但在大多数情况下,帮助者是提供给 保持代码简短。
- empty()引发空操作。
- ignore()引发忽略操作。
- redirect(filename)将创建指向所提供文件名的符号链接,并添加_。 redirect('myfile')将创建指向_myfile的符号链接。
文本/模板
text()和template()都使用string.Template模板。
- text(data)将把数据变量中的文本放入目标文件。
- template(filename)的行为类似于text(),但从文件中获取数据。
它们必须分两步使用:
text('hello $name').render(hello='laurentb')
提供了一个warning变量,以帮助防止用户修改 自动生成的文件。
text('''# $warning aaa=$var''').render(var='123')
将输出:
# WARNING: Do not edit this file, edit the template instead. aaa=123
既然是python,如果你想的话可以使用外部库, 包括高级模板库,如mako。
选项变量
您可以向confman提供一个options变量,它将被提供 到可编程动作。
from confman import ConfigSource c = ConfigSource("~/dotfiles", "~", options={'hostname': 'myhostname'}) c.sync()
可编程的操作可以这样使用:
if options['hostname'] == 'myhostname': redirect('myfile') else: ignore()
变量options不一定是dict,它可以是任何您想要的。
高级使用
要调试正在发生的事情(以及原因),可以执行以下操作:
from confman import ConfigSource c.sync() print repr(c)
更改默认行为
所有特殊操作都是可选的,可以配置或子类化。 例如,您可以更改“复制”操作的匹配:
import confman, re # use .COPY instead of .copy confman.CopyAction.MATCHED = re.compile(r"\.COPY$") # use hg instead of git confman.IgnoreAction.MATCHED = re.compile(r"_|\.hg|\.hgignore")
您还可以更改使用的类。 默认情况下,它是confman.ConfigSource.DEFAULT_CLASSES。
import confman confman.ConfigSource("~/dotfiles", "~", classes=[MyClass, confman.SymlinkAction])
开发
捐款可以以git补丁的形式发送到laurent@bachelier.name。