Re: Strange behavior on directory delete/commit

2011-08-03 Thread Stefan Sperling
On Wed, Aug 03, 2011 at 11:27:48AM +0200, Dominik Psenner wrote:
> > You must still use svn commands instead of OS
> >commands in 1.7. That won't change. I don't think it will ever change.
> >The reason is that Subversion tracks operations explicitly, rather than
> >implicitly. In other words, Subversion needs to modify meta-data in
> >the .svn directory if you change something. If you run an OS-level
> >command the actual disk state and the meta-data get out of sync.
> 
> *sarcastic* The user does not care what levers subversion needs to pull to
> show him what parts of a file were modified. */sarcastic*

File modifications are detected automatically. This is easy because
files have timestamps, and because Subversion has a pristine copy
of each file in the .svn directory. And there is no ambiguity -- a file
is either modified or it isn't.

But for tree changes, Subversion provides commands, and users must
use the commands to operate on the tree.

> The current working copy layout is unable to handle the usecase I described
> since it needs the missing meta-data that was stored within the deleted
> folder itself.

Yes, this is one use case that 1.7 fixes. You can now replace
directories without having to commit the deletion of the replaced
directory separately from the addition of the replacing directory.

E.g. you can delete a directory and move a different one on top:

$ svn rm epsilon
D epsilon
D epsilon/zeta
$ svn mv gamma epsilon  
A epsilon
D gamma
D gamma/delta
$ svn status
D   gamma
D   gamma/delta
R  +epsilon
D   epsilon/zeta

and commit the result in a single revision:


r3 | stsp | 2011-08-03 12:27:38 +0200 (Wed, 03 Aug 2011) | 1 line
Changed paths:
   R /trunk/epsilon (from /trunk/gamma:2)
   D /trunk/gamma

1.6 used to error out in the second step:
svn: Cannot copy to 'epsilon' as it is scheduled for deletion


RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>[snip]
>> Subversion is still an observer and whatever a user does, he must tell
>> Subversion what he did in cases where subversion can't
>> understand it by
>> itself (i.e. file/folder rename/move that preserve history across the
>> revisions). Every VCS I know works like this. Maybe one invents a VCS
>
>Sort of. Mercurial is perfectly happy if you tell it afterwards (before a
>commit of course) that you renamed that file and deleted the other one.
>This behavior comes in handy, if you have to rename some files in the IDE,
>because only the IDE knows what (and in which file) has to be renamed...

It smells differently, but is basically the same. :-) But now I understand
what Stefan Sperling wanted to point out.



RE: Strange behavior on directory delete/commit

2011-08-03 Thread Andreas Tscharner

[snip]
> Subversion is still an observer and whatever a user does, he must tell
> Subversion what he did in cases where subversion can't
> understand it by
> itself (i.e. file/folder rename/move that preserve history across the
> revisions). Every VCS I know works like this. Maybe one invents a VCS

Sort of. Mercurial is perfectly happy if you tell it afterwards (before a 
commit of course) that you renamed that file and deleted the other one. This 
behavior comes in handy, if you have to rename some files in the IDE, because 
only the IDE knows what (and in which file) has to be renamed...

Best regards
Andreas
--
Andreas Tscharner  
--
"Intruder on level one. All Aliens please proceed to level one."
  -- Call in "Alien: Resurrection"


CT-Dienstleistungen neu bei Wenzel Metromec
===

Haben Sie einen Prototyp ohne Zeichnung oder Konstruktionsmodell?
Suchen Sie in Ihren Bauteilen Materialschäden, Risse und Poren?
Dann sind unsere neuen Dienstleistungen im Bereich der Computertomographie die 
perfekte Lösung für Ihre Anforderungen!

Testen Sie uns und unsere neue WENZEL exaCT Anlage.
Zögern Sie nicht und nehmen Sie noch heute mit uns Kontakt auf.
mailto:c...@metromec.ch?subject=CT-Dienstleistungen



RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>I'm not sure you understand the kinds problems the new working copy
>format is settling.

For me it settles the major problem of multiple .svn folders in a checkout.

> You must still use svn commands instead of OS
>commands in 1.7. That won't change. I don't think it will ever change.
>The reason is that Subversion tracks operations explicitly, rather than
>implicitly. In other words, Subversion needs to modify meta-data in
>the .svn directory if you change something. If you run an OS-level
>command the actual disk state and the meta-data get out of sync.

*sarcastic* The user does not care what levers subversion needs to pull to
show him what parts of a file were modified. */sarcastic*

