Bug 54821

Summary: autocomplete gears subdirectory in URLs
Product: Infrastructure Reporter: Arseny Maslennikov <arseny>
Component: git.altlinux.orgAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: Andrey Cherepanov <cas>
Severity: enhancement    
Priority: P5 CC: glebfm, ldv, rider
Version: unspecified   
Hardware: all   
OS: Linux   

Description Arseny Maslennikov 2025-06-17 15:32:35 MSK
Как извеcтно, gitweb, анализируя URL в запросах, не ориентируется на последний компонент пути до query string, если эта query string содержит квазипараметр `p=`.

В пользовательских каталогах public и packages можно даже опустить:
https://git.altlinux.org/people/specbot/public?p=specs.git
(к пути дописывается /, происходит перенаправление, последний компонент остаётся пустым, и, видимо, поэтому показывают репозиторий)

Из нижеописанных путей только первый показывает коммит, на который смотрит HEAD у репозитория:
1) https://git.altlinux.org/gears/x/..git?p=xz.git;a=commit;h=HEAD
2) https://git.altlinux.org/gears/x/?p=xz.git;a=commit;h=HEAD
3) https://git.altlinux.org/gears/..git?p=xz.git;a=commit;h=HEAD
4) https://git.altlinux.org/gears/?p=xz.git;a=commit;h=HEAD

2 и 4, правда, показывают листинг, игнорируя query string.

Предлагаю для URL из gears/, если последний компонент пути *.git указан сразу после gears, вычислять нужный префикс из параметра `p=` и дописывать (т. н. rewrite) его после gears/.
Например, по URL (3) отдавать то, что было бы отдано по URL (1).
Comment 1 Arseny Maslennikov 2025-06-17 15:33:23 MSK
Можно и (4) в (3) превращать, но если есть причины так не делать, то не надо.
Comment 2 Anton Farygin 2025-06-17 15:43:12 MSK
https://git.altlinux.org/gears/x/xz.git?p=xz.git;a=commit;h=HEAD - а разве не такой URL должен быть ? всё остальное выглядит как ошибки, с которых надо сделать редирект.
Comment 3 Arseny Maslennikov 2025-06-17 15:51:31 MSK
(In reply to Anton Farygin from comment #2)
> https://git.altlinux.org/gears/x/xz.git?p=xz.git;a=commit;h=HEAD - а разве
> не такой URL должен быть ? всё остальное выглядит как ошибки, с которых надо
> сделать редирект.

Пожалуй, да, но gitweb удивительным образом так себя не ведёт.

https://sourceware.org/git/glibc.git?p=glibc.git;a=blob;f=string/strerrordesc_np.c;hb=glibc-2.41
https://sourceware.org/git/bzip2.git?p=glibc.git;a=blob;f=string/strerrordesc_np.c;hb=glibc-2.41

По обоим этим URL выдаётся контент из glibc.git.
Comment 4 Anton Farygin 2025-06-17 15:55:07 MSK
непонятно только какое поведение должно быть ?
404 ?
Comment 5 Arseny Maslennikov 2025-06-17 15:59:31 MSK
(In reply to Anton Farygin from comment #2)
> https://git.altlinux.org/gears/x/xz.git?p=xz.git;a=commit;h=HEAD - а разве
> не такой URL должен быть ? всё остальное выглядит как ошибки, с которых надо
> сделать редирект.

У нас некоторые члены team на это завязываются и, составляя URL, чтобы опубликовать на него ссылку, пишут в последнем компоненте `..git`, в т. ч. в документации на altlinux.org, в том числе в рекомендациях начинающим мейнтейнерам.

IMHO, делать здесь простые и незапутывающие URL уже поздно, проще где-то описать алгоритм в человекопонимаемом виде.

Тем более, был экспериментальный cgit-интерфейс к контенту на git.a.o, где URL совсем другие.
Comment 6 Anton Farygin 2025-06-17 16:01:55 MSK
Для тех случаев, когда указаны непротиворечащие URL - можно сделать редирект.

Если в URL явная ошибка, то 404 будет отличным выбором, на мой взгляд.