Extract the longest-matching ref from a commit path when multiple matches occur
What does this MR do?
This MR extracts the longest-matching ref from a commit path. In cases when there are multiple refs that prefix the path, the ref name is ambiguous. Using the heuristic that the longest-matching ref seems like a sensible default.
Why was this MR needed?
Suppose there is a branch named release/app
and a tag named release/app/v1.0.0
. Suppose README.md
exists in the root directory.
Let's suppose the path passed in is release/app/v1.0.0/README.md
. There are two possible ways to interpret the ref and path:
- ref =
release/app
, path =v1.0.0/README.md
- ref =
release/app/v1.0.0
, path =README.md
The crux of the issue is that there is ambiguity which one is correct; both could be real possibilities. In the current implementation of extract_ref
, GitLab gets confused and tries neither: it uses ref = release
and path = app/v1.0.0/README.md
. Since the file does not exist, it returns 404.
What are the relevant issue numbers?
Closes #1839 (closed)