diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000..15a15b2
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/giteasy.iml b/.idea/giteasy.iml
index 6711606..496be93 100644
--- a/.idea/giteasy.iml
+++ b/.idea/giteasy.iml
@@ -1,8 +1,10 @@
-
-
+
+
+
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 182caa1..02116a9 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -1,7 +1,17 @@
-
+
+
+
+
+
+
+
+
+
+
+
@@ -9,52 +19,32 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
@@ -63,13 +53,19 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
@@ -89,23 +85,22 @@
self.remotes
+
+
+
-
-
-
- true
- DEFINITION_ORDER
-
-
+
@@ -115,7 +110,6 @@
-
@@ -123,13 +117,19 @@
+
+
+
+
+
+
@@ -137,6 +137,8 @@
+
+
@@ -152,7 +154,7 @@
-
+
@@ -160,13 +162,13 @@
-
+
-
+
@@ -197,37 +199,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -239,31 +210,36 @@
1552027430305
+
+
+
+
-
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
@@ -271,9 +247,6 @@
-
-
-
@@ -286,30 +259,29 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
-
+
-
-
+
+
-
-
-
-
+
diff --git a/bin/python b/bin/python
deleted file mode 100755
index 41d2f67..0000000
Binary files a/bin/python and /dev/null differ
diff --git a/bin/python3 b/bin/python3
deleted file mode 100755
index 41d2f67..0000000
Binary files a/bin/python3 and /dev/null differ
diff --git a/git.py b/git.py
new file mode 100644
index 0000000..0058867
--- /dev/null
+++ b/git.py
@@ -0,0 +1,198 @@
+import re
+import os
+import ssh
+
+
+class Git(ssh.SSH):
+ projects = {}
+ projects_list = []
+ remotes = {}
+
+ def __init__(self, hostname, path, user, passwd):
+ super().__init__(hostname, path, user, passwd)
+ self.base_path = [False]
+ self.connect(5)
+ self.local_path = None
+ self.fix_cmd = None
+ self.fix_name = None
+ self.git_user = None
+ self.git_email = None
+
+ def global_init(self, git_user, git_email):
+ self.git_user = git_user
+ self.git_email = git_email
+ cmd = "git config --global user.email \"{0}\";".format(git_email)
+ cmd += "git config --global user.name \"{0}\";".format(git_user)
+ stdout, stderr = self.run(cmd)
+ if self.check_error(stderr):
+ print("Global setting successful.")
+ else:
+ print(stderr)
+ raise ValueError("Args Abnormal")
+
+ def base_init(self):
+ stdout, stderr = self.run("ls {}".format(self.path))
+ if self.check_error(stderr):
+ if "giteasy\n" in stdout:
+ print("Directory already found.")
+ else:
+ stdout, stderr = self.run("mkdir {0}/{1}".format(self.path, "giteasy"))
+ if self.check_error(stderr):
+ print("Create directory.")
+ else:
+ raise ValueError(stderr)
+ self.base_path = [True, "{0}/{1}".format(self.path, "giteasy")]
+ else:
+ raise ValueError("Home Path Abnormal")
+
+ def create_project(self, name):
+ if self.base_path[0]:
+ stdout, stderr = self.run("mkdir {0}/{1}".format(self.base_path[1], name))
+ if self.check_error(stderr):
+ print("Succeed In Making Directory.")
+ self.projects[name] = {"path": "{0}/{1}".format(self.base_path[1], name), "branch": []}
+ cmd = "cd {0};".format(self.projects[name]["path"])
+ cmd += "git init;"
+ cmd += "touch ReadME.md;"
+ cmd += "git add *;"
+ cmd += "git commit --message=init;"
+ stdout, stderr = self.run(cmd)
+ if self.check_error(stderr):
+ print("Succeed In Getting Repository.")
+ else:
+ print(stderr)
+ raise ValueError("Target Path Abnormal")
+ else:
+ raise ValueError("Base Path Abnormal")
+ else:
+ raise UnboundLocalError("Init Base First")
+
+ def init_project_local(self, name):
+ cmd = self.fix_cmd
+ cmd += "mkdir {0};".format(name)
+ cmd += "git init;"
+ cmd = "git config --global user.email \"{0}\";".format(self.git_email)
+ cmd += "git config --global user.name \"{0}\";".format(self.git_user)
+ os.popen(cmd)
+
+ def update_projects(self):
+ if self.base_path[0]:
+ stdout, stderr = self.run("ls {0}".format(self.base_path[1]))
+ if self.check_error(stderr):
+ reform = re.compile("\w+")
+ for project in stdout:
+ print("PROJECT", project)
+ project_name = reform.match(project).string.strip('\n')
+ self.projects[project_name] = {"path": "{0}/{1}".format(self.base_path[1], project_name),
+ "branch": []}
+ else:
+ raise ValueError("Base Path Abnormal")
+
+ self.list_projects()
+
+ else:
+ raise UnboundLocalError("Init Base First")
+
+ def list_projects(self):
+ for project in self.projects.keys():
+ self.projects_list.append(project)
+ print(project)
+
+ def set_local(self, path):
+ self.remotes = {}
+ self.local_path = path
+ os.chdir(self.local_path)
+
+ def add_remote(self, name="origin"):
+ os.popen(
+ "git remote add {3} ssh://{0}@{1}:{2}/{4}/.git".format(self.user, self.hostname, self.base_path[1], name,
+ self.fix_name))
+ self.remotes[name] = {"name": name,
+ "url": "ssh://{0}@{1}:{2}/{3}/.git".format(self.user, self.hostname, self.base_path[1],
+ self.fix_name)}
+
+ def fetch_remote(self, name):
+ if name in self.remotes.keys():
+ os.popen("git fetch {0}".format(name))
+
+ def get_remote(self):
+ ret_code = re.compile(r"[\t, ]")
+ for remote in os.popen("git remote -v").readlines():
+ results = ret_code.split(remote)
+ for item in results:
+ if item[0] not in self.remotes.keys():
+ self.remotes[item[0]] = {"name": item[0], "url": item[1]}
+
+ def push_remote(self, name, branch):
+ if branch in self.projects[self.fix_name]["branch"] and name in self.remotes.keys():
+ os.popen("git push {0} {1}".format(name, branch))
+ else:
+ raise ValueError("Branch or Name Abnormal")
+
+ def pull_remote(self, name, branch):
+ if name in self.remotes.keys():
+ os.popen("git pull {0} {1}".format(name, branch))
+ else:
+ raise ValueError("Remote Error")
+
+ def fix(self, name):
+ if name in self.projects_list:
+ self.fix_name = name
+ stdout, stderr = self.run("cd {0}".format(self.projects[name]["path"]))
+ if self.check_error(stderr):
+ print("Fixed.")
+ self.fix_cmd = "cd {0}".format(self.projects[name]["path"]) + ";"
+ else:
+ raise ValueError("Project Path Abnormal")
+
+ def commit(self, message):
+ if self.base_path[0]:
+ stdout, stderr = self.run(self.fix_cmd + "git commit --message={0}".format(message))
+ if self.check_error(stderr):
+ print(stdout)
+ else:
+ raise ValueError(stderr)
+ else:
+ raise UnboundLocalError("Init Base First")
+
+ def get_branch(self):
+ if self.base_path[0] and self.fix_name is None:
+ stdout, stderr = self.run(self.fix_cmd + "git branch")
+ if self.check_error(stderr):
+ reform = re.compile("\w+")
+ for branch in stdout:
+ branch_name = reform.search("*master").group().strip('\n')
+ self.projects[self.fix_name]["branch"].append(branch_name)
+
+ if '*' in str(branch):
+ self.projects[self.fix_name]["active_branch"] = branch_name
+ else:
+ print(stderr)
+ raise ValueError("Command Error")
+
+ def list_branch(self):
+ for project in self.projects.items():
+ for branch in project[1]["branch"]:
+ if branch == project[1]["active_branch"]:
+ print("(*)", branch)
+ else:
+ print(" ", branch)
+
+
+if __name__ == "__main__":
+ compute = Git("compute.bktus.com", "/home/git", "git", "123456")
+ compute.global_init(git_user="saturneric", git_email="eric.bktu@gmail.com")
+ compute.base_init()
+ # compute.create_project("lcs")
+ compute.update_projects()
+ compute.list_projects()
+ compute.fix("lcs")
+
+ # compute.get_branch("lcs")
+ compute.set_local("C:/Users/Saturneric/Documents/Code/")
+ compute.init_project_local("test")
+ # compute.add_remote();
+ # compute.get_remote()
+ # compute.get_branch()
+ # compute.list_branch()
+ print(compute.projects)
diff --git a/keygen.py b/keygen.py
new file mode 100644
index 0000000..4c4a1f4
--- /dev/null
+++ b/keygen.py
@@ -0,0 +1,31 @@
+import git
+import subprocess
+import os
+import ssh
+
+
+class Key(ssh.SSH):
+ def __init__(self,hostname, path, user, password=None, ssh_key=False):
+ super().__init__(hostname=hostname, path=path, user=user, passwd=password, ssh_key=ssh_key)
+ self.connect(5)
+ self.pub_key = None
+ self.keygen = None
+
+ def add_key(self):
+ self.run("echo \"{0}\" >> ~/.ssh/authorized_keys".format(self.pub_key))
+
+ def create_key(self):
+ ret_code = subprocess.Popen(["ssh-keygen", "-b 4096", "-t rsa"], shell=True,
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ stdout, stderr = ret_code.communicate(input=b"\ny \n \n \n")
+ self.get_key()
+
+ def get_key(self):
+ self.pub_key = os.popen("cat ~/.ssh/id_rsa.pub").read()
+
+
+if __name__ == "__main__":
+ new_key = Key("compute.bktus.com", "/home/git", "git", "123456", ssh_key=False)
+ # new_key.create_key()
+ # new_key.get_key()
+ # new_key.add_key()
diff --git a/server.py b/server.py
deleted file mode 100644
index 1649ced..0000000
--- a/server.py
+++ /dev/null
@@ -1,219 +0,0 @@
-import paramiko
-import re
-import os
-
-class ssh(object):
- ssh = paramiko.SSHClient();
- def __init__(self, hostname, path, user, passwd=None, sshkey=False):
- self.hostname = hostname;
- self.path = path;
- self.user = user;
- self.sshkey = sshkey;
-
- if sshkey == True:
- self.passwd = None;
- self.key = paramiko.RSAKey.from_private_key_file('/Users/huyibing/.ssh/id_rsa')
- else:
- self.passwd = passwd;
-
- self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
-
- def close(self):
- self.ssh.close();
-
- def run(self, cmd):
- print("CMD:", cmd)
- stdin, stdout, stderr = self.ssh.exec_command(cmd)
-
- stdout = list(stdout);
- stderr = list(stderr);
- return stdout, stderr;
-
- def check_error(self, stderr):
- if len(stderr) == 0:
- return True
- else:
- return False
-
- def connect(self,timeout):
- if self.sshkey:
- self.ssh.connect(hostname=self.hostname, port=22, username=self.user, pkey=self.key, timeout=timeout);
- else:
- self.ssh.connect(hostname=self.hostname, port=22, username=self.user, password=self.passwd, timeout=timeout);
-
- def __del__(self):
- self.close();
-
-class git(ssh):
- projects = {}
- projects_list = []
- remotes = {}
- fix_name = None;
-
- def __init__(self, hostname, path, user, passwd):
- super().__init__(hostname, path, user, passwd);
- self.base_path = [False];
- self.connect(5);
-
-
-
- def globalinit(self,git_user,git_email):
- cmd = "git config --global user.email \"{0}\";".format(git_email);
- cmd += "git config --global user.name \"{0}\";".format(git_user);
- stdout, stderr = self.run(cmd)
- if self.check_error(stderr):
- print("Global setting successful.")
- else:
- print(stderr)
- raise ValueError("Args Abnormal")
-
-
- def baseinit(self):
- stdout, stderr = self.run("ls {}".format(self.path))
- if self.check_error(stderr):
- if "giteasy\n" in stdout:
- print("Directory already found.")
- else:
- stdout, stderr = self.run("mkdir {0}/{1}".format(self.path, "giteasy"))
- print("Create directory.")
- self.base_path = [True,"{0}/{1}".format(self.path, "giteasy")]
- else:
- raise ValueError("Home Path Abnormal")
-
- def create_project(self,name):
- if self.base_path[0]:
- stdout, stderr = self.run("mkdir {0}/{1}".format(self.base_path[1],name))
- if self.check_error(stderr):
- print("Succeed In Making Directory.")
- self.projects[name] = {"path" : "{0}/{1}".format(self.base_path[1],name), "branch" : []}
- cmd = "cd {0};".format(self.projects[name]["path"]);
- cmd += "git init;";
- cmd += "touch ReadME.md;";
- cmd += "git add *;"
- cmd += "git commit --message=init;";
- stdout, stderr = self.run(cmd)
- if self.check_error(stderr):
- print("Succeed In Getting Repository.")
- else:
- print(stderr)
- raise ValueError("Target Path Abnormal")
- else:
- raise ValueError("Base Path Abnormal")
- else:
- raise UnboundLocalError("Init Base First")
-
- def update_projects(self):
- if self.base_path[0]:
- stdout, stderr = self.run("ls {0}".format(self.base_path[1]))
- if self.check_error(stderr):
- reform = re.compile("\w+")
- for project in stdout:
- print("PROJECT",project)
- project_name = reform.match(project).string.strip('\n')
- self.projects[project_name] = {"path" : "{0}/{1}".format(self.base_path[1],project_name), "branch" : []}
- else:
- raise ValueError("Base Path Abnormal")
-
- self.list_projects();
-
- else:
- raise UnboundLocalError("Init Base First")
-
- def list_projects(self):
- for project in self.projects.keys():
- self.projects_list.append(project)
- print(project)
-
- def set_local(self,path):
- self.remotes = {};
- self.local_path = path;
- os.chdir(self.local_path);
-
- def add_remote(self,name="origin"):
- os.popen("git remote add {3} ssh://{0}@{1}:{2}/{4}/.git".format(self.user,self.hostname,self.base_path[1],name,self.fix_name))
- self.remotes[name] = {"name" : name, "url" : "ssh://{0}@{1}:{2}/{3}/.git".format(self.user,self.hostname,self.base_path[1],self.fix_name)}
-
- def fetch_remote(self,name):
- if name in self.remotes.keys():
- os.popen("git fetch {0}".format(name))
-
- def get_remote(self):
- retcode = re.compile(r"[\t, ]")
- for remote in os.popen("git remote -v").readlines():
- results = retcode.split(remote)
- for item in results:
- if item[0] not in self.remotes.keys():
- self.remotes[item[0]] = {"name":item[0],"url":item[1]}
-
-
-
- def push_remote(self,name,branch):
- if branch in self.projects[self.fix_name]["branch"] and name in self.remotes.keys():
- os.popen("git push {0} {1}".format(name,branch))
- else:
- raise ValueError("Branch or Name Abnormal")
-
- def pull_remote(self,name,branch):
- if name in self.remotes.keys():
- os.popen("git pull {0} {1}".format(name,branch))
- else:
- raise ValueError("Remote Error")
-
-
- def fix(self,name):
- if name in self.projects_list:
- self.fix_name = name;
- stdout, stderr = self.run("cd {0}".format(self.projects[name]["path"]))
- if self.check_error(stderr):
- print("Fixed.")
- self.fix_cmd = "cd {0}".format(self.projects[name]["path"]) + ";";
- else:
- raise ValueError("Project Path Abnormal")
-
- def commit(self,message):
- if self.base_path[0]:
- stdout, stderr = self.run(self.fix_cmd+"git commit --message={0}".format(message))
- else:
- raise UnboundLocalError("Init Base First")
-
- def get_branch(self):
- if self.base_path[0] and self.fix_name != None:
- stdout, stderr = self.run(self.fix_cmd+"git branch")
- if self.check_error(stderr):
- reform = re.compile("\w+",)
- for branch in stdout:
- branch_name = reform.search("*master").group().strip('\n')
- self.projects[self.fix_name]["branch"].append(branch_name)
-
- if '*' in str(branch):
- self.projects[self.fix_name]["active_branch"] = branch_name
- else:
- print(stderr)
- raise ValueError("Command Error")
-
- def list_branch(self):
- for project in self.projects.items():
- for branch in project[1]["branch"]:
- if branch == project[1]["active_branch"]:
- print("(*)",branch)
- else:
- print(" ",branch)
-
-
-if __name__ == "__main__":
- compute = git("compute.bktus.com", "/home/git", "git", "123456")
- compute.globalinit(git_user = "saturneric", git_email = "eric.bktu@gmail.com")
- compute.baseinit();
- #compute.create_project("lcs")
- compute.update_projects();
- compute.list_projects();
- compute.fix("lcs");
-
- #compute.get_branch("lcs")
- compute.set_local("/Users/huyibing/Documents/code/test")
- #compute.add_remote();
- #compute.get_remote()
- compute.get_branch();
- compute.list_branch();
- print(compute.projects)
-
diff --git a/ssh.py b/ssh.py
index 72ce803..3bf1f4f 100644
--- a/ssh.py
+++ b/ssh.py
@@ -1,26 +1,47 @@
-import server
-import subprocess
-import os
-
-class key(server.ssh):
- def __init__(self,hostname, path, user, passwd=None, sshkey=False):
- super().__init__(hostname=hostname, path=path, user=user, passwd=passwd, sshkey=sshkey)
- self.connect(5);
-
- def add_key(self):
- self.run("echo \"{0}\" >> ~/.ssh/authorized_keys".format(self.pub_key))
-
- def create_key(self):
- retcode = subprocess.Popen(["ssh-keygen", "-b 4096", "-t rsa"], shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- stdout, stderr = retcode.communicate(input=b"\ny \n \n \n")
-
- def get_key(self):
- self.pub_key = os.popen("cat ~/.ssh/id_rsa.pub").read()
+import paramiko
+class SSH(object):
+ ssh = paramiko.SSHClient();
+ def __init__(self, hostname, path, user, passwd=None, ssh_key=False):
+ self.hostname = hostname
+ self.path = path
+ self.user = user
+ self.ssh_key = ssh_key
-newkey = key("compute.bktus.com", "/home/git", "git", "123456",sshkey=False);
-#newkey.create_key();
-#newkey.get_key();
-#newkey.add_key();
\ No newline at end of file
+ if ssh_key:
+ self.passwd = None
+ self.key = paramiko.RSAKey.from_private_key_file('/Users/huyibing/.ssh/id_rsa')
+ else:
+ self.passwd = passwd
+
+ self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
+
+ def close(self):
+ self.ssh.close()
+
+ def run(self, cmd):
+ print("CMD:", cmd)
+ stdin, stdout, stderr = self.ssh.exec_command(cmd)
+
+ stdout = list(stdout)
+ stderr = list(stderr)
+ return stdout, stderr
+
+ @staticmethod
+ def check_error(stderr):
+ if len(stderr) == 0:
+ return True
+ else:
+ return False
+
+ def connect(self, timeout):
+ if self.ssh_key:
+ self.ssh.connect(hostname=self.hostname, port=22, username=self.user, pkey=self.key, timeout=timeout)
+ else:
+ self.ssh.connect(hostname=self.hostname, port=22, username=self.user, password=self.passwd,
+ timeout=timeout)
+
+ def __del__(self):
+ self.close()