You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by Hyrum K Wright <hy...@wandisco.com> on 2011/08/24 00:03:42 UTC

Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

On Tue, Aug 23, 2011 at 3:07 PM, C. Michael Pilato <cm...@collab.net> wrote:
> On 08/23/2011 11:59 AM, Neels J Hofmeyr wrote:
>> On 08/23/2011 10:32 AM, Julian Foad wrote:
>>> Mark (or anyone), do you recognize the use case described by Clemens
>>> Anhuth in <http://subversion.tigris.org/issues/show_bug.cgi?id=3028>?
>>>
>>>   Use case (2) - Eclipse folder, from issue #3028
>>>
>>>   "For example we have a complete Eclipse instance in our svn
>>>   repository and we want to ignore every change in its directory
>>>   and below. Because Eclipse more or less at random creates and
>>>   deletes file from its own directory we have no way of knowing
>>>   which individual files may be change or deleted by starting
>>>   Eclipse. To avoid that an update creates files again that were
>>>   deleted by running Eclipse the ignore setting I am asking for
>>>   should also apply to updates. [...]"
>>
>> That's quite a pickle. I'm not intending to make holding stuff recursive,
>> because then we'd have to check every commit target up into its ancestors,
>> possibly even checking if the *repos* has a hold set on an ancestor. Ugh.
>>
>> So svn:hold will not support this use case. Maybe they can trick something
>> up using externals, too....... uh........ *drop*  (<-- a penny)
>>
>> Come to think of it... we *do* have file externals, too.
>> And, my goodness, it *is* *already* possible to create a global hold on a
>> file using file externals. It is just less convenient:
>
> Oh, dude.  You're talking now about hacks based on hacks, here.  It makes me
> hurt.  :-)
>
> I, too, have wanted a first-class solution for the "template problem".  Many
> times.
>
> I, too, have also (but on much less frequent occasion) wanted to prevent
> incoming updates to a particular file.
>
> Now, I had always assumed the right solution for the latter of those was
> so-called "sticky revisions" (yes, in the same sense that CVS used the term
> "sticky" for its tags, but less automatic).  You would update a file to a
> particular revision with a special --sticky flag, and Subversion would
> remember until further notice that you want to keep that file (or
> directory!) at that particular revision.  It's kinda like our sticky depth
> handling today, in fact, just that we're locking stuff in time instead of in
> space.  Or something.
>
> Of course, I actually doubt that blocking updates is that compelling of a
> use-case, and suspect that in terms of functionality beneficial to the
> majority of Subversion users, it falls *well* behind the ability to avoid
> accidentally committing one's own changes to a file (which itself falls
> *well* behind a whole host of other, more important features, if we're being
> honest).  And when I think about where the very idea of blocking updates
> takes us in terms of how that might affect, oh, merges and such ... well, I
> get more than a little nauseous.
>
> So back to what I would consider the primary deliverable of interest here:
> avoiding one's own accidental commits.  I'm leaning toward a hostile
> takeover of the changelist namespace (a late-breaking land grab where we say
> "svn:<whatever>" is ours ours ours) and a changelist-based solution.  A
> special changelist honored by our libsvn_client code which does what we're
> talking about here, shows up in 'svn status' like the others do, requires
> very little additional infrastructure, for which state changes are not
> versioned operations (such as they would be with the commits of the addition
> and removal of an svn:hold property), etc.

I'm not opposed to using the 'svn:' namespace for special changelists,
particularly since changelists aren't versioned, so you're not mucking
with data which may be in the historical record.  But special
changelists would be a nifty solution, we'd need to support multiple
changelists on a single item before going this route.  I wouldn't want
a special changelist to exclude standard ones.

-Hyrum

> But these are just my leanings.  I'm not deep enough into the consideration
> of all things relevant and tangential to formulate a clearer and more
> influential proposal.
>
> --
> C. Michael Pilato <cm...@collab.net>
> CollabNet   <>   www.collab.net   <>   Distributed Development On Demand
>
>



-- 

uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Stefan Sperling wrote on Wed, Aug 24, 2011 at 16:51:43 +0200:
> On Wed, Aug 24, 2011 at 05:01:25PM +0300, Daniel Shahaf wrote:
> > Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
> > > Changelists have been *designed* in the flipped-over wrong-way-round: they
> > > *include*, not exclude selected items. We'd have to implement this against
> > > its basic design. (Like using switch for externals, remember?)
> > 
> > Changelists were designed to group files.  What's fundamentally flawed in
> > 
> > % svn cl foo A/mu ./iota
> > % svn commit --depth=empty A/mu ./iota --except-cl=foo
> 
> You have to specify --except-cl every time you commit.
> With svn:hold as a property you set it once and forget about it.

I was making a general point about changelists, not about their use in
conjunction with svn:hold feature.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Aug 24, 2011 at 05:01:25PM +0300, Daniel Shahaf wrote:
> Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
> > Changelists have been *designed* in the flipped-over wrong-way-round: they
> > *include*, not exclude selected items. We'd have to implement this against
> > its basic design. (Like using switch for externals, remember?)
> 
> Changelists were designed to group files.  What's fundamentally flawed in
> 
> % svn cl foo A/mu ./iota
> % svn commit --depth=empty A/mu ./iota --except-cl=foo

You have to specify --except-cl every time you commit.
With svn:hold as a property you set it once and forget about it.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by "C. Michael Pilato" <cm...@collab.net>.
On 08/24/2011 04:36 PM, Daniel Shahaf wrote:
> Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 22:04:11 +0200:
>> On 08/24/2011 04:01 PM, Daniel Shahaf wrote:
>>> Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
>>>> Changelists have been *designed* in the flipped-over wrong-way-round: they
>>>> *include*, not exclude selected items. We'd have to implement this against
>>>> its basic design. (Like using switch for externals, remember?)
>>>
>>> Changelists were designed to group files.  What's fundamentally flawed in
>>>
>>> % svn cl foo A/mu ./iota
>>> % svn commit --depth=empty A/mu ./iota --except-cl=foo
>>
>> Usually the code goes like "if there is a changelist, act on the node only
>> when it is part of the changelist." ...well, it's just what I remember
>> faintly, admittedly. Is that true?
>>
> 
> My recollection is that 'svn $subcommand foo --changelist bar' applies
> to one of:
> 
> - the subset of descendants of that are in changelist 'bar';
> - both to foo and to members of 'bar'
> 
> where some subcommands behave differently than others.

