Browse Source

🐞 fix: 修复仓库相关的bug

Pchen. 3 months ago
parent
commit
cf4f3a9d32

+ 6 - 4
apis/Repos/DeleteRepo.js

@@ -2,6 +2,7 @@ const API = require("../../lib/API")
 const AccessControl = require("../../lib/AccessControl")
 const { BaseStdResponse } = require("../../BaseStdResponse")
 const db = require("../../plugin/DataBase/db")
+const fs = require('fs')
 
 // 删除仓库
 class DeleteRepo extends API {
@@ -25,8 +26,10 @@ class DeleteRepo extends API {
             return res.status(401).json({
                 ...BaseStdResponse.ACCESS_DENIED
             })
+        let sql = 'SELECT path FROM repos WHRER create_user = ? AND id = ?'
+        let r = await db.query(sql, [uuid, id])
 
-        let sql = 'DELETE FROM repos WHERE create_user = ? AND id = ?'
+        sql = 'DELETE FROM repos WHERE create_user = ? AND id = ?'
 
         let result = await db.query(sql, [uuid, id])
 
@@ -35,9 +38,8 @@ class DeleteRepo extends API {
                 ...BaseStdResponse.OK
             })
 
-            // TODO 删除仓库
-            
-
+            if (r && r[0].path)
+                fs.rm(r[0].path, { recursive: true, force: true }, (err) => { })
         } else {
             res.json({ ...BaseStdResponse.ERR, endpoint: 7894378, msg: '删除仓库失败!' })
         }

+ 8 - 2
apis/Repos/GetRepoLog.js

@@ -35,10 +35,16 @@ class GetRepoLog extends API {
                 msg: '未找到仓库'
             })
 
+        if (r.state !== 1 || !r[0].path === 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库未成功克隆!'
+            })
+
         try {
             const clone_url = core_url + '/git/log'
             const res = await axios.post(clone_url, { uuid, repo_url: r[0].url })
-            if(!res || !res.data || res.data.code !== 200)
+            if (!res || !res.data || res.data.code !== 200)
                 return res.json({
                     ...BaseStdResponse.ERR,
                     msg: '获取仓库历史失败!'
@@ -47,7 +53,7 @@ class GetRepoLog extends API {
                 ...BaseStdResponse.OK,
                 data: res.data
             })
-    
+
         } catch (error) {
             this.logger.error('获取仓库历史失败!' + error.stack)
         }

+ 8 - 2
apis/Repos/GetRepoStatus.js

@@ -35,10 +35,16 @@ class GetRepoStatus extends API {
                 msg: '未找到仓库'
             })
 
+        if (r.state !== 1 || !r[0].path === 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库未成功克隆!'
+            })
+
         try {
             const clone_url = core_url + '/git/status'
             const res = await axios.post(clone_url, { uuid, repo_url: r[0].url })
-            if(!res || !res.data)
+            if (!res || !res.data)
                 return res.json({
                     ...BaseStdResponse.ERR,
                     msg: '获取仓库状态失败!'
@@ -47,7 +53,7 @@ class GetRepoStatus extends API {
                 ...BaseStdResponse.OK,
                 data: res.data
             })
-    
+
         } catch (error) {
             this.logger.error('获取仓库状态失败!' + error.stack)
         }

+ 8 - 2
apis/Repos/GitCodeStats.js

@@ -97,12 +97,18 @@ class gitCodeStats extends API {
         let sql = 'SELECT path FROM repos WHERE create_user = ? AND id = ?'
 
         let r = await db.query(sql, [uuid, id])
-        if (r && r.length === 0)
+        if (r || r.length === 0)
             return res.json({
                 ...BaseStdResponse.ERR,
                 msg: '未找到仓库'
             })
 
+        if (r.state !== 1 || !r[0].path === 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库未成功克隆!'
+            })
+
         const git = simpleGit(r[0].path)
         const files = await git.raw(["ls-files"]) // 获取所有 Git 跟踪的文件
         const fileList = files.split("\n").map(f => f.trim()).filter(f => f)
@@ -111,7 +117,7 @@ class gitCodeStats extends API {
         let languageStats = {}
 
         for (const file of fileList) {
-            const fullPath = path.join(repoPath, file)
+            const fullPath = path.join(r[0].path, file)
             const ext = path.extname(file)
             const language = Object.keys(this.languageExtensions).find(lang =>
                 this.languageExtensions[lang].includes(ext)

+ 13 - 7
apis/Repos/GitContributors.js

@@ -18,19 +18,19 @@ class GitContributors extends API {
         const hash = crypto.createHash("md5").update(email.trim().toLowerCase()).digest("hex")
         return `https://gravatar.loli.net/avatar/${hash}?s=512&r=pg`
     }
-    
+
     async analyzeGitContributors(repoPath) {
         try {
             const git = simpleGit()
             await git.cwd(repoPath)
-    
+
             // 获取提交日志,包括作者姓名和邮箱
             const logs = await git.raw([
                 "log",
                 "--format=%an <%ae>",
                 "--shortstat"
             ])
-    
+
             const lines = logs.split("\n").map(l => l.trim()).filter(l => l)
             let contributors = {}
             let currentAuthor = null
@@ -59,17 +59,17 @@ class GitContributors extends API {
                     }
                 }
             }
-    
+
             const sortedContributors = Object.values(contributors)
                 .sort((a, b) => b.linesChanged - a.linesChanged || b.commits - a.commits)
-    
+
             return sortedContributors
         } catch (error) {
             console.error("获取仓库开发者失败:", error)
             throw new Error("获取仓库开发者失败")
         }
     }
-    
+
     async onRequest(req, res) {
         let { uuid, session, id } = req.query
 
@@ -92,13 +92,19 @@ class GitContributors extends API {
                 msg: '未找到仓库'
             })
 
+        if (r.state !== 1 || !r[0].path === 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库未成功克隆!'
+            })
+
         try {
             const contributors = await this.analyzeGitContributors(r[0].path)
             res.json({
                 ...BaseStdResponse.OK,
                 data: contributors
             })
-    
+
         } catch (error) {
             this.logger.error('获取仓库开发者失败!' + error.stack)
         }