On Tue, Nov 29, 2011 at 7:44 AM, Daniel Shahaf <d.s_at_daniel.shahaf.name> wrote:
> Jerryleen S wrote on Tue, Nov 29, 2011 at 10:50:06 +0530:
>> but as per discussion in the thread it isn't possible to differentiate
>> deleting or adding or modifying transaction during pre-commit script.
>>
>
> I don't understand what you're claiming. The situation is:
>
> - The pre-commit hook knows the EXACT contents of the transaction
> (which will become a revision if the hook does exit(0)). That in
> particular includes the equivalent of 'svn log -qv' of the txn.
>
> (five minutes on a file:///tmp/r repository with 'svnlook -t' will
> confirm or refute this)
>
> - The pre-commit hook can modify the txn before it becomes a revision.
> Such modifications cannot be communicated to the client performing the
> commit.
>
> (for the former assertion, see svn_fs_open_txn() and similar FS APIs.
> for the latter, the client code (libsvn_ra and libsvn_wc) assumes that
> the changes sent to the server are those committed, and updates the wc
> state based on the changes sent.)
To reiterate what Daniel said: you can perfectly well see the
difference between an Add (A), a Delete (D) or a Modification (M) in a
pre-commit hook. The command 'svnlook changed -t <transaction>' will
give you a list of everything that's about to be changed by the
transaction in question. Lines beginning with A indicate Additions, D
for Deletes and M for Modifications.
Of course this is only speaking at file/directory granularity (which
files/directories are added, deleted, modified). If you want to know
if a Modified file has additions, deletions or modifications, you'll
have to examine/parse the output of 'svnlook diff' to see the concrete
content changes ...
--
Johan
Received on 2011-11-29 14:47:15 CET