Browse Source

github repo for the project

liuyuqi-dellpc 2 years ago
parent
commit
9d8692df6a
8 changed files with 130 additions and 39 deletions
  1. 18 5
      conf/config.yml
  2. 4 5
      repo_sync/base_repo.py
  3. 26 5
      repo_sync/coding_repo.py
  4. 23 15
      repo_sync/github_repo.py
  5. 41 0
      repo_sync/gitlab_repo.py
  6. 13 9
      repo_sync/sync_utils.py
  7. 1 0
      requirements.txt
  8. 4 0
      test/url.py

+ 18 - 5
conf/config.yml

@@ -1,6 +1,19 @@
-token:
-  github: xx1
-  gitlab: xx2
-  coding: xx3
-  gitee: xx4
+zhizhou:
+  token: xx1
+  user: lyq
 
+github:
+  token: xx1
+  user: jianboy
+
+coding:
+  token: xx2
+  user: heavyrain/python-note
+
+gitlab:
+  token: xx3
+  user: jianboy
+
+gitee:
+  token: xx4
+  user: jianboy

+ 4 - 5
repo_sync/base_repo.py

@@ -12,13 +12,12 @@ class BaseRepo(object):
     '''
     Repo class
     '''
-    def __init__(self, repo_name, repo_url, repo_branch, repo_path, repo_type, debug=False):
+    def __init__(self, user_name, repo_name, logger, debug=False):
         self.sess= requests.Session()
+        self.user_name= user_name
         self.repo_name = repo_name
-        self.repo_url = repo_url
-        self.repo_branch = repo_branch
-        self.repo_path = repo_path
-        self.repo_type = repo_type
+        self.repo_url = "https://github.com"
+        self.logger = logger
 
     def sync(self):
         '''

+ 26 - 5
repo_sync/coding_repo.py

@@ -8,11 +8,32 @@
 '''
 
 from repo_sync.base_repo import BaseRepo
-
+import logging
+import os
 class CodingRepo(BaseRepo):
     
-    def __init__(self):
-        pass
-    
+    def __init__(self, user_name, repo_name, logger : logging.Logger):
+        super(CodingRepo, self).__init__(user_name, repo_name,logger)
+        
     def sync(self):
-        pass
+        '''
+        sync repo
+        '''
+        with open("conf/config.yml", "r") as f:
+            config = yaml.load(f, Loader=yaml.FullLoader)
+        zUser = config["zhizhou"]["user"]
+        if zUser == self.user_name:
+            self.repo_url = "hhttps://e.coding.net/"+config["coding"]["user"]+"/"+self.repo_name+".git"
+            self.logger.info("sync repo: %s", self.repo_name)
+            self.sess.headers={
+                "Authorization": "token "+config["coding"]["token"],
+            }
+            if self.repos==None:
+                self.repos = self.sess.get("https://e.coding.net/api/user/projects").json()
+            # if repo is not exist, create it
+            if self.repo_name not in [repo["name"] for repo in self.repos]:
+                self.logger.info("create repo: %s", self.repo_name)
+                self.sess.post("https://e.coding.net/api/user/projects", json={"name": self.repo_name})
+            os.system("git push %s %s" % (self.repo_url, self.repo_path))
+        else:
+            self.logger.info("not sync repo: %s", self.repo_name)

+ 23 - 15
repo_sync/github_repo.py

@@ -9,6 +9,7 @@
 import os,sys,re
 import logging
 import argparse
+import yaml
 
 from repo_sync.base_repo import BaseRepo
 
@@ -16,24 +17,31 @@ class GitHubRepo(BaseRepo):
     '''
     GitHubRepo class
     '''
-    def __init__(self, repo_name, repo_url, repo_branch, repo_path, repo_type):
-        super(GitHubRepo, self).__init__(repo_name, repo_url, repo_branch, repo_path, repo_type)
-        self.repo_type = 'github'
-        self.repos=None
+    def __init__(self, user_name, repo_name, logger : logging.Logger):
+        super(GitHubRepo, self).__init__(user_name, repo_name,logger)
         
     def sync(self):
         '''
         sync repo
         '''