>Subversion is not like git which goes "Woaaahh... I just woke up and
>now... what??? What did the user DO???  Well, whatever, I'm just gonna
>take a wild guess to deal with this and go back to bed..."

Please correct me if I'm wrong:

Subversion is still an observer and whatever a user does, he must tell
Subversion what he did in cases where subversion can't understand it by
itself (i.e. file/folder rename/move that preserve history across the
revisions). Every VCS I know works like this. Maybe one invents a VCS
filesystem that can hook into the filesystem operations, but that's
something that will be written on other papers. ;-)

Back to topic:

The current working copy layout is unable to handle the usecase I described
since it needs the missing meta-data that was stored within the deleted
folder itself. Thus Subversion < 1.7 would need a special logic to handle
these cases. One could discuss whether this should be fixed so that < 1.7
behaves on folder deletes just alike file deletes. I leave that decision up
to the devs since I'm unable to estimate the costs.

The new working copy layout does not have the meta-data within subfolders
and thus is able to commit just that change. HOORAY! This issue *can* be
solved with WC-NG without special logics!

--quote Ryan Schmidt--
I also have a feeling Subversion 1.7's new working copy arrangement will fix
or at least change this behavior.
--eof quote Ryan Schmidt--

Greetings,
D.



Re: Strange behavior on directory delete/commit

2011-08-03 Thread Stefan Sperling
On Wed, Aug 03, 2011 at 10:25:07AM +0200, Dominik Psenner wrote:
> >Then you must explain it to them. :) To move or delete items in a working
> >copy, you must use svn commands. You must not use OS commands. That's just
> >how it is.
> 
> This is going to be a long journey. *jokingly*
> 
> Thanks for the insights and incredibly fast answers! It's awesome that
> you're working on the .svn meta-data folders problem. If you manage to get
> it settled, I believe 1.7.X is going to be great!

I'm not sure you understand the kinds problems the new working copy
format is settling. You must still use svn commands instead of OS
commands in 1.7. That won't change. I don't think it will ever change.

The reason is that Subversion tracks operations explicitly, rather than
implicitly. In other words, Subversion needs to modify meta-data in
the .svn directory if you change something. If you run an OS-level
command the actual disk state and the meta-data get out of sync.

Subversion is not like git which goes "Woaaahh... I just woke up and
now... what??? What did the user DO???  Well, whatever, I'm just gonna
take a wild guess to deal with this and go back to bed..."

Both approaches have advantages and disadvantages.


RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>Then you must explain it to them. :) To move or delete items in a working
>copy, you must use svn commands. You must not use OS commands. That's just
>how it is.

This is going to be a long journey. *jokingly*

Thanks for the insights and incredibly fast answers! It's awesome that
you're working on the .svn meta-data folders problem. If you manage to get
it settled, I believe 1.7.X is going to be great!



Re: Strange behavior on directory delete/commit

2011-08-03 Thread Ryan Schmidt

On Aug 3, 2011, at 03:17, Dominik Psenner wrote:

>> I doubt it. Or rather, the behavior is not broken. The user is broken. As I
>> said: "svn commit foo" should have worked fine if you had not run "rmdir
>> foo" beforehand. Don't run "rmdir foo". Just run "svn rm foo" followed by
>> "svn commit foo" and everything should work.
> 
> True - it's nothing totally new to me. I just doubt the lusers who are going
> to use the frontend I'm writing for them understand the difference. :-)

Then you must explain it to them. :) To move or delete items in a working copy, 
you must use svn commands. You must not use OS commands. That's just how it is.




RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>I doubt it. Or rather, the behavior is not broken. The user is broken. As I
>said: "svn commit foo" should have worked fine if you had not run "rmdir
>foo" beforehand. Don't run "rmdir foo". Just run "svn rm foo" followed by
>"svn commit foo" and everything should work.

True - it's nothing totally new to me. I just doubt the lusers who are going
to use the frontend I'm writing for them understand the difference. :-)



Re: Strange behavior on directory delete/commit

2011-08-03 Thread Ryan Schmidt

On Aug 3, 2011, at 03:04, Dominik Psenner wrote:

>> I think "svn commit foo" would work fine, provided you do not "rmdir foo"
>> first; that was your error.
>> 
>> I also have a feeling Subversion 1.7's new working copy arrangement will
>> fix or at least change this behavior.
> 
> So there's still a light at the far end of the tunnel! :o) From what I've
> read just now 1.7.X's WC arrangement will become alike hg's way. I
> understand well that the current svn infrastructure is not suited for this
> usecase.
> 
> Would patching svn 1.6.X to fix the behaviour be feasible?