There should be no difference in behavior between subcommands.  The
documented behavior of changelists is to operate as filters only.  So, 'svn
$subcommand foo --changelist bar' operates on the subset of would-be targets
were --changelist not specified which are members of the specific changelist.

This means, for example, that 'svn info --changelist foo' will show nothing
because 'svn info' is depth-zero by default and directories can't be in
changelists, rather than showing all children of $CWD which are in the 'foo'
changelist.

-- 
C. Michael Pilato <cm...@collab.net>
CollabNet   <>   www.collab.net   <>   Distributed Development On Demand


Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 22:04:11 +0200:
> On 08/24/2011 04:01 PM, Daniel Shahaf wrote:
> > Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
> >> Changelists have been *designed* in the flipped-over wrong-way-round: they
> >> *include*, not exclude selected items. We'd have to implement this against
> >> its basic design. (Like using switch for externals, remember?)
> > 
> > Changelists were designed to group files.  What's fundamentally flawed in
> > 
> > % svn cl foo A/mu ./iota
> > % svn commit --depth=empty A/mu ./iota --except-cl=foo
> 
> Usually the code goes like "if there is a changelist, act on the node only
> when it is part of the changelist." ...well, it's just what I remember
> faintly, admittedly. Is that true?
> 

My recollection is that 'svn $subcommand foo --changelist bar' applies
to one of:

- the subset of descendants of that are in changelist 'bar';
- both to foo and to members of 'bar'

where some subcommands behave differently than others.

> If it isn't, there's nothing wrong with your command at all. In fact that
> would be quite nice.
> 
> But from the ignore-on-commit perspective, you still need to remember to
> supply it at commit time.
> You'd need to make the changelist always secretly self-acting, and thus the
> changelist must have a special name, as Hyrum kindly pointed out :)
> If I can instead create a simple property to achieve the same, I'm happier.
> 

We could decide that the special changelist is always applied, unless
a node has been explicitly named as a commit target.  It wouldn't even
require a revision of the API signature :-)

> And your command example doesn't give you the ability to propagate it
> globally without even coding a single additional line of code. (none except
> warning messages we may want to introduce.)
> 

True.  But you could add [auto-changelists] to ~/.subversion/config...

(which doesn't solve the 'global propagation' problem, but helps a little)

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Neels J Hofmeyr <ne...@elego.de>.
On 08/24/2011 04:01 PM, Daniel Shahaf wrote:
> Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
>> Changelists have been *designed* in the flipped-over wrong-way-round: they
>> *include*, not exclude selected items. We'd have to implement this against
>> its basic design. (Like using switch for externals, remember?)
> 
> Changelists were designed to group files.  What's fundamentally flawed in
> 
> % svn cl foo A/mu ./iota
> % svn commit --depth=empty A/mu ./iota --except-cl=foo

Usually the code goes like "if there is a changelist, act on the node only
when it is part of the changelist." ...well, it's just what I remember
faintly, admittedly. Is that true?

If it isn't, there's nothing wrong with your command at all. In fact that
would be quite nice.

But from the ignore-on-commit perspective, you still need to remember to
supply it at commit time.
You'd need to make the changelist always secretly self-acting, and thus the
changelist must have a special name, as Hyrum kindly pointed out :)
If I can instead create a simple property to achieve the same, I'm happier.

And your command example doesn't give you the ability to propagate it
globally without even coding a single additional line of code. (none except
warning messages we may want to introduce.)


Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 15:32:20 +0200:
> Changelists have been *designed* in the flipped-over wrong-way-round: they
> *include*, not exclude selected items. We'd have to implement this against
> its basic design. (Like using switch for externals, remember?)

Changelists were designed to group files.  What's fundamentally flawed in

% svn cl foo A/mu ./iota
% svn commit --depth=empty A/mu ./iota --except-cl=foo

?

Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Julian Foad <ju...@wandisco.com>.
Daniel Shahaf wrote:
> Julian Foad wrote on Wed, Aug 24, 2011 at 13:23:53 +0100:
> > On Wed, 2011-08-24 at 15:10 +0300, Daniel Shahaf wrote:
> > > Julian Foad wrote on Wed, Aug 24, 2011 at 11:13:09 +0100:
> > > > The set of changelists to use is already passed into the libsvn_client
> > > > API from the client.  Pretty much all we need is a way to specify sets
> > > > of changelists more flexibly.  For the main functionality, the 'commit'
> > > > subcommand would specify "select everything except changelist
> > > > 'svn:ignore-on-commit'" unless overridden.  That would make the file be
> > > 
> > > Does this require negative changelists?  Currently changelists are
> > > 'select only members of this changelist', but you're proposing 'select except
> > > members of this changelist'.
> > 
> > Yes.  [...] So semantically it's not
> > new.  It does need an API change of one kind or another.
> 
> Fair enough.
> 
> For simplicity, we can retain the status quo where no changelists are
> allowed on directories?  Otherwise we'd have to decide how a negative
> changelist behaves when applied to a directory.

Yes, I'm assuming we retain the status quo.

- Julian