-        self.logger.info("sync repo: %s", self.repo_name)
-        self.sess.headers={
-            "Authorization": "token   6b0b9"
-        }
-        if self.repos==None:
-            self.repos = self.sess.get("https://api.github.com/user/repos").json()
-        # if repo is not exist, create it
-        if self.repo_name not in [repo["name"] for repo in self.repos]:
-            self.logger.info("create repo: %s", self.repo_name)
-            self.sess.post("https://api.github.com/user/repos", json={"name": self.repo_name})
+        # read conf/config.yml
+        with open("conf/config.yml", "r") as f:
+            config = yaml.load(f, Loader=yaml.FullLoader)
+        # get github token
+        zUser = config["zhizhou"]["user"]
+        if zUser == self.user_name:
+            self.repo_url = "https://github.com"+"/"+config["github"]["user"]+"/"+self.repo_name+".git"
+            self.logger.info("sync repo: %s", self.repo_name)
+            self.sess.headers={
+                "Authorization": "token "+config["github"]["token"],
+            }
+            if self.repos==None:
+                self.repos = self.sess.get("https://api.github.com/user/repos").json()
+            # if repo is not exist, create it
+            if self.repo_name not in [repo["name"] for repo in self.repos]:
+                self.logger.info("create repo: %s", self.repo_name)
+                self.sess.post("https://api.github.com/user/repos", json={"name": self.repo_name})
 
-        os.system("git push %s %s" % (self.repo_url, self.repo_path))
+            os.system("git push %s %s" % (self.repo_url, self.repo_path))
+        else:
+            self.logger.info("not sync repo: %s", self.repo_name)

+ 41 - 0
repo_sync/gitlab_repo.py

@@ -0,0 +1,41 @@
+#!/usr/bin/env python
+# -*- encoding: utf-8 -*-
+'''
+@Contact :   liuyuqi.gov@msn.cn
+@Time    :   2023/04/27 04:23:34
+@License :   Copyright © 2017-2022 liuyuqi. All Rights Reserved.
+@Desc    :   github repo
+'''
+from repo_sync.base_repo import BaseRepo
+import logging
+import yaml
+
+class GitlabRepo(BaseRepo):
+    '''
+    GitlabRepo class
+    '''
+    def __init__(self, user_name, repo_name, logger : logging.Logger):
+        super(GitlabRepo, self).__init__(user_name, repo_name,logger)
+    
+    def sync(self):
+        ''' sync repo '''
+        # read conf/config.yml
+        with open("conf/config.yml", "r") as f:
+            config = yaml.load(f, Loader=yaml.FullLoader)
+        # get github token
+        zUser = config["zhizhou"]["user"]
+        if zUser == self.user_name:
+            self.repo_url="https://gitlab.com/"+config["gitlab"]["user"]+"/"+self.repo_name+".git"
+            self.logger.info("sync repo: %s", self.repo_name)
+            self.sess.headers={
+                "PRIVATE-TOKEN": config["gitlab"]["token"],
+            }
+            if self.repos==None:
+                self.repos = self.sess.get("https://gitlab.com/api/v4/projects").json()
+            # if repo is not exist, create it
+            if self.repo_name not in [repo["name"] for repo in self.repos]:
+                self.logger.info("create repo: %s", self.repo_name)
+                self.sess.post("https://gitlab.com/api/v4/projects", json={"name": self.repo_name})
+            os.system("git push %s %s" % (self.repo_url, self.repo_path))
+        else:
+            self.logger.info("not sync repo: %s", self.repo_name)

+ 13 - 9
repo_sync/sync_utils.py

@@ -34,18 +34,22 @@ class SyncUtils:
         with open("repos.text", "r") as f:
             repos = f.readlines()
         for repo in repos:
-            
-            if not os.path.exists(repo):
-                self.logger.info("clone repo: %s", repo["name"])
-                os.system("git clone %s" % repo["url"])
+            repo_name = repo.split("/")[-1]
+            user_name=repo.split("/")[-2]
+            if not os.path.exists(user_name):
+                os.mkdir(user_name)
 
-            self.logger.info("sync repo: %s", repo["name"])
-            repo = None
+            if not os.path.exists(os.path.join(user_name,repo_name)):
+                self.logger.info("clone repo: %s", repo_name)
+                os.system("git clone %s" % repo_name)
+
+            self.logger.info("sync repo: %s", repo_name)
+            repoModel = None
             if self.args.type == "github":
-                repo = GitHubRepo(self.args.repository, "", "", "", "")
+                repoModel = GitHubRepo(user_name, repo_name, self.logger)
             elif self.args.type == "coding":
-                repo = CodingRepo(self.args.repository, "", "", "", "")
-            repo.sync()
+                repoModel = CodingRepo(user_name, repo_name)
+            repoModel.sync()
 
     def init_logger(self, debug:bool):
         '''

+ 1 - 0
requirements.txt

@@ -0,0 +1 @@
+requests==2.27.1

+ 4 - 0
test/url.py

@@ -0,0 +1,4 @@
+url='https://git.yoqi.me/lyq/repo_sync'
+
+url=url.split('/')[-2]
+print(url)