#+TITLE: Hyperdrive.el Changelog
#+OPTIONS: num:nil

# All notable changes to [[https://ushin.org/hyperdrive/hyperdrive-manual.html][hyperdrive.el]] will be documented in this file.
# This project adheres to [[https://semver.org/spec/v2.0.0.html][Semantic Versioning]].

* 0.6-pre

** Fixed

- Fixed typo in ~hyperdrive/dir-handler~

** Removed

- Obsolete variable ~hyperdrive-hyper-gateway-port~.

** Internal

- Bump ~persist.el~ package dependency to ~v0.8~, fixing a potential
  data loss bug.

* 0.5.2 [2024-12-22 Sun]

** Fixed

- Bumped ~hyper-gateway-ushin~ to version ~3.17.0~, fixing an infinite
  loop when viewing the history and blocks were missing.

* 0.5.1 [2024-12-17 Tue]

** Fixed

- Fix equality predicate in ~hyperdrive-history-get~.  This fix means
  that loading an old version of a file after viewing that file's
  history will be much faster.  Thanks to Jonas Bernoulli for the fix!
- Fix ~hyperdrive-sbb-view-layout~ custom type.  Thanks again, Jonas!

* 0.5 [2024-12-06 Fri]

Version ~0.5~ adds the peer graph/list, adds a global hyperdrive context
menu, and simplifies the internal logic for getting file history.

** Added

- Add peer graph and peer list for discovering sources of information
  and exploring the connections between peers.
- Enable ~hyperdrive-context-menu-mode~ to enable right-click menus on
  on hyperdrive names.

** Changed

- It's now possible to attempt to jump to the next version of a file
  even before the gateway knows if it exists or not.
- More descriptive error messages when attempting to load nonexistent
  or unknown file versions.
- Removed persist variable ~hyperdrive-version-ranges~.  Feel free to
  delete the old data inside ~hyperdrive-persist-location~.
- Link website, library source, and Info manual in Customize group.
- More colorful version descriptions in ~hyperdrive-menu~.
- Hyperdrive nickname metadata are now loaded when opening any file,
  not just directories.
- ~hyperdrive-read-hyperdrive~ now parses the hyperdrive from a URL or
  public key and returns it.
- ~hyperdrive-nickname~ face now inherits from ~shadow~ to show its
  relative lack of trustworthiness compared to ~hyperdrive-petname~.

** Fixed

- Handle diffing a file when the previous version is not known to exist.
- ~hyperdrive-menu~ and the menu bar now correctly indicate when the
  next and/or previous version of current directory do not exist.
- Correctly jump to headings when following Org links to a hyperdrive
  file whose buffer is already open in a window.
- Only mark deleted hyperdrive file buffer as modified if it's live.
- ~hyperdrive-ewoc-next~ now correctly handles empty directories.

** Internal

- ~hyper-gateway-ushin~ can now directly control the hyperbee, so
  key/value (like peer graph data) can now be stored efficiently.
- ~hyper-gateway-ushin~ now has a ~/$/history~ API which can be
  queried to get the file history for a particular file.
- Add ~hyperdrive-fully-replicate~ to fully replicate a hyperdrive's
  inode db, blob store, or both.
- ~hyperdrive-fill-metadata~ can now optionally be called
  asynchronously.
- Bump package dependencies.

* 0.4.2 [2024-09-24 Tue]

** Fixed

- Set major mode in hyperdrive files even before it is saved.
- Compiler warnings.  (Thanks to Jonas Bernoulli!)

* 0.4.1 [2024-09-13 Fri]

** Fixed

- Fix following a link to an Org document whose target is not found.

* 0.4 [2024-09-09 Mon]

