Skip to content

Commit 7415d5b

Browse files
committed
core: add fixSorage
1 parent 894c088 commit 7415d5b

7 files changed

Lines changed: 88 additions & 22 deletions

File tree

README.md

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ Hydro 用户群:1085853538
111111
<details>
112112
<summary><h2>更新日志(点击展开)</h2></summary>
113113

114-
## Hydro 5.0.0-beta.0 / UI 4.58.0-beta.0
114+
## Hydro 5.0.0-beta.3 / UI 4.58.0-beta.3
115+
116+
### New Features
115117

116118
- judge: 添加 checker 编译缓存
117119
- ui: 优化题目详情页面 OGP 信息
@@ -127,21 +129,32 @@ Hydro 用户群:1085853538
127129
- core: 分离 HMR 和 Watcher 组件
128130
- core: i18n: 添加 interface 选项
129131
- judge: 添加 kattis checker 支持
130-
- migrate: 修复 hustoj 自动运行
131132
- core: Settings: 支持使用 Schemastery
132133
- ui: 更新系统设置页面样式
133-
- import-qduoj: 修复 spj=null
134-
- core: 修复文件复制
135134
- core: 支持存储并显示提交记录重测历史
136135
- core: 新的加域逻辑
137136
- ui: UserSelect.Multi: 支持批量粘贴用户名
138-
- ui: 修复在线 IDE 右键菜单
139-
- ui: 修复未登录用户查看题目文件页
140137
- core: oauth: 支持绑定/解绑三方平台账户 (#971)
141-
- ui: 修复暗色模式表格边框 (#968)
142138
- core: 优化 icpc 题目包导入 (#966)
143139
- judge: 弃用 diff (#965)
144140
- core: 支持设置加域时自动加入小组
141+
- core: 添加 `--disable-worker` 启动选项
142+
- ui: 支持使用自定义字体
143+
- framework: 添加 Subscription API
144+
- core: 添加 fixStorage 脚本
145+
146+
### Bug Fixes
147+
148+
- migrate: 修复 hustoj 自动运行
149+
- import-qduoj: 修复 spj=null
150+
- core: 修复文件复制
151+
- ui: 修复在线 IDE 右键菜单
152+
- ui: 修复未登录用户查看题目文件页
153+
- ui: 修复暗色模式表格边框 (#968)
154+
- ui: 修复题解回复编辑权限
155+
- ui: 修复高亮行号显示
156+
- core: 修复 `User.serialize()` 参数
157+
- ui: 修复更换邮箱功能
145158

146159
### Breaking API Changes
147160

framework/eslint-config/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
"license": "MIT",
55
"main": "base.mjs",
66
"dependencies": {
7-
"@eslint-react/eslint-plugin": "^1.51.0",
7+
"@eslint-react/eslint-plugin": "^1.51.2",
88
"@eslint/compat": "^1.2.9",
99
"@eslint/eslintrc": "^3.3.1",
10-
"@stylistic/eslint-plugin": "^4.4.0",
10+
"@stylistic/eslint-plugin": "^4.4.1",
1111
"@typescript-eslint/eslint-plugin": "^8.33.1",
1212
"@typescript-eslint/parser": "^8.33.1",
1313
"eslint-config-airbnb": "^19.0.4",
14-
"eslint-plugin-de-morgan": "^1.2.1",
14+
"eslint-plugin-de-morgan": "^1.3.0",
1515
"eslint-plugin-github": "^6.0.0",
1616
"eslint-plugin-import": "2.31.0",
1717
"eslint-plugin-jsx-a11y": "^6.10.2",

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
"cross-spawn": "^7.0.6",
4545
"esbuild": "0.25.2",
4646
"eslint": "^9.28.0",
47-
"eslint-import-resolver-typescript": "^4.4.2",
47+
"eslint-import-resolver-typescript": "^4.4.3",
4848
"eslint-import-resolver-webpack": "^0.13.10",
4949
"fs-extra": "^11.3.0",
5050
"globals": "^16.2.0",
@@ -56,7 +56,7 @@
5656
"oxlint": "^0.16.12",
5757
"package-json": "^10.0.1",
5858
"semver": "^7.7.2",
59-
"simple-git": "^3.27.0",
59+
"simple-git": "^3.28.0",
6060
"supertest": "^7.1.1",
6161
"supports-hyperlinks": "^4.1.0",
6262
"typescript": "5.8.3",

packages/components/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"react-dnd": "^16.0.1",
1111
"react-dnd-html5-backend": "^16.0.1",
1212
"react-toastify": "^11.0.5",
13-
"schemastery-react": "^0.1.2"
13+
"schemastery-react": "^0.1.3"
1414
},
1515
"devDependencies": {
1616
"@types/diff": "^8.0.0",
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/* eslint-disable no-await-in-loop */
2+
import { resolve } from 'path';
3+
import {
4+
existsSync, mkdir, readdir, rename, rmdir,
5+
} from 'fs-extra';
6+
import Schema from 'schemastery';
7+
import { Context } from '../context';
8+
9+
export const apply = (ctx: Context) => ctx.addScript(
10+
'fixStorage', 'Rename all files to lowercase',
11+
Schema.object({}),
12+
async () => {
13+
const config = await ctx.get('storage').status();
14+
console.log(config);
15+
if (config.type !== 'Local') throw new Error('Only local storage is supported');
16+
const dir = (config as any).dir;
17+
if (!dir) throw new Error('Storage dir not found');
18+
const files = await readdir(dir);
19+
for (const file of files) {
20+
let inner = await readdir(resolve(dir, file));
21+
if (file.toLowerCase() !== file && !existsSync(resolve(dir, file.toLowerCase()))) {
22+
await mkdir(resolve(dir, file.toLowerCase()));
23+
console.log('+: ', resolve(dir, file.toLowerCase()));
24+
}
25+
for (const f of inner) {
26+
if (resolve(dir, file, f) === resolve(dir, file.toLowerCase(), f.toLowerCase())) continue;
27+
await rename(resolve(dir, file, f), resolve(dir, file.toLowerCase(), f.toLowerCase()));
28+
console.log('R: ', resolve(dir, file, f), '->', resolve(dir, file.toLowerCase(), f.toLowerCase()));
29+
}
30+
inner = await readdir(resolve(dir, file));
31+
if (!inner.length) {
32+
await rmdir(resolve(dir, file));
33+
console.log('-: ', resolve(dir, file));
34+
}
35+
}
36+
const coll = ctx.get('db').collection('storage');
37+
while (true) {
38+
let hasItem = false;
39+
for await (const t of coll.find({ $or: [{ _id: /[A-Z]/ }, { link: /[A-Z]/ }] })) {
40+
hasItem = true;
41+
await coll.insertOne({
42+
...t,
43+
_id: t._id.toLowerCase(),
44+
...(t.link ? { link: t.link.toLowerCase() } : {}),
45+
});
46+
await coll.deleteOne({ _id: t._id });
47+
console.log('Q: ', t._id, '->', t._id.toLowerCase());
48+
}
49+
if (!hasItem) break;
50+
}
51+
return true;
52+
},
53+
);

packages/hydrooj/src/service/storage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,7 @@ class LocalStorageService {
387387
status: !this.error,
388388
error: this.error,
389389
bucket: 'Hydro',
390+
dir: this.config.path,
390391
};
391392
}
392393
}

packages/ui-default/package.json

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212
},
1313
"devDependencies": {
1414
"@blueprintjs/core": "^5.19.0",
15-
"@fontsource/dm-mono": "^5.2.5",
15+
"@fontsource/dm-mono": "^5.2.6",
1616
"@fontsource/fira-code": "^5.2.6",
17-
"@fontsource/inconsolata": "^5.2.5",
18-
"@fontsource/jetbrains-mono": "^5.2.5",
19-
"@fontsource/pt-mono": "^5.2.5",
17+
"@fontsource/inconsolata": "^5.2.6",
18+
"@fontsource/jetbrains-mono": "^5.2.6",
19+
"@fontsource/pt-mono": "^5.2.6",
2020
"@fontsource/roboto-mono": "^5.2.6",
2121
"@fontsource/source-code-pro": "^5.2.6",
22-
"@fontsource/ubuntu-mono": "^5.2.5",
22+
"@fontsource/ubuntu-mono": "^5.2.6",
2323
"@hydrooj/utils": "workspace:^",
24-
"@sentry/browser": "^9.25.1",
24+
"@sentry/browser": "^9.27.0",
2525
"@sentry/webpack-plugin": "^3.5.0",
2626
"@simplewebauthn/browser": "13.1.0",
2727
"@svgr/webpack": "^8.1.0",
@@ -50,8 +50,8 @@
5050
"clipboard": "^2.0.11",
5151
"copy-webpack-plugin": "^13.0.0",
5252
"cordis": "4.0.0-beta.5",
53-
"core-js": "^3.42.0",
54-
"core-js-compat": "^3.42.0",
53+
"core-js": "^3.43.0",
54+
"core-js-compat": "^3.43.0",
5555
"css-loader": "^7.1.2",
5656
"diff": "^8.0.2",
5757
"diff-dom": "^5.2.0",
@@ -101,7 +101,6 @@
101101
"sass": "^1.89.1",
102102
"sass-loader": "^16.0.5",
103103
"schemastery": "^3.16.1",
104-
"schemastery-react": "^0.1.2",
105104
"shorty.js": "^1.0.1",
106105
"slideout": "^1.0.1",
107106
"sticky-kit": "^1.1.3",

0 commit comments

Comments
 (0)