mirror of
https://github.com/hanzoai/forge.git
synced 2026-10-30 15:00:39 +00:00
The Grafana mixin queried gitea_* while modules/metrics/collector.go emits hanzogit_*, so every stat panel rendered empty with no error. All twelve queried names now match names the collector registers. Issue templates sent security reports to [email protected] and help requests to upstream's Discord and forum, which SECURITY.md explicitly tells people not to do; both now point at [email protected] and our docs, and the issue search points at this repository. FUNDING.yml routed sponsorship to upstream's Open Collective, so it is gone. The VS Code build task wrote ./gitea. The Makefile, the README beside it and .gitignore all say gitd. Frontend: initGiteaFomantic, initGiteaAPIViewer and isGiteaError renamed for what they do; the Fomantic hard-fork markers read FORGE-PATCH; base.css named :gitea: as a CUSTOM_EMOJIS example, but the defaults are git, gitlab and github. Container paths are deliberately untouched. /data/gitea is GIT_WORK_DIR's default in docker/root/usr/local/bin/gitd, the deployment does not set GIT_WORK_DIR, and SSH_SERVER_HOST_KEYS is a relative path -- moving the work directory regenerates the host keys and every existing clone reports a changed host identity. /var/lib/gitea, /etc/gitea, gitea.db and gitea-trusted-user-ca-keys.pem keep their names because the matching defaults live in modules/setting, and a path renamed on one side only is a server that starts and then cannot find its own files. Co-authored-by: Hanzo Dev <[email protected]>
55 lines
2.2 KiB
TypeScript
55 lines
2.2 KiB
TypeScript
import {buildLanguageDescriptions, importCodemirror} from './main.ts';
|
|
|
|
test('matchFilename — language detection covers extended rules', async () => {
|
|
const cm = await importCodemirror();
|
|
const list = buildLanguageDescriptions(cm);
|
|
const match = (filename: string) =>
|
|
cm.language.LanguageDescription.matchFilename(list, filename)?.name;
|
|
|
|
// Linguist-supplied filenames + extensions
|
|
expect(match('.bashrc')).toBe('Shell');
|
|
expect(match('PKGBUILD')).toBe('Shell');
|
|
expect(match('foo.zsh')).toBe('Shell');
|
|
expect(match('Cargo.lock')).toBe('TOML');
|
|
expect(match('Gemfile')).toBe('Ruby');
|
|
expect(match('foo.gemspec')).toBe('Ruby');
|
|
expect(match('foo.psgi')).toBe('Perl');
|
|
expect(match('foo.pyi')).toBe('Python');
|
|
expect(match('foo.webmanifest')).toBe('JSON');
|
|
expect(match('foo.tcc')).toBe('C++');
|
|
|
|
// Script-side extras (extraFilenames / extraExtensions)
|
|
expect(match('.editorconfig')).toBe('Properties files');
|
|
expect(match('foo.conf')).toBe('Properties files');
|
|
expect(match('Snakefile')).toBe('Python');
|
|
|
|
// Our own custom entries override language-data
|
|
expect(match('Containerfile.test')).toBe('Dockerfile');
|
|
expect(match('Dockerfile.dev')).toBe('Dockerfile');
|
|
expect(match('Makefile.am')).toBe('Makefile');
|
|
expect(match('foo.mk')).toBe('Makefile');
|
|
expect(match('.env.local')).toBe('Dotenv');
|
|
expect(match('foo.json5')).toBe('JSON5');
|
|
expect(match('foo.mdown')).toBe('Markdown');
|
|
|
|
// Filename regex wins over extension match
|
|
expect(match('nginx.conf')).toBe('Nginx');
|
|
|
|
// .spec routes to RPM Spec via excludeExt redirect
|
|
expect(match('foo.spec')).toBe('RPM Spec');
|
|
|
|
// CM original ownership preserved against Linguist's broader claims (.sql is SQL,
|
|
// not PLSQL, even though Linguist's PLSQL extension list includes it).
|
|
expect(match('foo.sql')).toBe('SQL');
|
|
expect(match('foo.h')).toBe('C');
|
|
expect(match('foo.mm')).toBe('Objective-C++');
|
|
|
|
// Globally ambiguous extensions fall through to plain text
|
|
expect(match('foo.cgi')).toBeUndefined();
|
|
expect(match('foo.inc')).toBeUndefined();
|
|
|
|
// Smoke: existing language-data entries still resolve
|
|
expect(match('foo.go')).toBe('Go');
|
|
expect(match('foo.tsx')).toBe('TSX');
|
|
});
|