> (It could mean changelists are to be coupled with a depth value; but
> let's not open that can of worms unless we have to.)



Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Daniel Shahaf <da...@elego.de>.
Julian Foad wrote on Wed, Aug 24, 2011 at 13:23:53 +0100:
> On Wed, 2011-08-24 at 15:10 +0300, Daniel Shahaf wrote:
> > Julian Foad wrote on Wed, Aug 24, 2011 at 11:13:09 +0100:
> > > > > C. Michael Pilato wrote:
> > > > >> So back to what I would consider the primary deliverable of interest here:
> > > > >> avoiding one's own accidental commits.  I'm leaning toward [...]  A
> > > > >> special changelist honored by our libsvn_client code which does what we're
> > > > >> talking about here, shows up in 'svn status' like the others do, requires
> > > > >> very little additional infrastructure, for which state changes are not
> > > > >> versioned operations (such as they would be with the commits of the addition
> > > > >> and removal of an svn:hold property), etc.
> > > 
> > > I like the sound of this, too, as the local-only part of the solution.
> > > See below for the centralized part of the solution.
> > > 
> > > The set of changelists to use is already passed into the libsvn_client
> > > API from the client.  Pretty much all we need is a way to specify sets
> > > of changelists more flexibly.  For the main functionality, the 'commit'
> > > subcommand would specify "select everything except changelist
> > > 'svn:ignore-on-commit'" unless overridden.  That would make the file be
> > 
> > Does this require negative changelists?  Currently changelists are
> > 'select only members of this changelist', but you're proposing 'select except
> > members of this changelist'.
> 
> Yes.  If that sounds like a non-trivial extension of the changelist
> semantics, it's not.  Imagine we have an API to retrieve a list of all
> the changelist names and a pseudo-changelist indicator to denote "files
> that are not in any changelist".  Then we could simply map that request
> into a select-multiple-changelists request.  So semantically it's not
> new.  It does need an API change of one kind or another.
> 

Fair enough.

For simplicity, we can retain the status quo where no changelists are
allowed on directories?  Otherwise we'd have to decide how a negative
changelist behaves when applied to a directory.

(It could mean changelists are to be coupled with a depth value; but
let's not open that can of worms unless we have to.)

> - Julian
> 
> 

Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Julian Foad <ju...@wandisco.com>.
On Wed, 2011-08-24 at 15:10 +0300, Daniel Shahaf wrote:
> Julian Foad wrote on Wed, Aug 24, 2011 at 11:13:09 +0100:
> > > > C. Michael Pilato wrote:
> > > >> So back to what I would consider the primary deliverable of interest here:
> > > >> avoiding one's own accidental commits.  I'm leaning toward [...]  A
> > > >> special changelist honored by our libsvn_client code which does what we're
> > > >> talking about here, shows up in 'svn status' like the others do, requires
> > > >> very little additional infrastructure, for which state changes are not
> > > >> versioned operations (such as they would be with the commits of the addition
> > > >> and removal of an svn:hold property), etc.
> > 
> > I like the sound of this, too, as the local-only part of the solution.
> > See below for the centralized part of the solution.
> > 
> > The set of changelists to use is already passed into the libsvn_client
> > API from the client.  Pretty much all we need is a way to specify sets
> > of changelists more flexibly.  For the main functionality, the 'commit'
> > subcommand would specify "select everything except changelist
> > 'svn:ignore-on-commit'" unless overridden.  That would make the file be
> 
> Does this require negative changelists?  Currently changelists are
> 'select only members of this changelist', but you're proposing 'select except
> members of this changelist'.

Yes.  If that sounds like a non-trivial extension of the changelist
semantics, it's not.  Imagine we have an API to retrieve a list of all
the changelist names and a pseudo-changelist indicator to denote "files
that are not in any changelist".  Then we could simply map that request
into a select-multiple-changelists request.  So semantically it's not
new.  It does need an API change of one kind or another.

- Julian



Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Daniel Shahaf <da...@elego.de>.
Julian Foad wrote on Wed, Aug 24, 2011 at 11:13:09 +0100:
> > > C. Michael Pilato wrote:
> > >> So back to what I would consider the primary deliverable of interest here:
> > >> avoiding one's own accidental commits.  I'm leaning toward [...]  A
> > >> special changelist honored by our libsvn_client code which does what we're
> > >> talking about here, shows up in 'svn status' like the others do, requires
> > >> very little additional infrastructure, for which state changes are not
> > >> versioned operations (such as they would be with the commits of the addition
> > >> and removal of an svn:hold property), etc.
> 
> I like the sound of this, too, as the local-only part of the solution.
> See below for the centralized part of the solution.
> 
> The set of changelists to use is already passed into the libsvn_client
> API from the client.  Pretty much all we need is a way to specify sets
> of changelists more flexibly.  For the main functionality, the 'commit'
> subcommand would specify "select everything except changelist
> 'svn:ignore-on-commit'" unless overridden.  That would make the file be

Does this require negative changelists?  Currently changelists are
'select only members of this changelist', but you're proposing 'select except
members of this changelist'.

> ignored on commit but otherwise not special (so it would show up in
> diff, etc.).
> 
> And we could define a changelist 'svn:ignore-local-mods' that is ignored
> in all operations that would normally see the local mods - diff, status,
> copy, export, and even cat.  Some of those operations might need to be
> extended to honour changelists if they don't already.  For these
> subcommands the client might specify "all except changelists
> svn:ignore-on-commit and svn:ignore-local-mods", unless overridden, for
> example.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Peter Samuelson <pe...@p12n.org>.
[Stefan Sperling]
> However, the merge meisters I've met are usually more competent in
> using svn than the average developer in the same organisation.  Often
> they're even the local svn gurus. I would trust them to give special
> consideration for files with svn:hold.  If the merge meister cannot
> handle this it's possible to fall back to the template solution
> people are using now.

I do not have the faith in mergemeisters you do.  I think when you
merge to a file that is on hold,

1) If you have no local mods to this file, it should somehow be marked
   to be exempt from the hold until it is committed.  (A temporary file
   property, presumably.)

2) If you do have local mods, this should be treated similar to a
   textual conflict: that file can't be committed (and a recursive
   commit on the directory the file is in will also fail) until it is
   resolved manually in some way.  The manual resolution moves the file
   to state 1).

