Skip to content

Release v2.17

Choose a tag to compare

@github-actions github-actions released this 10 Jun 21:00

The largest release in a while: a restructuring of the git-backup/undo machinery, safer and clearer duplicate resolution, several new commands, and many bug fixes.

Behavior changes

  • Git-tracking is on by default for fresh installs (when a git binary is available), so papers undo/redo work in full depth out of the box. --no-git opts out; backing up the PDF files themselves (--git-lfs) remains opt-in. Existing installs keep their saved setting.
  • Fresh installs are local by default (a .papersconfig.json in the current directory — one library per project). --global requests the account-wide configuration; an existing install keeps its scope when you re-run papers install.
  • papers install now updates an existing configuration: options you pass change, everything else is kept. Use --reset to start over from defaults. The interactive "Overwrite or Edit?" and "delete the other config?" dialogs are gone; answering no at a prompt no longer unsets a value (use unset). --no-prompt is the primary name for non-interactive installs (--force remains an alias).
  • Undo/redo never lose history. Undo, redo and restore-backup --ref record restore commits instead of resetting branches, so making a new change while undone no longer discards the states that were still redoable. Backup repositories from older versions are adopted automatically on first use.
  • Backup directories have a unique identity: named after the parent folder, the bibtex file and a path hash (e.g. myproject-references-3f9a1c2b), with a manifest recording which library each belongs to. Two same-named libraries can no longer share (and corrupt) one backup. The backup repo now tracks the bibtex under its own name; no manual migration needed.
  • Config/data/cache locations now come from platformdirs — identical paths on Linux, platform-appropriate ones on macOS/Windows (with automatic migration of the old locations).
  • Auto-generated fallback keys use the slugified DOI instead of the raw one (#105).

New

  • papers backup list / papers backup remove NAME — see every backup directory and which library it belongs to; clean up orphans.
  • papers open KEY — open the file(s) attached to an entry (#80).
  • papers extract accepts several files (papers extract *.pdf) and --recursive directory scans (from #92).
  • papers status -v shows how many file links the bibliography references, next to the on-disk count (from #97).
  • papers uninstall reports what it leaves behind; --remove-backup also removes the backup directory.

Fixes

  • Duplicate resolution: "Skip all" no longer deletes the unprocessed duplicate groups; merging no longer crashes on save; check --duplicates -m m actually merges; editing entries validates the editor round-trip; entries without a DOI no longer break the interactive loop; the dialogs explain what each choice does, deleting a group asks for confirmation, and (q)uit exits safely.
  • File paths containing colons parse correctly (#95), and empty path entries no longer cause "Is a directory" errors with --git-lfs (#91).
  • .PDF files are no longer skipped (#94); papers add . --recursive no longer skips the scan root (#100).
  • The request cache survives corrupt files and is safe under concurrent papers processes (#99).
  • papers list --first-author works; papers add --ignore-errors works; papers check --force no longer prompts; uninstall no longer removes the config's parent directory; local configs support files directories outside the library folder (../ paths).

Internal

  • Git plumbing extracted to papers/backup.py (no shell=True anywhere); install logic split into testable resolution + apply steps (papers/install.py); import-time side effects removed; test suite grown from 292 to 344 tests.