从URL获取git提交ID


Grab git commit ID from URL

我正试图解析我的项目上的Gitlab的原子feed,以在我的网站上显示版本历史。我确实计划每30分钟缓存我的结果,但现在我正试图从提要中提供的URL直接提取提交ID。

在提要中为提交提供的ID是URL:

https://gitlab.com/username/project/commit/c8c6ad918939d6fae60e1369b28b859390a32d56

为了获取实际提交的简化版本,首先我用/分解URL,然后用end()选择最后一个索引。如果我是正确的,提交id将始终在URL的末尾,所以这应该在gitlab上的任何项目上工作(如果我错了请纠正我)。

$id = explode('/', $feed->id); // Explode the URL into an array
$commit  = substr(end($id), 0, 9); // Cut the string, select 
echo $commit, '<br>';

这给了我一个项目所有提交的列表。提交id是漂亮的,而不是预期的长哈希。

这里的问题是,我做的对吗?我能做得更好吗?


如果你想知道我是如何到达这里的,我首先从我的项目提交部分抓取RSS Atom提要,然后在其上运行file_get_contents()并使用SimpleXMLElement解析XML。之后,我简单地在条目上使用foreach()来循环遍历所有提交。

我将缓存文件输出以提高性能,所以请不要考虑这个问题。我真的很想知道我做的是否正确和有效以及你会使用什么方法。

为什么不用一行正则表达式就能搞定呢?例如:

 preg_match_all("('/[a-f0-9]{9})",$inputXmlFeed, $urls);

$urls变量现在应该有一个您正在寻找的提交哈希列表,而不需要解析或循环,除非您需要除提交引用之外的其他内容。