Of course, it's still possible to get into a bad situation by doing a
merge and _then_ some local mods that are not supposed to be committed.
I'd be willing to just say "so don't do that, then".


Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Branko Čibej <br...@xbc.nu>.
On 24.08.2011 19:56, Mark Phippard wrote:
> On Wed, Aug 24, 2011 at 1:50 PM, Stefan Sperling <stsp@elego.de
> <ma...@elego.de>> wrote:
>
>
>     I don't like this because it only addresses the merge-meister use
>     case.
>     Developers perform merges, too.
>     The developer who does not want to commit local changes that
>     existed prior
>     to the merge now has to be careful to put files back on hold after the
>     merge command has removed files from the special changelist.
>
>
>
> We could probably go round and round on this forever if we want to, right?

Maybe it's time to just drop it and concentrate on 1.7.0? This thread
has become way too long to follow, and some of the things I read are
such blathering nonsense that it doesn't bear mentioning.

I suggest everyone just steps away from this and lets it cool down for a
month or two, /then/ come up with a proper feature proposal.

-- Brane


Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 1:50 PM, Stefan Sperling <st...@elego.de> wrote:

>
> I don't like this because it only addresses the merge-meister use case.
> Developers perform merges, too.
> The developer who does not want to commit local changes that existed prior
> to the merge now has to be careful to put files back on hold after the
> merge command has removed files from the special changelist.
>


We could probably go round and round on this forever if we want to, right?
 I could just as easily say that the inexperienced developer is less likely
to be doing merges, so we do not need to optimize for them.  Or I could say
that it is better that the credentials of an inexperienced developer are
committed to the repository, then having them not commit a critical
configuration change.

I think the greater point is that this issue is more complicated than it
sounded originally, which is why I also point out we do not HAVE to do
anything at all.  Neels will say what is it going to hurt to have a feature
that someone does not have to use.  I say it hurts us anytime we add a
feature that can create confusion and problems.  Who is to say some
developer does not add this property to address their needs and then this
gets rippled out to everyone and creates problems for them that the
developer did not consider.  We are the ones that are going to be left to
answer it.  We really want our answer to be that you do not have to use the
feature or you can write a hook to make sure no one does?  BTW, that hook
would not be trivial.

-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Aug 24, 2011 at 01:33:33PM -0400, Mark Phippard wrote:
> You are thinking about this from the perspective of a developer and having
> them not accidentally commit their password.  I am thinking of this from a
> merge meister type persona that has a clean working copy and is simply
> handling the merge tasks for a release.  They would merge some revisions and
> do a commit that does not include all the changes.  Other than some warnings
> they do not read, they would have no idea they lost changes.

I recognise that this can be a problem.

However, the merge meisters I've met are usually more competent
in using svn than the average developer in the same organisation.
Often they're even the local svn gurus. I would trust them to give
special consideration for files with svn:hold.
If the merge meister cannot handle this it's possible to fall back
to the template solution people are using now.

> Changelists potentially solve this problem in two distinct ways:
> 
> 1) Suppose all we implement is a client-side changelist feature (like
> TortoiseSVN).  In my scenario, since this is a client-initiated manual
> process it simply does not apply because the user has never set them up.

Right.

> 2) Suppose we add some automation, so that certain files are places on
> changelists automatically.  Because we have two pieces to the puzzle, the
> changelist and the metadata that automatically puts the file on the
> changelist, we have more flexibility.  Merge could simply be extended to
> automatically remove files from this special changelist.  Likewise, commit
> could automatically put the files back on the changelist.

I don't like this because it only addresses the merge-meister use case.
Developers perform merges, too.
The developer who does not want to commit local changes that existed prior
to the merge now has to be careful to put files back on hold after the
merge command has removed files from the special changelist.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 1:26 PM, Stefan Sperling <st...@elego.de> wrote:

> On Wed, Aug 24, 2011 at 01:12:26PM -0400, Mark Phippard wrote:
> > On Wed, Aug 24, 2011 at 1:09 PM, Stefan Sperling <st...@elego.de> wrote:
> >
> > > On Wed, Aug 24, 2011 at 12:05:00PM -0400, Mark Phippard wrote:
> > > > Merge remains a problem.  Namely that if merge updates files with the
> > > > svn:hold property the changes to those files will not be committed.
> > >
> > > I would say just let it be that way. It shouldn't matter whether
> > > local mods come from merges or from manual edits.
> > >
> > > If the changes being merged into a held file are important,
> > > then there's a user error -- the file should probably not
> > > have been held in the first place.
> > >
> >
> > I disagree.  When I have wanted this feature in the past it has been for
> > server apps where I have a default configuration file with various
> > properties.  Developers often need to insert passwords in these files and
> do
> > not want to commit, but it is very common for the file to evolve over
> time
> > and add new properties etc.  I would want and expect those values to
> merge
> > and commit between branches.
>
> What is so special about merge? A merge creates local changes.
> In the proposed design/implementation you can commit any local
> changes by passing the --do-not-hold option.
>
> Suppose you have a local file my-db.conf which contains a secret
> database password as a local change.
> You merge from another branch, and this sets the svn:eol-style
> property on this file.
> You want to keep the propchange, but don't want to commit the
> password.
>
> The solution is to temporarily remove the password from the file,
> commit the file (i.e. just the propchange) with --do-not-hold,
> and then add the password back.
>

You are thinking about this from the perspective of a developer and having
them not accidentally commit their password.  I am thinking of this from a
merge meister type persona that has a clean working copy and is simply
handling the merge tasks for a release.  They would merge some revisions and
do a commit that does not include all the changes.  Other than some warnings
they do not read, they would have no idea they lost changes.


>
> I don't see how changelists could make this any easier. Could they?
>

Changelists potentially solve this problem in two distinct ways:

1) Suppose all we implement is a client-side changelist feature (like
TortoiseSVN).  In my scenario, since this is a client-initiated manual
process it simply does not apply because the user has never set them up.

2) Suppose we add some automation, so that certain files are places on
changelists automatically.  Because we have two pieces to the puzzle, the
changelist and the metadata that automatically puts the file on the
changelist, we have more flexibility.  Merge could simply be extended to
automatically remove files from this special changelist.  Likewise, commit
could automatically put the files back on the changelist.


