mirror of
https://github.com/openSUSE/osc.git
synced 2024-12-26 01:46:13 +01:00
Merge pull request #1314 from dmach/backup-edited-messages
Backup edited messages and notify user about them when osc errors out
This commit is contained in:
commit
ba1b3c791b
@ -19,6 +19,7 @@ import urllib3.exceptions
|
|||||||
from . import _private
|
from . import _private
|
||||||
from . import commandline
|
from . import commandline
|
||||||
from . import conf as osc_conf
|
from . import conf as osc_conf
|
||||||
|
from . import core as osc_core
|
||||||
from . import oscerr
|
from . import oscerr
|
||||||
from .OscConfigParser import configparser
|
from .OscConfigParser import configparser
|
||||||
from .oscssl import CertVerificationError
|
from .oscssl import CertVerificationError
|
||||||
@ -196,6 +197,11 @@ def run(prg, argv=None):
|
|||||||
print(e, file=sys.stderr)
|
print(e, file=sys.stderr)
|
||||||
except oscerr.OscBaseError as e:
|
except oscerr.OscBaseError as e:
|
||||||
print('*** Error:', e, file=sys.stderr)
|
print('*** Error:', e, file=sys.stderr)
|
||||||
|
if osc_core.MESSAGE_BACKUPS:
|
||||||
|
print()
|
||||||
|
print("If you lost any edited commit messages due to an error, you may find them here:")
|
||||||
|
for path in osc_core.MESSAGE_BACKUPS:
|
||||||
|
print(f" - {path}")
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
|
34
osc/core.py
34
osc/core.py
@ -4408,6 +4408,11 @@ def _editor_command():
|
|||||||
return cmd
|
return cmd
|
||||||
|
|
||||||
|
|
||||||
|
# list of files with message backups
|
||||||
|
# we'll show this list when osc errors out
|
||||||
|
MESSAGE_BACKUPS = []
|
||||||
|
|
||||||
|
|
||||||
def _edit_message_open_editor(filename, data, orig_mtime):
|
def _edit_message_open_editor(filename, data, orig_mtime):
|
||||||
editor = _editor_command()
|
editor = _editor_command()
|
||||||
mtime = os.stat(filename).st_mtime
|
mtime = os.stat(filename).st_mtime
|
||||||
@ -4428,7 +4433,34 @@ def _edit_message_open_editor(filename, data, orig_mtime):
|
|||||||
run_editor(filename)
|
run_editor(filename)
|
||||||
else:
|
else:
|
||||||
run_editor(filename)
|
run_editor(filename)
|
||||||
return os.stat(filename).st_mtime != orig_mtime
|
|
||||||
|
if os.stat(filename).st_mtime != orig_mtime:
|
||||||
|
# file has changed
|
||||||
|
|
||||||
|
cache_dir = os.path.expanduser("~/.cache/osc/edited-messages")
|
||||||
|
try:
|
||||||
|
os.makedirs(cache_dir, mode=0o700)
|
||||||
|
except FileExistsError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# remove any stored messages older than 1 day
|
||||||
|
now = datetime.datetime.now()
|
||||||
|
epoch = datetime.datetime.timestamp(now - datetime.timedelta(days=1))
|
||||||
|
for fn in os.listdir(cache_dir):
|
||||||
|
path = os.path.join(cache_dir, fn)
|
||||||
|
if not os.path.isfile(path):
|
||||||
|
continue
|
||||||
|
mtime = os.path.getmtime(path)
|
||||||
|
if mtime < epoch:
|
||||||
|
os.unlink(path)
|
||||||
|
|
||||||
|
# store the current message's backup to the cache dir
|
||||||
|
message_backup_path = os.path.join(cache_dir, str(now).replace(" ", "_"))
|
||||||
|
shutil.copyfile(filename, message_backup_path)
|
||||||
|
MESSAGE_BACKUPS.append(message_backup_path)
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def edit_message(footer='', template='', templatelen=30):
|
def edit_message(footer='', template='', templatelen=30):
|
||||||
|
Loading…
Reference in New Issue
Block a user