The sound distributed version control system

#724 `pijul apply` Causes Destructive Loss of Unrecorded Changes

Closed on February 24, 2023
stellarpower on October 30, 2022

MRE:

# Create a dummy repo and add one change

pijul init

echo "# Bonjour!" > hello.md
set hash (pijul record -am 'Initial record' hello.md | sd 'Hash: ' '')


# Remove this change

pijul unrecord $hash
# Will show no changes (apart from empty starting point)
pijul log

# Now add some new changes. These will be lost below:

echo "# ¡Buenos Días!" > hello.md 

# Apply the old change back over the repo
pijul apply $hash

# And we've silently lost some of our work:
cat hello.md

This is in fish rather than a posix shell, but hopefully you get the idea:

Applying a change to the channel overwrites the files in the repo, even if there are unrecorded changes. This is in contrast to pijul channel switch, which will refuse to change channels if there are unrecorded changes (because these would be overwritten).

Expected Behaviour:

  • if applying a change to the current channel, and thus the working copy
    • for all files that will be overwritten by this change,
      • if there are unrecorded changes in these files, output the filename * do not output the repository and spit out an error message if we found unrecorded changes
pmeunier added a change on February 24, 2023
ISZ65SPQXSDGK6T6VQJJTD54KD3R5GOQ3GIMRALPJU6JPUSHUXMQC
main
pmeunier on February 24, 2023

Thanks for the report! I just (safely) applied a fix.

pmeunier closed this discussion on February 24, 2023
stellarpower on June 3, 2023

Awesome, thank you!