I doubt it. Or rather, the behavior is not broken. The user is broken. As I 
said: "svn commit foo" should have worked fine if you had not run "rmdir foo" 
beforehand. Don't run "rmdir foo". Just run "svn rm foo" followed by "svn 
commit foo" and everything should work.





RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>> I think SVN is behaving correctly. When you do svn commit foo you're
>telling Subversion to commit changes made in foo. There are no changes in
>foo because it's been deleted. The changes, instead, are in its parent
>directory, the one from where you issued your commands. That's why svn
>commi works, it assumes . as the path.

I disagree. Providing a PATH argument should tell svn that one wants to
commit the changes to "foo". In this case it would be that "foo" was
deleted. Since I want only the changes to "foo" to be versioned, it would
not make sense to include all other changes within the parent directory.
 
>I think "svn commit foo" would work fine, provided you do not "rmdir foo"
>first; that was your error.
>
>I also have a feeling Subversion 1.7's new working copy arrangement will
>fix or at least change this behavior.

So there's still a light at the far end of the tunnel! :o) From what I've
read just now 1.7.X's WC arrangement will become alike hg's way. I
understand well that the current svn infrastructure is not suited for this
usecase.

Would patching svn 1.6.X to fix the behaviour be feasible?



RE: Strange behavior on directory delete/commit

2011-08-03 Thread Dominik Psenner
>You could also delete the directory directly in the repository using "svn
>delete  -m ". This way you would avoid the problem of
>committing partial changes of your working copy.

.. which is just another workaround.



Re: Strange behavior on directory delete/commit

2011-08-02 Thread Ryan Schmidt
On Aug 2, 2011, at 07:11, Giulio Troccoli wrote:

> On 02/08/11 07:40, Dominik Psenner wrote:
>> 
>> having a fresh subversion repository doing this as preparation:
>> 
>> $ mkdir foo/
>> $ svn add foo
>> $ svn commit -m "test"
>> Adding   foo
>> Revision X sent.
>> $ rmdir foo
>> $ svn st
>> !foo
>> $ svn delete foo
>> Dfoo
>> 
>> And finally this command fails:
>> 
>> $ svn commit foo -m "fail"
>> svn: entry "foo" has no URL
>> 

> I think SVN is behaving correctly. When you do svn commit foo you're telling 
> Subversion to commit changes made in foo. There are no changes in foo because 
> it's been deleted. The changes, instead, are in its parent directory, the one 
> from where you issued your commands. That's why svn commi works, it assumes . 
> as the path.

I think "svn commit foo" would work fine, provided you do not "rmdir foo" 
first; that was your error.

I also have a feeling Subversion 1.7's new working copy arrangement will fix or 
at least change this behavior.




Re: Strange behavior on directory delete/commit

2011-08-02 Thread Giulio Troccoli



On 02/08/11 07:40, Dominik Psenner wrote:

Hi,

having a fresh subversion repository doing this as preparation:

$ mkdir foo/
$ svn add foo
$ svn commit -m "test"
Adding  foo
Revision X sent.
$ rmdir foo
$ svn st
!   foo
$ svn delete foo
D   foo

And finally this command fails:

$ svn commit foo -m "fail"
svn: entry "foo" has no URL

This instead does work:

$ svn commit -m "works"
Delete  foo
Revision X sent.

svn commit behaves inconsistently depending on whether a PATH argument is
given or not. If it is a bug, it should get at least priority P2 because one
is unable to commit partial changes to the WC as in this scenario:

$ mkdir foo/
$ svn add foo
A   foo
$ svn commit -m "test"
Adding  foo
Revision X sent.
$ rmdir foo
$ svn st
!   foo
$ svn delete foo
D   foo
$ touch bar
$ touch foobar
$ svn add bar foobar
A   bar
A   foobar
$ svn commit foo bar
svn: entry "foo" has no URL

To get things done, one would have to backup foobar somewhere, revert
foobar, do the commit without PATH arguments and copy foobar over to the WC.
*eek*

Let me know what you think about this!

Greetings,
D.

I think SVN is behaving correctly. When you do svn commit foo you're 
telling Subversion to commit changes made in foo. There are no changes 
in foo because it's been deleted. The changes, instead, are in its 
parent directory, the one from where you issued your commands. That's 
why svn commi works, it assumes . as the path.