-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Aug 24, 2011 at 01:12:26PM -0400, Mark Phippard wrote:
> On Wed, Aug 24, 2011 at 1:09 PM, Stefan Sperling <st...@elego.de> wrote:
> 
> > On Wed, Aug 24, 2011 at 12:05:00PM -0400, Mark Phippard wrote:
> > > Merge remains a problem.  Namely that if merge updates files with the
> > > svn:hold property the changes to those files will not be committed.
> >
> > I would say just let it be that way. It shouldn't matter whether
> > local mods come from merges or from manual edits.
> >
> > If the changes being merged into a held file are important,
> > then there's a user error -- the file should probably not
> > have been held in the first place.
> >
> 
> I disagree.  When I have wanted this feature in the past it has been for
> server apps where I have a default configuration file with various
> properties.  Developers often need to insert passwords in these files and do
> not want to commit, but it is very common for the file to evolve over time
> and add new properties etc.  I would want and expect those values to merge
> and commit between branches.

What is so special about merge? A merge creates local changes.
In the proposed design/implementation you can commit any local
changes by passing the --do-not-hold option.

Suppose you have a local file my-db.conf which contains a secret
database password as a local change.
You merge from another branch, and this sets the svn:eol-style
property on this file.
You want to keep the propchange, but don't want to commit the
password.

The solution is to temporarily remove the password from the file,
commit the file (i.e. just the propchange) with --do-not-hold,
and then add the password back.

I don't see how changelists could make this any easier. Could they?

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 1:09 PM, Stefan Sperling <st...@elego.de> wrote:

> On Wed, Aug 24, 2011 at 12:05:00PM -0400, Mark Phippard wrote:
> > Merge remains a problem.  Namely that if merge updates files with the
> > svn:hold property the changes to those files will not be committed.
>
> I would say just let it be that way. It shouldn't matter whether
> local mods come from merges or from manual edits.
>
> If the changes being merged into a held file are important,
> then there's a user error -- the file should probably not
> have been held in the first place.
>

I disagree.  When I have wanted this feature in the past it has been for
server apps where I have a default configuration file with various
properties.  Developers often need to insert passwords in these files and do
not want to commit, but it is very common for the file to evolve over time
and add new properties etc.  I would want and expect those values to merge
and commit between branches.



-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Aug 24, 2011 at 12:05:00PM -0400, Mark Phippard wrote:
> There is nothing wrong with adding it and I believe I have said that.  I
> have also said that I was in favor of solving the issue.  All I am saying is
> that Neels has done some good work looking at what that feature means in its
> entirety and he has uncovered a number of things to consider. He happens to
> not think they are a big deal, which is fine.  I am simply saying that one
> option we have is to not implement the feature until we have a better answer
> for those considerations.

OK, we're on the same page then.
I agree we need to agree on the points that are still unclear.

> Merge remains a problem.  Namely that if merge updates files with the
> svn:hold property the changes to those files will not be committed.

I would say just let it be that way. It shouldn't matter whether
local mods come from merges or from manual edits.

If the changes being merged into a held file are important,
then there's a user error -- the file should probably not
have been held in the first place.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 11:44 AM, Stefan Sperling <st...@elego.de> wrote:

> On Wed, Aug 24, 2011 at 11:08:34AM -0400, Mark Phippard wrote:
> > I do not think we HAVE to do this feature.  It would be nice, but it
> seems
> > to raise some challenging problems that make it less nice.  Personally, I
> > just think we should not do anything, including the changelists, and
> leave
> > the recommendation of using a template.
>
> What's wrong with adding this feature when there are clearly
> people who need it? If the template solution covered all needs
> this thread wouldn't even exist.
>

There is nothing wrong with adding it and I believe I have said that.  I
have also said that I was in favor of solving the issue.  All I am saying is
that Neels has done some good work looking at what that feature means in its
entirety and he has uncovered a number of things to consider. He happens to
not think they are a big deal, which is fine.  I am simply saying that one
option we have is to not implement the feature until we have a better answer
for those considerations.  That is all I am saying.  If implementing the
feature requires us to do a bunch of ugly things we do not like, then maybe
we just should not do it until we have a better answer.

We seem to be in agreement that this feature should not impact update.  So
that is one problem off the table.  AFAIK, there are open issues asking for
this though so we have to be in agreement we do NOT agree that this should
be done.

Merge remains a problem.  Namely that if merge updates files with the
svn:hold property the changes to those files will not be committed.  I think
the changelist design gives us more options in this area, but maybe they are
too hacky.

-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Stefan Sperling <st...@elego.de>.
On Wed, Aug 24, 2011 at 11:08:34AM -0400, Mark Phippard wrote:
> I do not think we HAVE to do this feature.  It would be nice, but it seems
> to raise some challenging problems that make it less nice.  Personally, I
> just think we should not do anything, including the changelists, and leave
> the recommendation of using a template.

What's wrong with adding this feature when there are clearly
people who need it? If the template solution covered all needs
this thread wouldn't even exist.

Overall, I think this thread got hung up in details.
It seems a bit early to discuss implementation details (changelists
vs. props) when there isn't even agreement on the desired feature set.
Can we focus on that first, and then argue about how to implement it?

In http://svn.haxx.se/dev/archive-2011-08/0469.shtml Julian suggested
to create a document in style of a referance manual to document what
we really want. I think this would be a good next step if it hasn't
already happened.

My own view on this is as follows:

Ideas floating in this thread have covered behaviour of commit, update,
diff, status, merge, and repository-wide configuration of held nodes.

In my mind, the most important items are, in order:
 - behaviour of commit
 - repository-wide configuration of held nodes

I think we should initially aim for some minimal solution which
addresses these points and leaves room for further extension.
I don't really care how it's implemented.

Making additional subcommands do fancy things with held-back nodes is
nice but not really necessary to solve the problems this feature is
supposed to address.

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Therieau <mt...@gmail.com>.
Earlier in this discussion I saw link to the FAQ which recommends using a
"template" file and a manual copy to an unversioned file (an instance of the
template).  http://subversion.apache.org/faq.html#ignore-commit

