Browse Source

✨ feat: 新增拉取更新接口

Pchen. 2 months ago
parent
commit
ea03e3d450
2 changed files with 64 additions and 1 deletions
  1. 1 1
      apis/GitActions/ChangeBranch.js
  2. 63 0
      apis/GitActions/GitPull.js

+ 1 - 1
apis/GitActions/ChangeBranch.js

@@ -15,7 +15,7 @@ class ChangeBranch extends API {
     async onRequest(req, res) {
         let { uuid, session, id, branch } = req.query
 
-        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
+        if ([uuid, session, id, branch ].some(value => value === '' || value === null || value === undefined))
             return res.json({
                 ...BaseStdResponse.MISSING_PARAMETER
             })

+ 63 - 0
apis/GitActions/GitPull.js

@@ -0,0 +1,63 @@
+const API = require("../../lib/API")
+const AccessControl = require("../../lib/AccessControl")
+const { BaseStdResponse } = require("../../BaseStdResponse")
+const db = require("../../plugin/DataBase/db")
+const simpleGit = require('simple-git')
+
+class GitPull extends API {
+    constructor() {
+        super()
+
+        this.setMethod("GET")
+        this.setPath("/GitActions/GitPull")
+    }
+
+    async onRequest(req, res) {
+        let { uuid, session, id } = req.query
+
+        if ([uuid, session, id].some(value => value === '' || value === null || value === undefined))
+            return res.json({
+                ...BaseStdResponse.MISSING_PARAMETER
+            })
+
+        // 检查 session
+        if (!await AccessControl.checkSession(uuid, session))
+            return res.status(401).json({
+                ...BaseStdResponse.ACCESS_DENIED
+            })
+
+        let sql = 'SELECT state, path, url FROM repos WHERE create_user = ? AND id = ?'
+        let r = await db.query(sql, [uuid, id])
+        if (!r || r.length === 0)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '未找到仓库'
+            })
+
+        if (r[0].state !== 1 || !r[0].path)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '仓库未成功克隆!'
+            })
+
+        try {
+            const git = simpleGit()
+            await git.cwd(r[0].path)
+            await git.pull('origin')
+
+            res.json({
+                ...BaseStdResponse.OK
+            })
+
+        } catch (error) {
+            this.logger.error('拉取更新失败!' + error.stack)
+            return res.json({
+                ...BaseStdResponse.ERR,
+                msg: '拉取更新失败!'
+            })
+        }
+
+    }
+}
+
+module.exports.GitPull = GitPull