DragonFly BSD
 

Issue1074

Title undo + mv => unexpected
Priority Status chatting
Superseder Nosy List thomas.nikolajsen
Assigned To Topics

Created on 2008-07-16.02:08:00 by thomas.nikolajsen, last changed 2008-07-16.21:24:07 by dillon.

Messages
msg4968 (view) Author: dillon Date: 2008-07-16.21:24:02
:`undo -i' seems to track the wrong file after mv, see below.
:Contents of file is correct;
:`hammer history' seems correct.
:
: -thomas

    Ok, I figured out what is going on here.  What is happening is
    that doing a 'rename' does not modify the file, so no new history
    is being added.  A file create modifies the file, of course.  A 'rm'
    will also modify the file because it drops the hardlink count by 1,
    but a 'mv' does not have to modify the file.

    The undo program fetches the history internally in order to get the
    most recent transaction id, and then tries to open the file using
    that transaction id before printing the history.

    however, when you've mv'd the file, that transaction id will be prior
    to when the mv was made, so undo's attempt to open the file using
    the new name will fail.

    Pretty cool!

    For the moment, so things work somewhat as expected, I will adjust
    the undo program to attempt to open the 'current' file under its new
    name if it is unable to open the file via the transaction id.  That
    will help display the history, but the diff feature will probably still
    fail.

    So undo isn't going to be perfect, it will not be able to access the
    file for any period prior to it being renamed unless you also know
    the original name (prior to the mv). If you do know that name then you
    are golden.

						-Matt
msg4963 (view) Author: dillon Date: 2008-07-16.03:43:02
:`undo -i' seems to track the wrong file after mv, see below.
:Contents of file is correct;
:`hammer history' seems correct.
:
: -thomas

    You're saying it should dump the history if either test or test1 
    is specified, but it only seems to do it for one of the two?

    Interesting.  I'll look into it.  It should be able to figure out
    the history for both of them.  It kinda looks like the directory
    entry is not being completely synced by the sync command.

    Also, 'hammer synctid' doesn't work (I tried to use it instead of
    sync).  I'll fix that too.  Another bug related to the mirroring
    work.

					-Matt
msg4962 (view) Author: thomas.nikolajsen Date: 2008-07-16.02:08:00
`undo -i' seems to track the wrong file after mv, see below.
Contents of file is correct;
`hammer history' seems correct.

 -thomas
-
# sh -x undo-mv
+ mkdir /hammer/XXX.2082
+ cd /hammer/XXX.2082
+ echo XXX
+ sync
+ undo -i test
test: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
+ echo YYY
+ sync
+ undo -i test
test: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
        0x0000000100030d63 16-Jul-2008 03:52:57
+ mv test test1
+ sync
+ undo -i test
test: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
        0x0000000100030d63 16-Jul-2008 03:52:57
+ undo -i test1
+ echo ZZZ
+ sync
+ undo -i test
test: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
        0x0000000100030d63 16-Jul-2008 03:52:57
        0x0000000100030d69 16-Jul-2008 03:52:58
+ undo -i test1
+ mv test1 test
+ sync
+ undo -i test
test: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
        0x0000000100030d63 16-Jul-2008 03:52:57
        0x0000000100030d69 16-Jul-2008 03:52:58
+ undo -i test1
+ echo WWW
+ sync
+ undo -i test
+ undo -i test1
test1: objid=0x00000001000186be
        0x0000000100030d5f 16-Jul-2008 03:52:57
        0x0000000100030d63 16-Jul-2008 03:52:57
        0x0000000100030d69 16-Jul-2008 03:52:58
        0x0000000100030d6f 16-Jul-2008 03:52:58

- undo-mv
#!/bin/sh
# undo + mv => unexpected
mkdir /hammer/XXX.$$
cd /hammer/XXX.$$

echo XXX >>test
sync
undo -i test

echo YYY >>test
sync
undo -i test

mv test test1
sync
undo -i test
undo -i test1

echo ZZZ >>test1
sync
undo -i test
undo -i test1

mv test1 test
sync
undo -i test
undo -i test1

echo WWW >>test
sync
undo -i test
undo -i test1
History
Date User Action Args
2008-07-16 21:24:07dillonsetmessages: + msg4968
2008-07-16 03:43:06dillonsetstatus: unread -> chatting
messages: + msg4963
2008-07-16 02:08:00thomas.nikolajsencreate