I can see how that approach handles part of the
please-help-me-with-these-semi-custom-ide-project-files requests, but also
leaves some key facets up to a manual procedure, like: "you just checked out
a new working copy? don't forget to copy the template project file into the
real project file" and "hey: I just updated the template project file; time
for everyone to merge these changes into their real project files (or just
copy the template again, understanding you may get re-prompted for login
credentials, etc)"

On the other hand, the template/instance procedure neatly avoids the "oops,
I just committed my local changes back to the repository" problems, since
the instance file (the one that the IDE mucks around with) never gets
committed.

What if svn were to grow a feature that directly supported this
template/instance pattern?  Possibly as a svn:template property set on the
template file (and maybe the value of svn:template being name of the
instance file?).  When "svn checkout" creates the template file, it would
also copy the template file to the instance file.  When "svn update" or "svn
merge" applies changes to the template file, the same changes would be
applied to the instance file (of course this is where things get a bit
tricky).  Allowing local changes to exist in the instance file would, of
course, be essential, but the instance file would never be committed back to
the repository.

I'm sure there are a list of other tricky issues with this approach, but my
sense is that it may be closer to the mark than a single file that serves
two purposes.  Need to set something for your local working copy? -- changes
go into the instance file and don't worry: those changes won't be committed.
 Need to make changes that get committed back to the repository so that
other working copies can get them? -- those changes go into the template
file.

regards,
markt

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Daniel Shahaf <d....@daniel.shahaf.name>.
Neels J Hofmeyr wrote on Wed, Aug 24, 2011 at 23:14:34 +0200:
> On 08/24/2011 05:10 PM, Mark Phippard wrote:
> > BTW, admins can also lock files in the repository to prevent accidental
> > commits of sensitive information.
> 
> That's a good point, actually.
> 
> If I want to add an intentional change, I steal the lock. Then lock it back
> (using a separate WC to lock the file for myself). The commit bails even
> before the modifications are sent over the wire. It's a central config.
> 

Another option: use a pre-commit hook instead of locks.  It does mean
the local changes will be sent to the server --- which may be a problem.
But then, you have the same problem with people (or admins) stealing the
locks...

> But: Say a template path is locked; the result is that everyone with a
> filled-in template now gets failing commits all the time. Now you need a
> convenience thing that excludes this locked file from commit locally.
> 
> This still requires specific action on every single checkout to block the
> exact right files. Users will be forced to do that, they can't run a plain
> 'svn commit' and succeed.
> 
> This would cover all the needs *except* that a new checkout should
> local-hold automatically without further user action.
> 
> (So we can add a prop for that, ok, and then we can use that prop and don't
> need to duplicate with a changelists based implementation)
> 
> ~Neels
> 



Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Neels J Hofmeyr <ne...@elego.de>.
On 08/24/2011 05:10 PM, Mark Phippard wrote:
> BTW, admins can also lock files in the repository to prevent accidental
> commits of sensitive information.

That's a good point, actually.

If I want to add an intentional change, I steal the lock. Then lock it back
(using a separate WC to lock the file for myself). The commit bails even
before the modifications are sent over the wire. It's a central config.

But: Say a template path is locked; the result is that everyone with a
filled-in template now gets failing commits all the time. Now you need a
convenience thing that excludes this locked file from commit locally.

This still requires specific action on every single checkout to block the
exact right files. Users will be forced to do that, they can't run a plain
'svn commit' and succeed.

This would cover all the needs *except* that a new checkout should
local-hold automatically without further user action.

(So we can add a prop for that, ok, and then we can use that prop and don't
need to duplicate with a changelists based implementation)

~Neels


Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 11:08 AM, Mark Phippard <ma...@gmail.com> wrote:

> On Wed, Aug 24, 2011 at 9:32 AM, Neels J Hofmeyr <ne...@elego.de> wrote:
>
>> We'd have to change the changelists feature, beyond recognition.
>> Instead of adding a quick propget in basically one or two places,
>> we do what, overhaul changelists + plaster it with special conditions.
>>
>
> Why exactly?  It seems we can declare anything on a certain named
> changelist will be ignored from commit.  All we have to do is change the
> commit code to do this ignoring.  IOW, we could just recreate the
> TortoiseSVN feature and nothing more.  I do not see where this changes the
> changelist code.
>
> But ok, we can do that. Still, the question remains: what about Johan &
>> Co.,
>> that only have a use for ignore-on-commit if it is *centrally
>> configurable*.
>>
>
> I do not think we HAVE to do this feature.  It would be nice, but it seems
> to raise some challenging problems that make it less nice.  Personally, I
> just think we should not do anything, including the changelists, and leave
> the recommendation of using a template.
>

BTW, admins can also lock files in the repository to prevent accidental
commits of sensitive information.


-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

Re: svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Mark Phippard <ma...@gmail.com>.
On Wed, Aug 24, 2011 at 9:32 AM, Neels J Hofmeyr <ne...@elego.de> wrote:

> We'd have to change the changelists feature, beyond recognition.
> Instead of adding a quick propget in basically one or two places,
> we do what, overhaul changelists + plaster it with special conditions.
>

Why exactly?  It seems we can declare anything on a certain named changelist
will be ignored from commit.  All we have to do is change the commit code to
do this ignoring.  IOW, we could just recreate the TortoiseSVN feature and
nothing more.  I do not see where this changes the changelist code.

But ok, we can do that. Still, the question remains: what about Johan & Co.,
> that only have a use for ignore-on-commit if it is *centrally
> configurable*.
>

I do not think we HAVE to do this feature.  It would be nice, but it seems
to raise some challenging problems that make it less nice.  Personally, I
just think we should not do anything, including the changelists, and leave
the recommendation of using a template.

-- 
Thanks

Mark Phippard
http://markphip.blogspot.com/

svn:ignore-on-commit changelist -- was: dump svn:hold, long live file externals?? (and discussing recursive hold)

Posted by Neels J Hofmeyr <ne...@elego.de>.
I don't get why you guys are even considering changelists :)
What's the killer trait of changelists that makes this pig fly higher than a
single lightweight boolean prop? I don't see one.