Version ~0.4~ features [[https://ushin.org/hyperdrive/hyperdrive-manual.html#Org_002dtransclusion-integration][org-transclusion integration]], easy gateway
installation with ~M-x hyperdrive-install~, and a command to save disk
space by "forgetting" your copy of a file (~hyperdrive-forget-file~)!

** Security

- By default, don't automatically load major mode when browsing
  hyperdrive files.  To enable this behavior for certain trusted
  hyperdrives, mark them as "safe" with ~M-x hyperdrive-mark-as-safe~,
  which is also bound in ~hyperdrive-menu~ and the hyperdrive menu bar.

** Added

- Easy installation: After ~M-x package-install hyperdrive.el~, run ~M-x
  hyperdrive-install~ to install the gateway.
- Cancel installation in progress with ~hyperdrive-cancel-install~.
- Add ~hyperdrive-install~ and ~hyperdrive-cancel-install~ bindings to
  ~hyperdrive-menu~ and menu bar.
- Add ~hyperdrive-restart~ to restart the gateway, also bound in
  ~hyperdrive-menu~ and menu bar.
- When visiting an old version of a hyperdrive file, press ~n~ and ~p~ to
  traverse the version history.  Press ~q~ to kill the current buffer.
- View hyperdrive disk usage with ~hyperdrive-describe~ and ~hyperdrive-menu~.
- Delete the local copy of a file or directory with
  ~hyperdrive-forget-file~, also bound in ~hyperdrive-menu~ and the
  menu bar, as well as directory and history buffers.
- Indicate how much of a file has already been downloaded based on the
  color of its file size in the directory view.

** Changed

- Switch from ~hyper-gateway~ to ~hyper-gateway-ushin~ fork!  Run ~M-x
  hyperdrive-install~ to download and install the new gateway.
- Directory listings load faster.
- Make ~hyperdrive-stop~ asynchronous by default.
- Improve gateway status indicators in ~hyperdrive-menu~ to update
  asynchronously with "starting", "installing", "upgrading", etc.
- Improve messages and errors when starting and stopping gateway.
- Remove gateway status indicator in hyperdrive menu bar since menu
  bar labels cannot be updated while the menu bar is open.
- Improve error message when the gateway is not installed.
  Thanks to ~magnum~ on XMPP for reporting.
- Make ~hyperdrive-download~ asynchronous.
- Remove ~hyperdrive-reuse-buffers~ user option to ensure consistent
  behavior when uniquifying buffer names.
- Embark map now has a binding for ~hyperdrive-describe-hyperdrive~.
- Remove ~hyperdrive-honor-auto-mode-alist~ user option; hyperdrives
  marked as ~safe~ now always enable a major mode.
- Remove ~hyperdrive-gateway-process-type~ user option. To customize
  gateway startup, see options ~hyperdrive-gateway-start-function~,
  ~hyperdrive-gateway-stop-function~, ~hyperdrive-gateway-live-predicate~.
- Remove ~hyperdrive-gateway-command~ user option. To customize gateway
  command, see options ~hyperdrive-gateway-directory~,
  ~hyperdrive-gateway-program~, ~hyperdrive-gateway-command-args~.
- Rename and alias ~hyperdrive-hyper-gateway-ushin-port~ to
  ~hyperdrive-gateway-port~.  Alias will be removed in a later version.
- Improve defcustom types

** Fixed

- Fix text encoding when reading and writing hyperdrive files.
- Fix link targets/fragments for non-Org documents, like HTML.
- More reliably kill intermediate buffers when generating a diff.
- Avoid unnecessarily updating ~hyperdrive-version-ranges~.
- Include the first file in a directory as an ~imenu~ candidate.
- Start gateway subprocess on ~hyperdrive-gateway-port~.
- Properly quote existing value of ~ffap-url-regexp~ when modifying it.
- Following explicit ~file:~-prefixed links in hyperdrive Org files now
  opens hyperdrive files in the same hyperdrive.
- Fix edge cases when loading version history for nonexistent entries.
- Edge case where revert-buffer popped to the wrong hyperdrive buffer.
- Improve reading of hyperdrive URLs.
- Improve visible buttons in ~hyperdrive-menu-bar-mode~.
- Avoid unnecessary prompt to save hyperdrive EWW buffers.
- More accurately calculate file size when writing a hyperdrive file.

** Internal

- Refactor to accommodate [[https://ushin.org/hyperdrive/hyperdrive-manual.html#Org_002dtransclusion-integration][hyperdrive-org-transclusion]].
- History-related functions now accept ~hyperdrive-entry~ structs.
- Update hyperdrive ~latest-version~ metadata when deleting directories.
- Reduce memory usage in ~hyperdrive-write-buffer~.
- Add Org 9.7.6 as a dependency.
- Bump package dependencies.

* 0.3 [2023-12-02 Sat]

** Added

- Added ~hyperdrive-mirror~ interface to the [[info:transient][Transient]] ~hyperdrive-menu~
- ~hyperdrive-open-at-version~: Open the current file or directory at a
  specific version
- Support following relative filename links in hyperdrive
  ~markdown-mode~ buffers
- ~find-file-at-point~ integration
- Added ~hyperdrive~ completion category which affects the
  ~completing-read~ interface for selecting a hyperdrive.
- Embark integration: Run ~embark-act~ while interactively selecting a
  hyperdrive to choose an alternative action
- Add customization options to control how hyperdrives, files, and
  folders are displayed: ~hyperdrive-entry-format~ customization group
- Add customization option ~hyperdrive-gateway-process-type~ to start
  ~hyper-gateway~ as an Emacs subprocess or systemd service

** Changed

- Simplified ~hyperdrive-menu~ by moving commands which required
  selecting a hyperdrive into ~hyperdrive-menu-hyperdrive~
- Refactored the ~*hyperdrive-mirror*~ buffer to use [[https://github.com/alphapapa/taxy.el/tree/package/taxy-magit-section][taxy-magit-section]]
- Removed ~rx~ form option in ~hyperdrive-mirror~
- The "Hyperdrive" menu bar now shows up at the top-level
- Use positional arguments in ~hyperdrive-mirror~ and ~hyperdrive-upload-files~
- Require at least Emacs 28.1+

** Fixed

- Fixed single click on directory column header
- Fixed a bug which caused ~hyperdrive-menu~ to fail when the current
  entry's next version was ~unknown~
- Uploaded files now retain the timestamp of the local file
- Fixed a regression in ~hyperdrive-mirror~ without confirmation

** Internal

- Use Emacs 28 shorthands

* 0.2 [2023-10-14 Sat]

** Added

- ~hyperdrive-menu~ is the new control panel.  Bind it to a convenient key!
- ~hyperdrive-menu-bar-mode~ enables the "Hyperdrive" menu bar inside "Tools"
- ~org-insert-link~ automatically inserts relative links to hyperdrive
  files within the same drive
- ~hyperdrive-find-file-other-window~: Press ~o~ in the directory or
  history buffer to open a new window
- ~yank-media~: On Emacs 29 or later, run ~M-x yank-media~ in a
  hyperdrive directory to upload the image in the clipboard
- ~info-look~: Press ~i~ in ~*help*~ to open the user manual
- ~save-some-buffers~ integration
- ~view-mode~: Press ~v~ in the directory or history buffer to
  open a file in ~view-mode~
- Org-mode link completion
- directory view sorting by column (with clickable headers)

** Changed

- ~hyperdrive-version-ranges~ is now persisted, speeding up ~hyperdrive-history~
- Fewer buffers are created by default (see ~hyperdrive-reuse-buffers~)
- ~hyperdrive-mode~ keybindings now work when viewing =hyper://= files in EWW
- History buffer displays right away; press ~+~ to load an unknown range
- ~hyperdrive-delete~ now works in hyperdrive file buffers
- Removed unused ~hyperdrive-storage-location~ defcustom

** Fixed

- Fixed "Hyperdrive" listing in ~*info* dir (top)~
- Fixed ~imenu~ face
- Removed unused defcustom ~hyperdrive-hyper-gateway-p2p-port~
- Fixed version history navigation in directories
- Allow entering URLs without ~hyper://~
- Prevent accidental loss of unsaved hyperdrive files
- Prompt before overwriting with ~hyperdrive-write-buffer~
- Fixed a native compilation bug related to ~kill-all-local-variables~
- Fixed opening hyperdrive PDFs in ~doc-view~
- Improved error handling

** Security

- Check DNSLink domains for suspicious characters

* 0.1 [2023-08-12 Sat]

- Initial release
