从远程mercurial存储库获取单个文件

时间:2011-02-19 21:26:26

标签: java mercurial

有没有办法以编程方式从Java中的远程Mercurial存储库下载单个文件?我问过very similar question regarding git;现在我希望我也可以用mercurial做类似的事情。

  1. 我更喜欢使用尽可能少带宽的解决方案,最好只下载该单个文件。我不需要浏览存储库,我已经有了文件的路径。
  2. 我不关心文件的历史,我只想要它的最新版本。
  3. 只将文件打印到输出的解决方案也很棒 - 当然 - 它实际上不必将文件保存到磁盘,我自己也可以这样做。
  4. 我更喜欢不依赖于其他应用程序的解决方案(例如在机器上安装mercurial客户端)。包含mercurial客户端实现本身的Java库将是最佳的。但是,如果没有别的办法,我很乐意调用hg
  5. 根据我对Mercurial如何工作的理解 - 允许仅针对本地存储库 - 这可能证明是有问题的;但是我可以用类似的Git SCM做到这一点,我希望Mercurial也有解决方案。

2 个答案:

答案 0 :(得分:10)

mercurial wire protocol没有从远程存储库读取单个文件的命令。这就是hg命令行客户端无法执行此操作的原因。这个想法是你应该总是为这样的事情做一个本地克隆。

然而,mercurial的各种web界面通常都有办法获取文件内容。例如,对于bitbucket存储库,URL如下所示:

http://bitbucket.org/<user>/<project>/raw/<revision>/<filename>

对于hg serve网络界面,网址如下所示:

http://<host>:<port>/raw-file/<revision>/<filename>

答案 1 :(得分:2)

Bitbucket REST API是您想要的工具。

https://api.bitbucket/1.0/repositories/{USER}/{REPO-NAME}/raw/tip/{PATH/TO/FILE}

来自docs的示例:

  

您可以获取原始文件,而不是将文件格式化为JSON   文件:

     

$ curl   https://api.bitbucket.org/1.0/repositories/jespern/django-piston/raw/tip/piston/utils.py   导入时间来自django.http import HttpResponseNotAllowed,   HttpResponseForbidden,HttpResponse,HttpResponseBadRequest来自   django.core ....