I think using changelists will end up being a Dirty Hack, either
inconvenient or overly special-cased, no middle way available. It will spawn
a lot of impenetrable code, compared to just a propget.

If you're interested, read these elaborate reasons...


Changelists have been *designed* in the flipped-over wrong-way-round: they
*include*, not exclude selected items. We'd have to implement this against
its basic design. (Like using switch for externals, remember?)

Mark Phippard also talked about this kind of solution, adding a special
changelist to exclude items from commit. I've thought it through long before
proposing the svn:hold prop. My argument still holds:

We'd have to change the changelists feature, beyond recognition.
Instead of adding a quick propget in basically one or two places,
we do what, overhaul changelists + plaster it with special conditions.

But ok, we can do that. Still, the question remains: what about Johan & Co.,
that only have a use for ignore-on-commit if it is *centrally configurable*.
You say, jolly, we just add the same prop neels proposed, to manipulate
local changelists. But the prop alone is able to do the exact same thing
without even touching changelists, and in fact would achieve the same goal
with just a tiny patch of code; most of the infrastructure is already there,
entirely for free, *exactly* in the way it is needed, no flipside
special-casing required.

User says: "what, I need to set a changelist *and* a prop? o_O"

If we're *anyway* going to have a prop, which *does* provide all information
needed, then I don't see any need to complicate this. If you're so eager to
have a local-only implementation, just keep the prop out of the repos.
(I wouldn't push that beyond telling users to add a pre-commit hook, though.)

Do changelists make anything easier?

- Yes, might spare us adding an 'H' notification on 'status'.

- Changelists are kept out of version control. But svn:ignore-on-commit will
be only as long as it remains a local feature. The exact same is achieved
when the svn:hold propset is simply never committed.

- No, changelists do not solve the 'merge-held-items' situation. After
getting a merge in on an svn:ignore-on-commit'ed file, it is still not
committed along with the rest of the merge, just like with a plain prop.
Furthermore, if you do force a commit, then, guess what, the items silently
disappear from the 'ignore-on-commit' changelist! Due to their basic design!
Unless we add yet another special case there. Ugh.
Or the merger person has to remember which they were and adds them back to
the list manually. Ugh.
You could argue that the global 'svn:hold' prop is still set, and after a
merge-commit, you can automatically add those back to the changelist. I
think this is a far more complex, slow and error-prone solution than what I
proposed (just flag those files that were on hold and also received a merge,
and block the commit until the user explicitly decides what to do, using a
given cmdline option. Or by removing flags manually if desired).

- (Sure, implementing this might gain the changelists feature some useful
cmdline options, *if* we implement them in a general fashion instead of
triggering on a special name only. -- that's besides the point though.)

- (I guess that setting a prop on a node directly potentially makes faster
code than employing a look-up in a special list. But this might actually not
be true.)


-1, IMO we should totally not have an svn:ignore-on-commit changelist.
Though Tortoise devs might have liked that :)

~Neels


Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Julian Foad <ju...@wandisco.com>.
> > C. Michael Pilato wrote:
> >> Neels J Hofmeyr wrote:
> >>> Julian Foad wrote:
> >>>>   Use case (2) - Eclipse folder, from issue #3028
> >>>>
> >>>>   "For example we have a complete Eclipse instance in our svn
> >>>>   repository and we want to ignore every change in its directory
> >>>>   and below. [...]"
> >>>
> >>> That's quite a pickle. I'm not intending to make holding stuff recursive,
> >>> because then we'd have to check every commit target up into its ancestors,
> >>> possibly even checking if the *repos* has a hold set on an ancestor. Ugh.
[...]
> >>> And, my goodness, it *is* *already* possible to create a global hold on a
> >>> file using file externals. [...]

+1 on the idea of building a new feature on top of an existing
infrastructure.  It reduces the cognitive load on the user.  We need to
keep in mind that many users don't want or need to learn all about every
feature of Subversion.  If a new feature can be described in two
sentences in terms of another feature, that's a *huge* win.

But ...

> >> Oh, dude.  You're talking now about hacks based on hacks, here.  It makes me
> >> hurt.  :-)

... right, -0.9 on trying to use the externals code as such an
infrastructure, in its current state.

[...]
> >> So back to what I would consider the primary deliverable of interest here:
> >> avoiding one's own accidental commits.  I'm leaning toward [...]  A
> >> special changelist honored by our libsvn_client code which does what we're
> >> talking about here, shows up in 'svn status' like the others do, requires
> >> very little additional infrastructure, for which state changes are not
> >> versioned operations (such as they would be with the commits of the addition
> >> and removal of an svn:hold property), etc.

I like the sound of this, too, as the local-only part of the solution.
See below for the centralized part of the solution.

The set of changelists to use is already passed into the libsvn_client
API from the client.  Pretty much all we need is a way to specify sets
of changelists more flexibly.  For the main functionality, the 'commit'
subcommand would specify "select everything except changelist
'svn:ignore-on-commit'" unless overridden.  That would make the file be
ignored on commit but otherwise not special (so it would show up in
diff, etc.).

And we could define a changelist 'svn:ignore-local-mods' that is ignored
in all operations that would normally see the local mods - diff, status,
copy, export, and even cat.  Some of those operations might need to be
extended to honour changelists if they don't already.  For these
subcommands the client might specify "all except changelists
svn:ignore-on-commit and svn:ignore-local-mods", unless overridden, for
example.

> Hyrum K Wright wrote:
> > [...] we'd need to support multiple
> > changelists on a single item before going this route.  I wouldn't want
> > a special changelist to exclude standard ones.

I don't see a need for this file to belong to multiple changelists.
Belonging to changelist XXX says "The changes in this file are part of
feature/change/local-experiment XXX".  If changes in this file are to be
ignored, then I don't see it making any sense for this file to belong to
any other changelist, unless and until the user decides that the changes
are not to be ignored.

