快速检索svn目录树

时间:2012-11-18 20:41:01

标签: python svn

我正在为我的大学开发一个存储库管理系统,它将为修改subversion存储库中各个文件夹的权限提供一个gui,并使教授可以轻松地为学生和TA添加具有适当权限的目录。为了使这项工作,我需要能够检索现有svn存储库的目录结构,并将其呈现在Web上。我已经看过几种方法,并且想知道是否有人有其他想法或建议。我看过的一些事情:

每小时运行一个脚本,在所有存储库上运行'svn ls -R --xml'并填充mysql数据库 正:

  • 之后加载快速页面
  • 不占用大量磁盘空间
  • 易于管理权限,即网站不需要直接触摸svn

阴性:

  • 我们的一些更复杂的存储库真的很慢
  • 没有'实时'更新
  • 必须运行是否有变更

在页面加载时,运行'svn ls -R --xml'并仅检索我需要呈现当前页面的目录 正:

  • 直播更新
  • 没有cron工作来绑定服务器

阴性:

  • 网站像糖蜜一样慢
  • 网络服务器使用更多资源

直接读取svn数据库 正:

  • 快速加载页面
  • 实时更新

阴性:

  • 难?

我很好奇有什么替代方案,我没有看到或想过,因为我觉得这些中的任何一种都会以这种或那种方式非常糟糕和不优雅。如果可以避免,我也不想重新发明轮子。 谢谢!

4 个答案:

答案 0 :(得分:1)

如果您可以在SVN服务器上运行代码,请尝试

svnlook tree /path/to/repo

这非常快,因为它直接从磁盘读取存储库:)有关更多用法的详细信息,请参阅the documentation

答案 1 :(得分:1)

首先,这是为了什么?这是源代码吗?这是某种内容管理系统吗?这是用于存储和检索文档吗?你没说。您想要使用它的内容在很大程度上取决于您需要什么类型的工具。

如果这仅仅是为了在教授,学生,助教和部门之间共享资源,请看一下Dropbox。它简单而有效。这让教授可以决定他们想与谁分享,并让你离开画面。

假设这是源控制,有几个GUI服务器管理系统以免费方式开始:

这意味着什么都不写,没有脚本,没有MySql表。它已经为你完成了。这总是最好的解决方案。

然而,如果这是用于源代码控制的,我建议你看看Git而不是Subversion,因为这是像Git这样的分布式版本控制系统工作得更好的时候之一而不是像Subversion那样的集中版本控制系统。

问题是访问问题。你有几十位教授,数百名学生和一大堆想要访问的助教。谁将为所有这些人设置帐户。每年有1/4的学生将要离开,另外1/4的学生将会进入。当然,有学生来来去去。此外,还有团队。每个人都需要访问。这是你不想要的政府头痛。

Git通过向下扩散疼痛来帮助。在你的Git主存储库中,只有那些有权访问(至少是推送访问权限。拉入访问权限可以更广泛传播)的人将是教授。期。不允许其他人向该存储库提交更改。你已经从允许500多人到十几人了。而且,这些通常会粘在一起,所以维护很少。

学生呢?这取决于教授们。教授可以向学生提供他们的Git存储库,学生可以将更改推送到教授的存储库中。从那里,教授可以将这些变化推向主人。

首先,你必须根据工具或你认为事情的运作方式确切地决定你不想要的东西,但实际上你想要的是:

  • 是版本控制吗?
  • 是文档存储库吗?
  • 这是一个维基吗?
  • 是内容管理系统吗?
  • 这是在不同群体之间分享重要文件的方式吗?

然后,一旦你拥有了它,就更容易选择工具。如果你真的想要一个大学范围的版本控制系统,Git可能会更好地满足你的需求,因为你不需要集中访问控制,而是向下传播这个责任。

答案 2 :(得分:0)

我会参考一个数据库解决方案。 存储库的问题是同时访问。使用存储更新的数据库,存储库为您提供可靠的信息源,以检索其布局。

我为实习做了大量研究,使用数据库几乎总是以最快的方式阅读回购。

用伪代码表示:

  • 读取存储库
  • 加载网站
  • print layout
  • 执行任务 - 并重复。

另一个需要考虑的选择是使用一个独立跟踪存储库布局的数据库。这样,您就可以确保用户不会碰到每个人的更新,并确保存储库数据库免受损坏。

答案 3 :(得分:0)

  1. 你应该通过file://使用直接存储库访问,这可以与慢速高清(如果你有快速的CPU和高清)相比较
  2. 将svn绑定用于各自的脚本语言,依赖于xml解析,因为它们要慢得多
  3. 不要读取整个树,而是维护导航层次结构并按需读取目录,通常如果您阅读整个层次结构,最终会在更深层次中找到数百/数千个目录通常对您的应用程序不感兴趣,因此您可以省略它们并按需显示它们(如果用户深入浏览)
  4. 如果您正在进行svn访问修改,请使用访问文件中的条目事先了解您的重要目录