fix - 修复某些情况下同步git信息失败的问题

pull/384/head
zypo 2021-09-28 14:34:51 +08:00
parent 3ad137ffb0
commit e06103b656
2 changed files with 19 additions and 10 deletions

View File

@ -67,7 +67,7 @@ class Command(BaseCommand):
f'cd {settings.BASE_DIR}', f'cd {settings.BASE_DIR}',
f'python3 ./manage.py makemigrations ' + ' '.join(apps), f'python3 ./manage.py makemigrations ' + ' '.join(apps),
f'python3 ./manage.py migrate', f'python3 ./manage.py migrate',
f'python3 ./tools/migrate.py {version}' f'python3 ./tools/migrate.py {settings.SPUG_VERSION}'
] ]
task = subprocess.Popen(' && '.join(commands), shell=True) task = subprocess.Popen(' && '.join(commands), shell=True)
if task.wait() != 0: if task.wait() != 0:
@ -76,4 +76,6 @@ class Command(BaseCommand):
self.stdout.write(self.style.SUCCESS('''升级成功,请自行重启服务,如果通过官方文档安装一般重启命令为 self.stdout.write(self.style.SUCCESS('''升级成功,请自行重启服务,如果通过官方文档安装一般重启命令为
Docker: docker restart spug Docker: docker restart spug
Centos: systemctl restart supervisord Centos: systemctl restart supervisord
Ubuntu: systemctl restart supervisor''')) Ubuntu: systemctl restart supervisor
'''))
self.stderr.write(self.style.WARNING(f'最后别忘了刷新浏览器,确保系统设置/关于里的api与web版本一致哦'))

View File

@ -3,6 +3,7 @@
# Released under the AGPL-3.0 License. # Released under the AGPL-3.0 License.
from git import Repo, RemoteReference, TagReference, InvalidGitRepositoryError, GitCommandError from git import Repo, RemoteReference, TagReference, InvalidGitRepositoryError, GitCommandError
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from datetime import datetime
import shutil import shutil
import os import os
@ -21,7 +22,7 @@ class Git:
self.repo.archive(f, commit) self.repo.archive(f, commit)
def fetch_branches_tags(self): def fetch_branches_tags(self):
self._fetch() self.fetch()
branches, tags = {}, {} branches, tags = {}, {}
for ref in self.repo.references: for ref in self.repo.references:
if isinstance(ref, RemoteReference): if isinstance(ref, RemoteReference):
@ -31,23 +32,23 @@ class Git:
tags[ref.name] = { tags[ref.name] = {
'id': ref.tag.hexsha, 'id': ref.tag.hexsha,
'author': ref.tag.tagger.name, 'author': ref.tag.tagger.name,
'date': ref.tag.tagged_date, 'date': self._format_date(ref.tag.tagged_date),
'message': ref.tag.message.strip() 'message': ref.tag.message.strip()
} if ref.tag else { } if ref.tag else {
'id': ref.commit.binsha.hex(), 'id': ref.commit.binsha.hex(),
'author': ref.commit.author.name, 'author': ref.commit.author.name,
'date': ref.commit.authored_date, 'date': self._format_date(ref.commit.authored_date),
'message': ref.commit.message.strip() 'message': ref.commit.message.strip()
} }
tags = sorted(tags.items(), key=lambda x: x[1]['date'], reverse=True) tags = sorted(tags.items(), key=lambda x: x[1]['date'], reverse=True)
return branches, dict(tags) return branches, dict(tags)
def _fetch(self): def fetch(self):
try: try:
self.repo.remotes.origin.fetch(p=True, P=True) self.repo.remotes.origin.fetch(f=True, p=True, P=True)
except GitCommandError as e: except GitCommandError as e:
if self.env: if self.env:
self.repo.remotes.origin.fetch(env=self.env, p=True, P=True) self.repo.remotes.origin.fetch(env=self.env, f=True, p=True, P=True)
else: else:
raise e raise e
@ -77,11 +78,17 @@ class Git:
commits.append({ commits.append({
'id': commit.hexsha, 'id': commit.hexsha,
'author': commit.author.name, 'author': commit.author.name,
'date': commit.committed_date, 'date': self._format_date(commit.committed_date),
'message': commit.message.strip() 'message': commit.message.strip()
}) })
return commits return commits
def _format_date(self, timestamp):
if isinstance(timestamp, int):
date = datetime.fromtimestamp(timestamp)
return date.strftime('%Y-%m-%d %H:%M')
return timestamp
def __enter__(self): def __enter__(self):
if self.pkey: if self.pkey:
self.fd = NamedTemporaryFile() self.fd = NamedTemporaryFile()