Most of the time, the user will put the file in changelist
'svn:ignore-on-commit' and no other changes the user is making will want
to include that file.  When the user wants to commit a change to that
file, he/she will either specify "--cl svn:ignore-on-commit" (with or
without other changelist(s), as appropriate) or will move this file into
a different changelist (or none) before commit and move it back into the
special changelist after commit.

Johan Corveleyn wrote:
> IMHO simply using changelists lacks the most important part of the
> feature: the ability to set/configure/annotate this centrally. [...]

Let's not dismiss changelists simply because they don't provide the
*whole* solution.  This may sound like over-complication, but seriously
consider building on top of that.  It's looking like changelists could
provide a decent solution for the local behaviour.  On top of that, we
could provide exactly the 'svn:hold' property mechanism that Neels
already described, but instead of implementing checks for that property
directly, it could be treated as an instruction to the client to put the
file into the 'svn:ignore-on-commit' changelist (detail: if it's not
already in a changelist).

I think it's worth fleshing out a proposal using this approach.

- Julian



Re: dump svn:hold, long live file externals?? (and discussing recursive hold) -- was: bring on your concerns about svn:hold, please

Posted by Johan Corveleyn <jc...@gmail.com>.
On Wed, Aug 24, 2011 at 12:03 AM, Hyrum K Wright
<hy...@wandisco.com> wrote:
> On Tue, Aug 23, 2011 at 3:07 PM, C. Michael Pilato <cm...@collab.net> wrote:
>> On 08/23/2011 11:59 AM, Neels J Hofmeyr wrote:
>>> On 08/23/2011 10:32 AM, Julian Foad wrote:
>>>> Mark (or anyone), do you recognize the use case described by Clemens
>>>> Anhuth in <http://subversion.tigris.org/issues/show_bug.cgi?id=3028>?
>>>>
>>>>   Use case (2) - Eclipse folder, from issue #3028
>>>>
>>>>   "For example we have a complete Eclipse instance in our svn
>>>>   repository and we want to ignore every change in its directory
>>>>   and below. Because Eclipse more or less at random creates and
>>>>   deletes file from its own directory we have no way of knowing
>>>>   which individual files may be change or deleted by starting
>>>>   Eclipse. To avoid that an update creates files again that were
>>>>   deleted by running Eclipse the ignore setting I am asking for
>>>>   should also apply to updates. [...]"
>>>
>>> That's quite a pickle. I'm not intending to make holding stuff recursive,
>>> because then we'd have to check every commit target up into its ancestors,
>>> possibly even checking if the *repos* has a hold set on an ancestor. Ugh.
>>>
>>> So svn:hold will not support this use case. Maybe they can trick something
>>> up using externals, too....... uh........ *drop*  (<-- a penny)
>>>
>>> Come to think of it... we *do* have file externals, too.
>>> And, my goodness, it *is* *already* possible to create a global hold on a
>>> file using file externals. It is just less convenient:
>>
>> Oh, dude.  You're talking now about hacks based on hacks, here.  It makes me
>> hurt.  :-)
>>
>> I, too, have wanted a first-class solution for the "template problem".  Many
>> times.
>>
>> I, too, have also (but on much less frequent occasion) wanted to prevent
>> incoming updates to a particular file.
>>
>> Now, I had always assumed the right solution for the latter of those was
>> so-called "sticky revisions" (yes, in the same sense that CVS used the term
>> "sticky" for its tags, but less automatic).  You would update a file to a
>> particular revision with a special --sticky flag, and Subversion would
>> remember until further notice that you want to keep that file (or
>> directory!) at that particular revision.  It's kinda like our sticky depth
>> handling today, in fact, just that we're locking stuff in time instead of in
>> space.  Or something.
>>
>> Of course, I actually doubt that blocking updates is that compelling of a
>> use-case, and suspect that in terms of functionality beneficial to the
>> majority of Subversion users, it falls *well* behind the ability to avoid
>> accidentally committing one's own changes to a file (which itself falls
>> *well* behind a whole host of other, more important features, if we're being
>> honest).  And when I think about where the very idea of blocking updates
>> takes us in terms of how that might affect, oh, merges and such ... well, I
>> get more than a little nauseous.
>>
>> So back to what I would consider the primary deliverable of interest here:
>> avoiding one's own accidental commits.  I'm leaning toward a hostile
>> takeover of the changelist namespace (a late-breaking land grab where we say
>> "svn:<whatever>" is ours ours ours) and a changelist-based solution.  A
>> special changelist honored by our libsvn_client code which does what we're
>> talking about here, shows up in 'svn status' like the others do, requires
>> very little additional infrastructure, for which state changes are not
>> versioned operations (such as they would be with the commits of the addition
>> and removal of an svn:hold property), etc.
>
> I'm not opposed to using the 'svn:' namespace for special changelists,
> particularly since changelists aren't versioned, so you're not mucking
> with data which may be in the historical record.  But special
> changelists would be a nifty solution, we'd need to support multiple
> changelists on a single item before going this route.  I wouldn't want
> a special changelist to exclude standard ones.

IMHO simply using changelists lacks the most important part of the
feature: the ability to set/configure/annotate this centrally. I'm not
particularly interested in a feature that forces me (as a CM) to
remind every developer that they should put the IDE project file into
their ignore-changelist after checking it out. To me that's like
having to remind them to configure the correct autoprops, or set
certain properties manually (repository-dictated autoprops, anyone?).

The question about the "template" comes up quite regularly on the
users list (not as often as questions about subtree mergeinfo or tree
conflicts, or say "authz with wildcards", but still once in a while --
and it's a FAQ after all). It's almost always in relation to IDE
project or configuration files, or makefiles, buildscripts, etc ...
Things that, in most teams, are maintained by a handful of people, but
read/used by a lot of other developers when setting up their
environment (after which the files are locally edited with
user-specific stuff).

That said, I'm not sure either that svn:hold (the property) is the
best approach (I haven't really thought through all those edge cases).
But it seems to me that it could work. OTOH, I haven't really seen
better suggestions (which keep it centrally configured).

-- 
Johan