zen-gitsync 2.15.28 → 2.15.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (25) hide show
  1. package/package.json +1 -1
  2. package/src/ui/public/assets/{AppVersionBadge-CUO099sE.js → AppVersionBadge-MPPQqL7V.js} +2 -2
  3. package/src/ui/public/assets/{BranchSelector-DMxUc9HU.js → BranchSelector-Ctq99M1X.js} +1 -1
  4. package/src/ui/public/assets/{CommitForm-CKyV3ggx.js → CommitForm-yXk9nk_A.js} +1 -1
  5. package/src/ui/public/assets/{CommonDialog-BpWM7_Re.js → CommonDialog-Dcnbu_Wk.js} +1 -1
  6. package/src/ui/public/assets/{EditorView-a3s6LVOs.js → EditorView-DD8_CA7i.js} +0 -0
  7. package/src/ui/public/assets/{FlowExecutionViewer-DGoNQ5Fn.js → FlowExecutionViewer-B5oIqw89.js} +1 -1
  8. package/src/ui/public/assets/{FlowOrchestrationWorkspace-DnOEJHE4.js → FlowOrchestrationWorkspace-cYHpXJ8K.js} +1 -1
  9. package/src/ui/public/assets/{LogList-CYSsXcC9.js → LogList-C_Hv2acT.js} +1 -1
  10. package/src/ui/public/assets/{MindmapView-nEMaAGwo.js → MindmapView-CrbORzwT.js} +1 -1
  11. package/src/ui/public/assets/{MonitorView-BbJ_H7iz.js → MonitorView-D8faN1A5.js} +1 -1
  12. package/src/ui/public/assets/{ProjectStartupButton-CCiy2je-.js → ProjectStartupButton-CAAsmjvK.js} +1 -1
  13. package/src/ui/public/assets/{RemoteRepoCard-D8PWonfb.js → RemoteRepoCard-DspT0BDy.js} +1 -1
  14. package/src/ui/public/assets/{SourceMapView-CpOxsRxc.js → SourceMapView-ChVXErpw.js} +1 -1
  15. package/src/ui/public/assets/{SvgIcon-B1a3t2jD.js → SvgIcon-Bv1x5mnR.js} +1 -1
  16. package/src/ui/public/assets/{UserInputNode-BfpbwTCM.js → UserInputNode-B6xPuHIP.js} +1 -1
  17. package/src/ui/public/assets/{WorkbenchView-CzO3vbZ3.js → WorkbenchView-IIUWicLU.js} +1 -1
  18. package/src/ui/public/assets/_plugin-vue_export-helper-DKKtrzpc.js +15 -0
  19. package/src/ui/public/assets/{configStore-I4V72XeB.js → configStore-w8uC-_kt.js} +1 -1
  20. package/src/ui/public/assets/index-IlElRGyK.css +1 -0
  21. package/src/ui/public/assets/{index-CyITqHxH.js → index-Z9yhmAQK.js} +10 -10
  22. package/src/ui/public/index.html +6 -6
  23. package/src/ui/server/routes/gitOps.js +44 -0
  24. package/src/ui/public/assets/_plugin-vue_export-helper-DBBWeTlf.js +0 -15
  25. package/src/ui/public/assets/index-K6zqo5Mq.css +0 -1
@@ -10,16 +10,16 @@
10
10
  <link rel="preconnect" href="https://fonts.googleapis.com" />
11
11
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
12
12
  <link href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400&family=JetBrains+Mono:wght@400;500&display=swap" rel="stylesheet" />
13
- <script type="module" crossorigin src="/assets/index-CyITqHxH.js"></script>
13
+ <script type="module" crossorigin src="/assets/index-Z9yhmAQK.js"></script>
14
14
  <link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-DAXXjFlN.js">
15
15
  <link rel="modulepreload" crossorigin href="/assets/element-plus-BAcS68uS.js">
16
16
  <link rel="modulepreload" crossorigin href="/assets/monaco-BvgtFLbw.js">
17
17
  <link rel="modulepreload" crossorigin href="/assets/vendor-BteTDIoK.js">
18
- <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-DBBWeTlf.js">
19
- <link rel="modulepreload" crossorigin href="/assets/SvgIcon-B1a3t2jD.js">
20
- <link rel="modulepreload" crossorigin href="/assets/CommonDialog-BpWM7_Re.js">
18
+ <link rel="modulepreload" crossorigin href="/assets/_plugin-vue_export-helper-DKKtrzpc.js">
19
+ <link rel="modulepreload" crossorigin href="/assets/SvgIcon-Bv1x5mnR.js">
20
+ <link rel="modulepreload" crossorigin href="/assets/CommonDialog-Dcnbu_Wk.js">
21
21
  <link rel="modulepreload" crossorigin href="/assets/socket-io-BC2cap_-.js">
