From 4a4bb6216c5ea3628138892515f3545df84089be Mon Sep 17 00:00:00 2001 From: perrette Date: Wed, 10 May 2023 18:06:05 +0200 Subject: [PATCH] bugfix: move does copy by default #56 - set hardlink=False as default parameter of the move function - have a try / except close that makes a copy instead in case of failure - explicitly pass hardlink=True in the backup function in main - ... that involves passing hardling around in Biblio.move(..., hardlink=..) and Biblio.rename_entry_files --- papers/__main__.py | 2 +- papers/bib.py | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/papers/__main__.py b/papers/__main__.py index c359a89..6ad79d5 100644 --- a/papers/__main__.py +++ b/papers/__main__.py @@ -59,7 +59,7 @@ def _backup_bib(biblio, config, message=None): backupfilesdir = backupdir/"files" backupfilesdir.mkdir(exist_ok=True) biblio.filesdir = str(backupfilesdir) - biblio.rename_entries_files(copy=True, relative_to=backupdir) + biblio.rename_entries_files(copy=True, relative_to=backupdir, hardlink=True) biblio.save(backupfile) config.gitcmd(f"add papers.bib") config.gitcmd(f"add files") diff --git a/papers/bib.py b/papers/bib.py index da6bcc3..c114b14 100644 --- a/papers/bib.py +++ b/papers/bib.py @@ -219,8 +219,8 @@ def __init__(self, db=None, filesdir=None, key_field='ID', nameformat=NAMEFORMAT self.relative_to = os.path.sep if relative_to is None else relative_to self.sort() - def move(self, file, newfile, copy=False): - return _move(file, newfile, copy=copy, dryrun=papers.config.DRYRUN) + def move(self, file, newfile, copy=False, hardlink=False): + return _move(file, newfile, copy=copy, dryrun=papers.config.DRYRUN, hardlink=hardlink) @property def entries(self): @@ -499,7 +499,7 @@ def check_duplicates(self, key=None, eq=None, mode='i'): self.sort() # keep sorted - def rename_entry_files(self, e, copy=False, formatter=None, relative_to=None): + def rename_entry_files(self, e, copy=False, formatter=None, relative_to=None, hardlink=False): """ Rename files See `papers.filename.Format` class and REAMDE.md for infos. @@ -526,7 +526,7 @@ def rename_entry_files(self, e, copy=False, formatter=None, relative_to=None): if not os.path.exists(file): raise ValueError(file+': original file link is broken') elif file != newfile: - self.move(file, newfile, copy) + self.move(file, newfile, copy, hardlink=hardlink) # assert os.path.exists(newfile) # if not copy: # assert not os.path.exists(file) @@ -544,7 +544,7 @@ def rename_entry_files(self, e, copy=False, formatter=None, relative_to=None): if not os.path.exists(file): raise ValueError(file+': original file link is broken') elif file != newfile: - self.move(file, newfile, copy) + self.move(file, newfile, copy, hardlink=hardlink) # assert os.path.exists(newfile) count += 1 newfiles.append(newfile) @@ -577,10 +577,10 @@ def rename_entry_files(self, e, copy=False, formatter=None, relative_to=None): logger.info('renamed file(s): {}'.format(count)) - def rename_entries_files(self, copy=False, relative_to=None): + def rename_entries_files(self, copy=False, relative_to=None, hardlink=False): for e in self.db.entries: try: - self.rename_entry_files(e, copy, relative_to=relative_to) + self.rename_entry_files(e, copy, relative_to=relative_to, hardlink=hardlink) except Exception as error: logger.error(str(error)) continue