mirror of
https://github.com/LmeSzinc/AzurLaneAutoScript.git
synced 2025-01-09 10:37:36 +08:00
92 lines
3.4 KiB
Python
92 lines
3.4 KiB
Python
import os
|
|
|
|
from deploy.config import DeployConfig
|
|
from deploy.logger import logger
|
|
from deploy.utils import *
|
|
|
|
|
|
class GitManager(DeployConfig):
|
|
@cached_property
|
|
def git(self):
|
|
return self.filepath('GitExecutable')
|
|
|
|
@staticmethod
|
|
def remove(file):
|
|
try:
|
|
os.remove(file)
|
|
logger.info(f'Removed file: {file}')
|
|
except FileNotFoundError:
|
|
logger.info(f'File not found: {file}')
|
|
|
|
def git_repository_init(
|
|
self, repo, source='origin', branch='master',
|
|
proxy='', ssl_verify=True, keep_changes=False
|
|
):
|
|
logger.hr('Git Init', 1)
|
|
if not self.execute(f'"{self.git}" init', allow_failure=True):
|
|
self.remove('./.git/config')
|
|
self.remove('./.git/index')
|
|
self.remove('./.git/HEAD')
|
|
self.execute(f'"{self.git}" init')
|
|
|
|
logger.hr('Set Git Proxy', 1)
|
|
if proxy:
|
|
self.execute(f'"{self.git}" config --local http.proxy {proxy}')
|
|
self.execute(f'"{self.git}" config --local https.proxy {proxy}')
|
|
else:
|
|
self.execute(f'"{self.git}" config --local --unset http.proxy', allow_failure=True)
|
|
self.execute(f'"{self.git}" config --local --unset https.proxy', allow_failure=True)
|
|
|
|
if ssl_verify:
|
|
self.execute(f'"{self.git}" config --local http.sslVerify true')
|
|
else:
|
|
self.execute(f'"{self.git}" config --local http.sslVerify false')
|
|
|
|
logger.hr('Set Git Repository', 1)
|
|
if not self.execute(f'"{self.git}" remote set-url {source} {repo}', allow_failure=True):
|
|
self.execute(f'"{self.git}" remote add {source} {repo}')
|
|
|
|
logger.hr('Fetch Repository Branch', 1)
|
|
self.execute(f'"{self.git}" fetch {source} {branch}')
|
|
|
|
logger.hr('Pull Repository Branch', 1)
|
|
# Remove git lock
|
|
lock_file = './.git/index.lock'
|
|
if os.path.exists(lock_file):
|
|
logger.info(f'Lock file {lock_file} exists, removing')
|
|
os.remove(lock_file)
|
|
if keep_changes:
|
|
if self.execute(f'"{self.git}" stash', allow_failure=True):
|
|
self.execute(f'"{self.git}" pull --ff-only {source} {branch}')
|
|
if self.execute(f'"{self.git}" stash pop', allow_failure=True):
|
|
pass
|
|
else:
|
|
# No local changes to existing files, untracked files not included
|
|
logger.info('Stash pop failed, there seems to be no local changes, skip instead')
|
|
else:
|
|
logger.info('Stash failed, this may be the first installation, drop changes instead')
|
|
self.execute(f'"{self.git}" reset --hard {source}/{branch}')
|
|
self.execute(f'"{self.git}" pull --ff-only {source} {branch}')
|
|
else:
|
|
self.execute(f'"{self.git}" reset --hard {source}/{branch}')
|
|
self.execute(f'"{self.git}" pull --ff-only {source} {branch}')
|
|
|
|
logger.hr('Show Version', 1)
|
|
self.execute(f'"{self.git}" log --no-merges -1')
|
|
|
|
def git_install(self):
|
|
logger.hr('Update Alas', 0)
|
|
|
|
if not self.AutoUpdate:
|
|
logger.info('AutoUpdate is disabled, skip')
|
|
return
|
|
|
|
self.git_repository_init(
|
|
repo=self.Repository,
|
|
source='origin',
|
|
branch=self.Branch,
|
|
proxy=self.GitProxy,
|
|
ssl_verify=self.SSLVerify,
|
|
keep_changes=self.KeepLocalChanges,
|
|
)
|