22
- <link rel="modulepreload" crossorigin href="/assets/configStore-I4V72XeB.js">
22
+ <link rel="modulepreload" crossorigin href="/assets/configStore-w8uC-_kt.js">
23
23
  <link rel="modulepreload" crossorigin href="/assets/vue-flow-CtZ_ZWKZ.js">
24
24
  <link rel="stylesheet" crossorigin href="/assets/element-plus-CQrjg9us.css">
25
25
  <link rel="stylesheet" crossorigin href="/assets/monaco-B2lPvkrc.css">
@@ -27,7 +27,7 @@
27
27
  <link rel="stylesheet" crossorigin href="/assets/SvgIcon-BQ6bR7l0.css">
28
28
  <link rel="stylesheet" crossorigin href="/assets/CommonDialog-Cyh3xu0p.css">
29
29
  <link rel="stylesheet" crossorigin href="/assets/vue-flow-CavUTEzp.css">
30
- <link rel="stylesheet" crossorigin href="/assets/index-K6zqo5Mq.css">
30
+ <link rel="stylesheet" crossorigin href="/assets/index-IlElRGyK.css">
31
31
  </head>
32
32
  <body>
33
33
  <div id="app"></div>
@@ -190,6 +190,19 @@ export function registerGitOpsRoutes({
190
190
  // 推送更改
191
191
  app.post('/api/push', async (req, res) => {
192
192
  try {
193
+ // 防御性检查:空仓库直接返回明确错误,避免 git push 报
194
+ // "src refspec master does not match any" 让用户摸不着头脑。
195
+ const headCheck = await execGitCommand(
196
+ ['rev-parse', '--verify', 'HEAD'],
197
+ { ignoreError: true, log: false }
198
+ );
199
+ if (!headCheck.stdout || !headCheck.stdout.trim()) {
200
+ return res.status(400).json({
201
+ success: false,
202
+ error: '当前仓库没有任何提交,请先在左侧暂存并提交至少一个文件后再推送。',
203
+ errorCode: 'EMPTY_REPO'
204
+ });
205
+ }
193
206
  const { stdout } = await execGitCommand(['push']);
194
207
 
195
208
  // 推送成功后,设置推送状态标记
@@ -213,6 +226,21 @@ export function registerGitOpsRoutes({
213
226
  if (!branch || typeof branch !== 'string') {
214
227
  return res.status(400).json({ success: false, error: '缺少 branch 参数' });
215
228
  }
229
+ // 防御性检查:空仓库(没有任何 commit)直接返回明确错误,
230
+ // 避免 git push -u 报 "src refspec master does not match any" 让用户摸不着头脑。
231
+ // git rev-parse --verify HEAD 在空仓库下返回非零退出 → execGitCommand 用 ignoreError
232
+ // 吞掉异常并 resolve({stdout:''}),用空 stdout 判定空仓库。
233
+ const headCheck = await execGitCommand(
234
+ ['rev-parse', '--verify', 'HEAD'],
235
+ { ignoreError: true, log: false }
236
+ );
237
+ if (!headCheck.stdout || !headCheck.stdout.trim()) {
238
+ return res.status(400).json({
239
+ success: false,
240
+ error: '当前仓库没有任何提交,请先在左侧暂存并提交至少一个文件后再推送。',
241
+ errorCode: 'EMPTY_REPO'
242
+ });
243
+ }
216
244
  const { stdout } = await execGitCommand(['push', '-u', 'origin', branch]);
217
245
  setRecentPushStatus({
218
246
  justPushed: true,
@@ -289,6 +317,22 @@ export function registerGitOpsRoutes({
289
317
  workDir = value || process.cwd();
290
318
  }
291
319
 
320
+ // 防御性检查:空仓库直接返回 EMPTY_REPO,避免 git push 报
321
+ // "src refspec master does not match any" 走完整个 spawn 流程。
322
+ // 注意:SSE 通道一旦 flushHeaders 就无法再发普通 JSON,只能继续用 SSE 协议。
323
+ const headCheck = await execGitCommand(
324
+ ['rev-parse', '--verify', 'HEAD'],
325
+ { ignoreError: true, log: false }
326
+ );
327
+ if (!headCheck.stdout || !headCheck.stdout.trim()) {
328
+ sendProgress({
329
+ type: 'error',
330
+ error: '当前仓库没有任何提交,请先在左侧暂存并提交至少一个文件后再推送。',
331
+ errorCode: 'EMPTY_REPO'
332
+ });
333
+ return res.end();
334
+ }
335
+
292
336
  logger.info('开始推送,工作目录:', workDir);
293
337
 
294
338
  // 记录开始时间