Re: Shared branch vs single branch

2013-09-23 Thread BRM
If by single/shared branch you mean everyone working out of the same 
place...then yes - you'll trip over each other from time to time.

I've worked in both trunk is prestine (all work in branches) and trunk is 
dirty (all work in trunk) models; when you have multiple people the trunk is 
prestine works a lot better, but as others have noted people doing the merges 
have to ensure they are done right - and that includes testing.

Trunk is dirty won't save you from bad merges, it'll just make more conflicts 
in your working copy as you do updates - something that drove a colleague of 
mine nuts so I started working in my own branch for that project. You also have 
to more frequently be doing svn update on your working copy to minimize 
impacts of what others are doing.

$0.02

Ben





 From: C M cmanalys...@gmail.com
To: Les Mikesell lesmikes...@gmail.com 
Cc: Bob Archer bob.arc...@amsi.com; Subversion users@subversion.apache.org 
Sent: Monday, September 23, 2013 4:04 PM
Subject: Re: Shared branch vs single branch
 


Unfortunately, we are lacking on processes and there's a definite lack of 
product management.

But coming back to  my original question: Are there any potential gotchas with 
using a single/shared branch? For now, that's the only change the team (and 
leadership) is looking to as the solution.

Our developers code on a Unix like platform and have little SVN experience to 
boot. The idea of turning over merging to them seems to be a recipe for 
disaster. I would prefer to let the CM team handle the merges and figure out 
what I did incorrectly to mess up the previous merges.  




On Mon, Sep 23, 2013 at 2:42 PM, Les Mikesell lesmikes...@gmail.com wrote:

On Mon, Sep 23, 2013 at 2:35 PM, Bob Archer bob.arc...@amsi.com wrote:
 On Mon, Sep 23, 2013 at 1:50 PM, Bob Archer bob.arc...@amsi.com wrote:
  It really depends. I think all work for a specific release should be 
  done in a
 single branch/folder. Many people follow the stable trunk model. In this 
 model
 you generally do all work on trunk and then branch for a release. This is 
 the
 same model svn itself is developed under. In this model you would also use
 what are called feature branches. This is generally for a feature/use 
 case that
 will take more than a day to complete or will be worked on by more than one
 developer.
 
  Once again, it's up to the people not the tool to ensure your release
 management is done properly.

 Well, sort-of.   It is always a good idea to (a) include tests for new
 code and (b) have a workflow that ensures that the tests are run and
 that someone checks the results.   Expecting one person to never make
 a mistake just doesn't always work out.

 Isn't is up to the people to put those processes in place? To create the 
 correct workflow? To write the automation?

 I don't think I ever said it should be ONE person's responsibility to 
 manually do this work. Where did I say that?

You didn't explicitly say it was one person's fault, but what you said
could easily be interpreted that way by anyone who had to ask the
question in the first place    Yes, people have to set things up,
but there are tools that can help.

--
   Les Mikesell
     lesmikes...@gmail.com


Re: Tags - Symbolic names instead of Directory copy?

2013-05-23 Thread BRM
 From: Thorsten Schöning tschoen...@am-soft.de

 To: users@subversion.apache.org
 Sent: Thursday, May 23, 2013 2:49 AM
 Subject: Re: Tags - Symbolic names instead of Directory copy?
G uten Tag Varnau, Steve (Seaquest RD),
 am Donnerstag, 23. Mai 2013 um 01:57 schrieben Sie:
 
  In my opinion, the same semantics work less well for tags. My
  biased mind-set is that a “tag” is a name identifying a specific
  version of code (a cross product of “branch” and “revision”).
 
 I don't see the point, as you already know that it's not handled that
 way in Subversion and you need to make the same conclusions for tags
 and branches.
 
  In
  subversion, a directory-path@revision, (e.g., ^/trunk@123) give the
  correct semantics of a tag.
 
 Simply use them that way, like you said for branches.
 
  But a “tag” that is the result of an svn cp (e.g.,
  ^/tags/TRUNK-STABLE) does not give the same semantics.
 
 Because from my understanding you compare two things which have
 nothing to do with each other: One is how branches and tags are
 created, both the same way, but the other is what happens afterwards
 to each. As branches and tags are technically the same, only differing
 by convention, they of course work equally and therefore need to share
 the same semantics.
 
  Checkout is fine, I get the right version of the code. Update
  gives me the message that my workspace is up to date.
 
 Only if it is update, meaning no one ever committed anything to your
 tag. If commits were made, your working copy would not be up to date
 anymore, of course. It sounds to me like you compare branches with per
 convention immutable tags to come to the conclusion that both have
 different semantics. But that's not the case, just a result of your
 immutable tags convention.
 
  So I silently
  miss the fact that the latest code changes I wanted to pull in are
  over on trunk, not on this tag I checked out from.
 
 Because with checking out a tag and keeping it immutable you want that
 tag and not trunk. Or what's the reason for checking out that special
 tag at all? Especially if you know it's immutable, if it wouldn't be
 immutable you of course would get new commits.

I think he's thinking of CVS style tags, which are mutable in that you can 
modify which version of different
files have the tag. So everyone works on HEAD and a STABLE tag progresses 
across it
as developers decide different ports are stable.

However, as you've mentioned and was more at length discusses elsewhere
that's simply not have SVN works.

A similar kind of workflow for SVN would be:

Main work: /trunk
Trunk Stable tag or branch: /tags/trunk-stable or /branches/trunk-stable

Do work in /trunk, as things are declared stable merge to 
/branches/trunk-stable.

While I have in the past been able to sympathize with people looking for 
CVS-style tags
(and still do to some extent), I think Subversion style Tags are far more 
superior
primarily from the fact that you can track any changes that are happening to 
the tag,
which you could not do with CVS.

Ben



Re: Tags - Symbolic names instead of Directory copy?

2013-05-23 Thread BRM
 From: Varnau, Steve (Seaquest RD) steve.var...@hp.com

 To: BRM bm_witn...@yahoo.com; users@subversion.apache.org 
 users@subversion.apache.org
 Cc: Thorsten Schöning tschoen...@am-soft.de
 Sent: Thursday, May 23, 2013 1:40 PM
 Subject: RE: Tags - Symbolic names instead of Directory copy?
 
  From: BRM [mailto:bm_witn...@yahoo.com]
 
   From: Thorsten Schöning tschoen...@am-soft.de
 
   To: users@subversion.apache.org
   Sent: Thursday, May 23, 2013 2:49 AM
   Subject: Re: Tags - Symbolic names instead of Directory copy?
  G uten Tag Varnau, Steve (Seaquest RD),  am Donnerstag, 23. Mai 
 2013
  um 01:57 schrieben Sie:
  
    In my opinion, the same semantics work less well for tags. My
   biased mind-set is that a “tag” is a name identifying a specific
   version of code (a cross product of “branch” and “revision”).
  
   I don't see the point, as you already know that it's not 
 handled that
   way in Subversion and you need to make the same conclusions for tags
   and branches.
  
    In
    subversion, a directory-path@revision, (e.g., ^/trunk@123) give 
 the
   correct semantics of a tag.
  
   Simply use them that way, like you said for branches.
  
    But a “tag” that is the result of an svn cp (e.g.,
    ^/tags/TRUNK-STABLE) does not give the same semantics.
  
   Because from my understanding you compare two things which have
   nothing to do with each other: One is how branches and tags are
   created, both the same way, but the other is what happens afterwards
   to each. As branches and tags are technically the same, only differing
   by convention, they of course work equally and therefore need to share
   the same semantics.
  
    Checkout is fine, I get the right version of the code. Update  
 gives
   me the message that my workspace is up to date.
  
   Only if it is update, meaning no one ever committed anything to your
   tag. If commits were made, your working copy would not be up to date
   anymore, of course. It sounds to me like you compare branches with per
   convention immutable tags to come to the conclusion that both have
   different semantics. But that's not the case, just a result of 
 your
   immutable tags convention.
  
    So I silently
    miss the fact that the latest code changes I wanted to pull in 
 are
   over on trunk, not on this tag I checked out from.
  
   Because with checking out a tag and keeping it immutable you want that
   tag and not trunk. Or what's the reason for checking out that 
 special
   tag at all? Especially if you know it's immutable, if it 
 wouldn't be
   immutable you of course would get new commits.
 
  I think he's thinking of CVS style tags, which are mutable in that you
  can modify which version of different files have the tag. So everyone
  works on HEAD and a STABLE tag progresses across it as 
 developers
  decide different ports are stable.
 
 My example was a poor choice, as I prefer non-mutable tags, but there are 
 certainly use-cases for mutable and non-mutable. There are certainly examples 
 from other versioning tools. Baselines concept in ClearCase, that 
 can be defined then locked. But those get too complex very fast. I really 
 prefer 
 the kind of simplicity in Svn. 
 
 
  However, as you've mentioned and was more at length discusses elsewhere
  that's simply not have SVN works.
 
 Agreed. I understand how Svn works, and it's fine how it works. But I'm 
 arguing that I'd like to see an additional type of object that would be 
 useful... 

One way to do that would be to have another directory that you have the hook 
scripts configured to make read-only.
So:

/trunk
/branches
/tags
/tags-readOnly

Again, you're going to a hook-script to do it as that is how SVN enforces it 
best.
Yes, there is the permissions structure but there's no easy way to do a 
globular matching like the following:

[/*readOnly*]
@users = r 

That is certainly one feature that would be very handy if ever implemented.
 
  A similar kind of workflow for SVN would be:
  Main work: /trunk
  Trunk Stable tag or branch: /tags/trunk-stable or 
 /branches/trunk-
  stable
 
  Do work in /trunk, as things are declared stable merge to
  /branches/trunk-stable.
 
  While I have in the past been able to sympathize with people looking for
  CVS-style tags (and still do to some extent), I think Subversion style
  Tags are far more superior primarily from the fact that you can track
  any changes that are happening to the tag, which you could not do with
  CVS.
 
  Ben
   
 
 Subversion implements a versioned filesystem model (add, cp, mv, rm). If it 
 also 
 had a notion of a symlink (ln) that allows reference to path@revision, then 
 it 
 gives the same tracking of changes to a tag that you mention. But 
 then other operations like checkout operate on what it points to. Then you 
 really get baseline-label-tag type semantics instead of branch semantics. And 
 to 
 get those semantics, you don't really need hook scripts or special 
 permissions to treat them

Re: Subversion Doesn't Have Branches aka Crossing the Streams aka Branches as First Class Objects?

2013-05-21 Thread BRM
 From: Andrew Reedick andrew.reed...@cbeyond.net

  -Original Message-
  From: Les Mikesell [mailto:lesmikes...@gmail.com]
  Sent: Tuesday, May 21, 2013 3:53 PM
  To: Andrew Reedick
  Cc: Branko Čibej; users@subversion.apache.org
  Subject: Re: Subversion Doesn't Have Branches aka Crossing the Streams
  aka Branches as First Class Objects?
 
 
   The client should only see and work with --project project1 
 --branch
  1.0, e.g. svn co --project project1 --branch 1.0 to 
 checkout a
  branch.
 
  That's sort of like saying filesystems shouldn't have 
 subdirectories so
  users don't get confused...  Some people might even believe that.
 
 And there's a reason why 'pwd' returns '/home/userid' 
 instead of '/dev/sda1/home/userid' or 
 'server-vol0.foo.net:/vol0/userid'.  Or why 'cd ~' takes you to 
 your home dir.  

Well, cd ~ is imposed by the shell environment, not by kernel.
And /dev/sda1 being / is imposed by the kernel, not the shell; but the kernel 
only knew to map it that way because the user told it to.
The issue is the same as with SVN. SVN does not know anything about what users 
mean by the URL paths; it only knows about the paths it implements.
A higher level piece of software could do additional mappings and hide all 
those details - just like the kernel does for user level programs when it is 
told to map /dev/sda1 to /;
but that higher level piece of software has to be configured to do that, just 
like the kernel does.

   It's about presentation.  Keep the superfluous dir components
  internal and hidden from the average user.  We've already seen a move
  towards information hiding with the'^' syntax that hides the server
  component.  This would be the logical progression.
 
  It's about organization.  And letting you arrange your own conventions
  to match your processes.
 We'll have to agree to disagree.  We're back at the low level 
 managing dirs versus high-level managing baselines 
 arguments/thinking/paradigms.

As others have stated, SVN provides the engine to do the work - just like the 
kernel provides the engine to read the disk drive.
However, unlike the kernel it has no higher level functions that do mappings it 
can understand. It's just the core, and while it is pretty smart about what it 
does
it is also pretty dumb about what it doesn't do - just like a kernel file 
system driver is very smart about reading the file system but very stupid about 
what the 
directories or files the user puts in the file system mean.

Or more to the point, you can think of it like this:
Apache2 = Kernel - maps https://mysvnserver/svnrepopath to /
SVN = File System Driver for the kernel

Of course, svnserve mixes the two, but that's really the gist of it as it 
relates to your example.

Ben



Re: SVN Externals 1.6 to 1.7 migration issue

2013-05-01 Thread BRM
While I have not had the issue you are having, assuming the externals are in 
the same repository I would highly recommend changing from using the syntax you 
have to using the carrot (^) operator as it will save you many headaches if 
your original svn location changes.

I.e. use:

^/FOLDER_A FOLDER_C
^/FOLDER_B FOLDER_D

Also, I think the specific issue you are having (looking more closely at the 
error message below) is that AFAIK, SVN does not let you import specific files 
via externals - you have to do name spaces (aka folders) instead.

I would suggest doing one of two things in a batch file that gets run after 
checkout (manually by the user, though TSVN may be able to give you some 
automatic client-side scripting):

1. Use mklink to create an NTFS file link after the checkout for the file you 
are trying to relocate.
2. Copy the file from the one directory to the other


Or

3. Copy the file as part of the SVN source tree to the other folder; but you'll 
also have to continuously merge the changes back and forth.

#1 is your best option if you want to not change anything at all, but requires 
that you are running a newer version of Windows than Windows XP. I think 
Microsoft first started providing the mklink utility with Vista; but it could 
be WIn7, and might also depend on which edition of each of those you have as 
well. (e.g. it might not be in the Home Premium version, but might be in Pro 
and Ultimate).

#2 is an okay backup if you can't do #1, but you'll need to treat the file as 
read-only as it will certainly be very much manual effort to maintain.

#3 is automatic, but you'd have to ensure the file matches what is at its 
origin - a bit of a manual effort, but easy to do.

$0.02

Ben





 From: Hutchinson, Steve (UK) steven.hutchin...@mbda-systems.com
To: users@subversion.apache.org users@subversion.apache.org 
Sent: Wednesday, May 1, 2013 7:01 AM
Subject: SVN Externals 1.6 to 1.7 migration issue
 

Hi,

We're been using 1.6 svn externals to manage a FW task.

In the repository we have a folder structure (which is pretty much defined by 
the tools we are using) as below :-

FOLDER A - file_a1.txt, file_a2.txt, file_a3.txt
FOLDER B - file_b1.txt, file_b2.txt, file_b3.txt

Then using externals we link to those folder to create a WC PROJECT structure 
that looks like :-

PROJECT - FOLDER C -  file_a1.txt, file_a2.txt, file_a3.txt AND  file_b1.txt
PROJECT - FOLDER D -  file_b1.txt, file_b2.txt, file_b3.txt

The externals on PROJECT FOLDER we used looked like (not actually using file 
protocol, just created for example purposes) :-

file:///D:/FPGA/SVN_ISSUE/repo/FOLDER_A FOLDER_C
file:///D:/FPGA/SVN_ISSUE/repo/FOLDER_B FOLDER_D
file:///D:/FPGA/SVN_ISSUE/repo/FOLDER_B/file_b1.txt FOLDER_C/file_b1.txt

Worked ok with 1.6. We get the below error in 1.7 when updating of :-

External failed:     D:\FPGA\SVN_ISSUE\PROJECT\FOLDER_C\file_b1.txt  
Error:         Cannot insert a file external defined on 
'D:\FPGA\SVN_ISSUE\PROJECT' into the  
Error:          working copy 'D:\FPGA\SVN_ISSUE\PROJECT\FOLDER_C'.  

We have tried a few things (will not share all at this point due to info 
overload), but wondered if there were any others that achieve something like 
this with 1.7 or could offer some advise ?

Thanks for any help.

Regards
Steve H


This email and any attachments are confidential to the intended recipient and 
may also be privileged. If you are not the intended recipient please delete it 
from your system and notify the sender. You should not copy it or use it for 
any purpose nor disclose or distribute its contents to any other person. 

MBDA UK Limited, a company registered in England and Wales, registration 
number 3144919 whose registered office is at Six Hills Way, Stevenage, 
Hertfordshire, SG1 2DA, England.






Re: Changelist support for svn patch?

2013-04-18 Thread BRM
So what if you have changes to the local working copy?
Or are you ensuring you have no other changes first?

As Branko Čibej noted, the only clean way to do it is to use a new (or a 
dedicated) working copy.

Sadly, there is nothing like TSVN for Linux.

Ben






 From: Nick nos...@codesniffer.com
To: BRM bm_witn...@yahoo.com 
Cc: users users@subversion.apache.org; d...@subversion.apache.org 
d...@subversion.apache.org 
Sent: Wednesday, April 17, 2013 4:12 PM
Subject: Re: Changelist support for svn patch?
 


On Wed, 2013-04-17 at 11:42 -0700, BRM wrote:
 I'd suggest a slight modification to your process if you can - that
 is:
 
 1. Checkout a new working copy
 2. Apply the patch to the new working copy
 3. Review
 4. Delete the new working copy
 
 Now I realize in some cases that may not be an option - too large a
 down, etc.
Right, checking out a new WC for each code review is not feasible for
me, and sort of seems like overkill.  I figure the worst case scenario
is to generate a script which parses the patch and downloads a local
copy of each file referenced in the patch (at the specified rev) into a
temporary tree (sort of a sparse checkout), apply the patch to the tree,
and then can launch a diff tool against it.

 If the patch provider is using SVN, which I assume they are since
 you're talking about apply a patch with SVN, then if it is all
 committed you could also use TSVN's Repository Viewer to look at the
 patch by comparing two branches, and then using TSVN's Diff
 functionality to look at each modification, just like you are in your
 working copy - only you don't need a working copy to do it.

I'm using Linux, otherwise I'd just use TortoiseSVN which seems to be
able to do what I describe above.

 
 Any how...something to think about for you.
 
 Ben
 
 P.S. Aren't Changelists client-side only?

Yes, they are client-side only.


        
         __
         From: Nick nos...@codesniffer.com
         To: Philip Martin philip.mar...@wandisco.com 
         Cc: users users@subversion.apache.org;
        d...@subversion.apache.org 
         Sent: Wednesday, April 17, 2013 10:23 AM
         Subject: Re: Changelist support for svn patch?
        
        
         On Wed, 2013-04-17 at 11:43 +0100, Philip Martin wrote:
       The 'patch' subcommand does not seem to support applying a
          changelist
       description to the files that are part of the patch.  Any
         plans to
       support this?
          
       (Should I be asking this on the dev list?)
          
          That sounds like a useful feauture.
        
         Here's the workflow which provoked my asking.  I wonder if
         there's an
         alternative (and maybe more streamlined) method of
         accomplishing the
         same.
        
         I received a patch containing a feature addition for a project
         I'm
         working on.  My primary interest is only to view the changes
         (ie. code
         review)--not to submit them.  AFAICT, the way to do this using
         subversion directly (ie. not a wrapper app like TortoiseSVN)
         is to apply
         the patch to my working copy and then view the diff.  (I'm
         ignoring the
         option of viewing the raw patch file directly in an editor.)
         Once I'm
         done reviewing, I want to remove the change.  Without the
         ability to
         apply the patch into a specific changelist, I have to
         surgically revert
         the changes if I have other changes of my own in the WC.  If
         the patch
         were applied to a changelist, I can revert it all in one shot.
        
         Am I missing something for this workflow?  Is there a simpler
         way?  How
         do others handle this scenario?
        
        
         Nick
        
        
        
        
        





Re: Changelist support for svn patch?

2013-04-17 Thread BRM
I'd suggest a slight modification to your process if you can - that is:

1. Checkout a new working copy
2. Apply the patch to the new working copy
3. Review
4. Delete the new working copy

Now I realize in some cases that may not be an option - too large a down, etc.
If the patch provider is using SVN, which I assume they are since you're 
talking about apply a patch with SVN, then if it is all committed you could 
also use TSVN's Repository Viewer to look at the patch by comparing two 
branches, and then using TSVN's Diff functionality to look at each 
modification, just like you are in your working copy - only you don't need a 
working copy to do it.

Any how...something to think about for you.

Ben

P.S. Aren't Changelists client-side only?






 From: Nick nos...@codesniffer.com
To: Philip Martin philip.mar...@wandisco.com 
Cc: users users@subversion.apache.org; d...@subversion.apache.org 
Sent: Wednesday, April 17, 2013 10:23 AM
Subject: Re: Changelist support for svn patch?
 

On Wed, 2013-04-17 at 11:43 +0100, Philip Martin wrote:
  The 'patch' subcommand does not seem to support applying a
 changelist
  description to the files that are part of the patch.  Any plans to
  support this?
 
  (Should I be asking this on the dev list?)
 
 That sounds like a useful feauture.

Here's the workflow which provoked my asking.  I wonder if there's an
alternative (and maybe more streamlined) method of accomplishing the
same.

I received a patch containing a feature addition for a project I'm
working on.  My primary interest is only to view the changes (ie. code
review)--not to submit them.  AFAICT, the way to do this using
subversion directly (ie. not a wrapper app like TortoiseSVN) is to apply
the patch to my working copy and then view the diff.  (I'm ignoring the
option of viewing the raw patch file directly in an editor.)  Once I'm
done reviewing, I want to remove the change.  Without the ability to
apply the patch into a specific changelist, I have to surgically revert
the changes if I have other changes of my own in the WC.  If the patch
were applied to a changelist, I can revert it all in one shot.

Am I missing something for this workflow?  Is there a simpler way?  How
do others handle this scenario?


Nick






SVN wc/repo issue...

2013-04-03 Thread BRM
I have a repository with many projects in it, and have been working on the 
layout of one project in particular - adding directories and moving source into 
it.
I am now trying to move a directory in that projects part of the tree to 
another part of the tree, simply:

$ svn mv ../../include .

However, 'svn mv' keeps returning:

    Unable to lock '.'


I've tried it from several working copies - including one fresh checkout, all 
with the same result.
We don't typically use locks in the repository, and I'm the only person working 
on this part of the tree - and no locks in it.

'svn status' does not return any files as having been locked, and 'svn cleanup' 
doesn't seem to resolve the issue either.


Is there any way to tell what might be locked on the server side?

Any other ideas of what to check?
I didn't see any issues in the Apache2 logs, at least anything obvious.

We're using Apache2/2.2.22 + Subversion 1.6.17 as the server (Ubuntu Releases); 
and I'm using 1.6.19 on the client (compiled under Kubuntu 8.04).

Ben


Re: SVN wc/repo issue...

2013-04-03 Thread BRM
Thanks.

I didn't think any server-side locks were involved, but didn't know if a commit 
earlier on may have done something on the server-side.
I did get around it by using the svn mv command to do a server-to-server move 
- kind of like doing it in TSVN's Repository Browser; and that worked just fine.

I'll have to look to see if upgrading the client to 1.7 is feasible - though I 
don't do this specific task very often; it's just a matter of whether there's 
enough dependencies in 8.04 to support 1.7 series; I already had to build 1.6 
for it (since Debian/Ubuntu only supports 1.5 for 8.04).

Thanks!

Ben





 From: Philip Martin philip.mar...@wandisco.com
To: BRM bm_witn...@yahoo.com 
Cc: SubVersion Users users@subversion.apache.org 
Sent: Wednesday, April 3, 2013 4:11 PM
Subject: Re: SVN wc/repo issue...
 
BRM bm_witn...@yahoo.com writes:

 $ svn mv ../../include .

 However, 'svn mv' keeps returning:

     Unable to lock '.'

 Is there any way to tell what might be locked on the server side?

The error does not involve a server-side lock.

 We're using Apache2/2.2.22 + Subversion 1.6.17 as the server (Ubuntu
 Releases); and I'm using 1.6.19 on the client (compiled under Kubuntu
 8.04).

It's a bug in the 1.6 client that is fixed in 1.7.  You can work
around it in 1.6 by doing

$ cd ../..
$ svn mv include foo/bar

-- 
Certified  Supported Apache Subversion Downloads:
http://www.wandisco.com/subversion/download





Re: Tagging svn:externals

2013-02-28 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Wednesday, February 27, 2013 5:49 PM
 Subject: Re: Tagging svn:externals
 
 On Wed, Feb 27, 2013 at 4:44 PM, BRM bm_witn...@yahoo.com wrote:
 
  Won't work - it has to be committed somewhere or it won't be 
 built.
 
  Perhaps then you need a different tool.
  For example, git-svn[1] is might be what you want.
 
  When something is ready for QA it is pushed to a git repository for Jenkins 
 to pick up.
  How you change the externals in the process I'm not sure; but it would 
 at least give you
  a trackable repository that would mimick a modified working copy.
 
  Otherwise I think you're out of luck if you don't want to (i) 
 commit to trunk, or (ii) create a branch,
  but still want to track it in the repository somehow.
 
 No, I think the choices are to tag from the working copy or commit a
 change after making the tag.  But neither seem like the tool is
 designed to do what I'd expect to be a common operation cleanly.

What do you mean?

Branching from a working copy is extremely easy:

$ svn copy . ^/path/to/tag/or/branch

It's a first-class operation in subversion.

Likewise, you can:

$ svn copy . ^/path/to/tag/or/branch
$ svn switch ^/path/to/tag/or/branch
...make modifications here..
$ svn commit

Ben



Re: Tagging svn:externals

2013-02-28 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Thursday, February 28, 2013 5:29 PM
 Subject: Re: Tagging svn:externals
 
 On Thu, Feb 28, 2013 at 3:34 PM, BRM bm_witn...@yahoo.com wrote:
 
  No, I think the choices are to tag from the working copy or commit a
  change after making the tag.  But neither seem like the tool is
  designed to do what I'd expect to be a common operation cleanly.
 
  What do you mean?
 
  Branching from a working copy is extremely easy:
 
  $ svn copy . ^/path/to/tag/or/branch
 
  It's a first-class operation in subversion.
 
 Yes, that does work and seems like a reasonable thing if no change
 other than the externals is done.  But if you aren't careful, you can
 easily add items that don't exist anywhere else.   And you have to
 revert your change before continuing commits to trunk.
 
  Likewise, you can:
 
  $ svn copy . ^/path/to/tag/or/branch
  $ svn switch ^/path/to/tag/or/branch
  ...make modifications here..
  $ svn commit
 
 Likewise, something that works, but if it is a tag you are violating
 the convention of not committing changes to tags.  Leaving the
 question of which of these would be considered a 'best practice'.
 

You could always use a slightly modified structure for your projects:

trunk
tags
branches
qa

Your tagging for QA could be done to the qa tree, and then you are no longer
breaking the rule of not modifying tags. You also enforce that actual tags 
(under the
tags tree) must from from the qa tree; this can be hard-enforced with a 
pre-commit hook,
or soft enforced in project policy alone.

Ben


Re: Tagging svn:externals

2013-02-27 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Tuesday, February 26, 2013 6:12 PM
 Subject: Re: Tagging svn:externals
 
 On Tue, Feb 26, 2013 at 4:29 PM, BRM bm_witn...@yahoo.com wrote:
 
  How can a script possibly know the correct tag for an external target
  which is currently pointing at the trunk in a repository that permits
  concurrent operations?
 
  In my example, it would simply update, then pull the revision number to 
 generate the peg
  revision information in the svn:externals data, essentially:
 
  ^/somePath@r1829 -r 1829
 
  The 1829 portion is easily scriptable to find.
 
 But that's not what I want.  I want the externals in tags to point to
 previously tagged component versions.  Without forcing that to be
 committed to the trunk or encouraging copying to tags from a workspace
 that doesn't match any trunk commit.

From that description, it'll have to be a manual process that you run from 
within your working copy.
Just update the svn:externals appropriately and then do an svn update.
You can test whatever you like without committing.
 
  As you can probably guess, I'm a big fan of trunk is 
 prestine; mostly because I'm a
  big fan of doing things in a very structured, deterministic way.
 
 I'm a fan of not cluttering the repository with unnecessary branches,
 and in making it simple for everyone involved to pick up each others'
 changes sooner rather than later.   And in getting determinism through
 consistent tagging, and only using release tags where determinism
 matters.

So if you don't need a branch, delete it.
Personally I do an svn del on any branch that I no longer need - whether 
abandoned or reintegrated.
This keeps the branch list short, and (more importantly) relevant.
The nice thing with Subversion is that you can still get to all those old 
branches.

  You seem to be wanting
  that determinism. It'd be interesting to see what a big fan of 
 trunk is dirty would say
  for how to do the same thing; but somehow I suspect you can't do it 
 while maintaining
  the determinism.
 
 The question is just about what would be considered best practice in
 where/how that change between an unpinned external and one pointing to
 a separately released tagged version should happen.  I don't think
 whether the ongoing work is a branch or trunk matters.   As long there
 is continuing (possibly concurrent) development in the location before
 you make the tag, you have to decide whether to (a) make another
 branch just to hold this change, (b) commit the change back to the
 development location, then undo it after the tag copy, (c) copy to the
 tag from a modified working copy, or (d) change it in the tag,
 violating the 'tags never change' convention?   I personally don't
 like the idea of tagging from a modified working copy because of the
 possibility that other changes with no history can accidentally be
 brought along.

Let me propose this:

For QA, let them do a simple modified working copy to get the svn:externals 
where you want them; but then they are not allowed to commit or make other 
changes.
You'll have to decide how you want bug fixes to be interacted with; but that 
will provide what you've been describing.

For developers, they can do whatever you like.

Again, as I've noted it comes down to what policies you want your team to 
follow.

Ben



Re: Tagging svn:externals

2013-02-27 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Wednesday, February 27, 2013 5:30 PM
 Subject: Re: Tagging svn:externals
 
 On Wed, Feb 27, 2013 at 4:14 PM, BRM bm_witn...@yahoo.com wrote:
 
  But that's not what I want.  I want the externals in tags to point to
  previously tagged component versions.  Without forcing that to be
  committed to the trunk or encouraging copying to tags from a workspace
  that doesn't match any trunk commit.
  From that description, it'll have to be a manual process that you run 
 from within your working copy.
  Just update the svn:externals appropriately and then do an svn 
 update.
  You can test whatever you like without committing.
 Everything is built by jenkins and has to come from the repository.
 Things in uncommitted workspaces aren't necessarily repeatable.
,,,
  Let me propose this:
 
  For QA, let them do a simple modified working copy to get the svn:externals 
 where you want them; but then they are not allowed to commit or make other 
 changes.
 
 Won't work - it has to be committed somewhere or it won't be built.

Perhaps then you need a different tool.
For example, git-svn[1] is might be what you want.

When something is ready for QA it is pushed to a git repository for Jenkins to 
pick up.
How you change the externals in the process I'm not sure; but it would at least 
give you
a trackable repository that would mimick a modified working copy.

Otherwise I think you're out of luck if you don't want to (i) commit to trunk, 
or (ii) create a branch,
but still want to track it in the repository somehow.

Ben

[1] https://www.kernel.org/pub/software/scm/git/docs/git-svn.html



Re: Tagging svn:externals

2013-02-26 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Friday, February 22, 2013 10:57 AM
 Subject: Re: Tagging svn:externals
 On Fri, Feb 22, 2013 at 9:02 AM, BRM bm_witn...@yahoo.com wrote:
   Not only does it solve the above, but it also enforces a 
 discipline in how
  projects are updated to use newer versions of the tags; it also 
 requires
  developers to be aware of which externals affect which projects - 
 which, IMHO,
  is a good thing.
 
  Sure, it would be great if every component had well-tested, frozen
  APIs at release quality before any upper level project touched them.
  But on the  other hand, APIs tend to miss the mark if they aren't
  adjusted for the needs of real-world use.  So there's a problem 
 either
  way
 
  All true. But that's what your release process is for. Part of my 
 release process for the projects that use svn:externals is to first tag and 
 release any externals that are not released already.
 
 Agreed, but the scenario is making a QA tag from trunk work.   Most of
 these are dead ends if QA rejects them - that is, with rare exceptions
 anything that needs to be fixed would be fixed on the trunk and a new
 QA tag made.   My thinking is that there really should be an
 intermediate QA branch where the externals are pinned but it seems
 like a big waste when there will never be any other change on that
 branch.   Plus, we are increasingly automating this with a jenkins
 plugin that allows tagging after a build.

It's fully a matter of how you structure release process for anyone.
If you keep trunk prestine, then I don't think that would be an issue - your 
process just has to say that trunk
can only have released svn:externals and always be ready for QA.
And QA would have to have a similar process specified for any updates they do.

Ultimately nothing I/we say can do anything but help you define the process
and how it needs to work for you and your team(s).
 
  And if I don't need to modify an external during development, then it 
 never moves from the release the project used.
 
 Sure, many/most stay tied to tagged component releases even during
 trunk work on the upper level projects, but it is still a common
 scenario to need to make changes in both simultaneously.

I don't think that would be an issue. Again, it's how you define the process 
for your developers/QA Testers/QA Fixers.

  Now, in a sense you're looking to do that automatically as you make a 
 release of the project you're working on.
  But it really all comes down to the release process, the tools you use for 
 release, and their capabilities.
 I don't think you can do it automatically unless you pin to peg
 revisions in the same repository.  How would anything automatic find
 the right component tag or deal with concurrent changes in a separate
 repo?

By automation I mean having scripts setup that can update the pegs revisions or 
tags automatically.
It can be relatively easy to do (depending on the scripting language) but will 
be very specific to your repository use.
The script would just need to be able to parse svn pget svn:externals and 
svn info on the various externals.
I'm not saying its the full solution - or even the right one; just that that is 
how you are seeming to want to go.

Personally I think the right solution is defining your processes for everyone.
Keep it easy to do, but make sure everyone understands what they are suppose to 
do.

Ben



Re: Tagging svn:externals

2013-02-26 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Tuesday, February 26, 2013 11:56 AM
 Subject: Re: Tagging svn:externals
 
 On Tue, Feb 26, 2013 at 8:48 AM, BRM bm_witn...@yahoo.com wrote:
 
  Agreed, but the scenario is making a QA tag from trunk work.   Most of
  these are dead ends if QA rejects them - that is, with rare exceptions
  anything that needs to be fixed would be fixed on the trunk and a new
  QA tag made.   My thinking is that there really should be an
  intermediate QA branch where the externals are pinned but it seems
  like a big waste when there will never be any other change on that
  branch.   Plus, we are increasingly automating this with a jenkins
  plugin that allows tagging after a build.
 
  It's fully a matter of how you structure release process for anyone.
  If you keep trunk prestine, then I don't think that would be an issue - 
 your process just has to say that trunk
  can only have released svn:externals and always be ready for QA.
  And QA would have to have a similar process specified for any updates they 
 do.
 
 We do development on trunk.  It just seems like the logical place...

That's one of two recognized methods - trunk is prestine or trunk is dirty.
For trunk is dirty there is no guarantee that any given revision is useable.
For trunk is prestine development methodology says any given revision
must be useable. Both are enforced by project preferences and policy.
 
  Ultimately nothing I/we say can do anything but help you define the process
  and how it needs to work for you and your team(s).
 
 On the other hand, it would be helpful if there were a best
 practices document on how best deal with the inherent conflict
 between the concepts of concurrent development on trunk, and the
 conventions of (a) externals always being pegged in tags and (b) no
 changes _after_ tagging.  The only clean approach looks to me like
 making a branch whose only purpose is to be a place to make the change
 to the external references - but that also seem like a lot of extra
 effort and clutter in the repository for that operation.   But, if
 that is what it takes, it would be easier to convince developers to do
 it that way if there were some official document describing it.

From what I can tell - and others can verify this - Subversion tries to allow 
the
developers to choose the development model that best fits their needs. As
such, such a document would have to be generated for numerous development
models.

That said, I think what you're looking to do makes more sense in a trunk is 
prestine
model than a trunk is dirty model. My own repositories use the trunk is 
prestine
model.
 
  Sure, many/most stay tied to tagged component releases even during
  trunk work on the upper level projects, but it is still a common
  scenario to need to make changes in both simultaneously.
 
  I don't think that would be an issue. Again, it's how you define 
 the process for your developers/QA Testers/QA Fixers.
 
 I'm just saying it would be nicer if every user didn't have to make up
 a different workflow process to accomplish the same thing...

I think it's a matter of finding what works best for your team. Good tools, 
like Subversion,
make it easy to customize your workflow for what you need to do. Some functions 
fit
certain workflows better than others; but they are available.
 
   Now, in a sense you're looking to do that automatically as you 
 make a
  release of the project you're working on.
   But it really all comes down to the release process, the tools you 
 use for
  release, and their capabilities.
  I don't think you can do it automatically unless you pin to peg
  revisions in the same repository.  How would anything automatic find
  the right component tag or deal with concurrent changes in a separate
  repo?
 
  By automation I mean having scripts setup that can update the pegs 
 revisions or tags automatically.
  It can be relatively easy to do (depending on the scripting language) but 
 will be very specific to your repository use.
 
 How can a script possibly know the correct tag for an external target
 which is currently pointing at the trunk in a repository that permits
 concurrent operations?

In my example, it would simply update, then pull the revision number to 
generate the peg
revision information in the svn:externals data, essentially:

^/somePath@r1829 -r 1829

The 1829 portion is easily scriptable to find.

  The script would just need to be able to parse svn pget 
 svn:externals and svn info on the various externals.
  I'm not saying its the full solution - or even the right one; just that 
 that is how you are seeming to want to go.
 
  Personally I think the right solution is defining your processes for 
 everyone.
  Keep it easy to do, but make sure everyone understands what they are 
 suppose to do.
 
 That is a lot easier if you can make that solution avoid extra work

Re: Tagging svn:externals

2013-02-22 Thread BRM
 From: Les Mikesell lesmikes...@gmail.com

 To: BRM bm_witn...@yahoo.com
 Cc: users@subversion.apache.org users@subversion.apache.org
 Sent: Thursday, February 21, 2013 11:09 AM
 Subject: Re: Tagging svn:externals
 
 On Thu, Feb 21, 2013 at 9:42 AM, BRM bm_witn...@yahoo.com wrote:
 
  On Wed, Feb 20, 2013 at 11:52 AM, Bob Archer 
 bob.arc...@amsi.com wrote:
   Some  clients like TortoiseSVN have a feature that will pin the 
 external to
   the revision you are copping when doing the tag. Otherwise, you 
 have to do
   it manually before or after you create your tag.
 
  Neither choice 'feels' quite right to me unless you have an
  intermediate branch to make the change.  That is, if you make it on
  the trunk before you copy to the tag you break the likely continuing
  work on the trunk that expects the externals to also follow trunk
  components.   And if you change it in the tag you are breaking the
  convention that you don't change tags.   And if you copy the 
 working
  copy to a tag you might get other changes in the tag that weren't
  committed anywhere else.    Is there a 'best practice' 
 consensus for
  this step?
 
 
  While I do agree, I think the simple solution is to generally just use 
 tagged externals to start with, and then switch them to trunk or a branch 
 when 
 you need to work on them from that project.
 
 That makes sense when you aren't concurrently working on a component
 and the project using it.  But that is the problem case - and common.
  Not only does it solve the above, but it also enforces a discipline in how 
 projects are updated to use newer versions of the tags; it also requires 
 developers to be aware of which externals affect which projects - which, 
 IMHO, 
 is a good thing.
 
 Sure, it would be great if every component had well-tested, frozen
 APIs at release quality before any upper level project touched them.
 But on the  other hand, APIs tend to miss the mark if they aren't
 adjusted for the needs of real-world use.  So there's a problem either
 way

All true. But that's what your release process is for. Part of my release 
process for the projects that use svn:externals is to first tag and release any 
externals that are not released already.
And if I don't need to modify an external during development, then it never 
moves from the release the project used.

Now, in a sense you're looking to do that automatically as you make a release 
of the project you're working on.
But it really all comes down to the release process, the tools you use for 
release, and their capabilities.

$0.02

Ben



Re: Authentication failure when SVNParentPath used

2013-01-19 Thread BRM
 From: Raghu GS ragh...@gmail.com

To: users@subversion.apache.org 
Sent: Tuesday, January 15, 2013 8:46 AM
Subject: Authentication failure when SVNParentPath used
I regret for bugging you once again.
Apache authentication for the particular repository is failing when i use 
SVNParentPath, but working well when i use repo:/ instead of folder1:/repo1 
in svnauthz file even without changing the apache configuration.

I'll show my configuration below

SVNAuthz file.

[folder1:/repo1]
john = rw
joe = rw

Apache configuration

Location /parentfolder/folder1
                Order allow,deny
                Allow from all
                DAV svn
                SVNParentPath /srv/svn/parentfolder/folder1
                AuthType Basic
                AuthName svn repository
                AuthUserFile /srv/svn/config/userauthentication.conf
                Require valid-user
                AuthzSVNAccessFile /srv/svn/config/svnauthz.conf
/Location

Please assist me in resolving the issue.


If you want to use the SVNParentPath directive to specify multiple repositories 
then you also need to set the Location directive to something different than 
you are thinking.
Location .. directive should only point to the URL path of the base of the 
repository (single repository) or parent folder (SVNParentPath directive).

Thus, you really want:
Location /parentfolder 
  ...
  SVNParentPath /svn/svn/parentfolder
 ...

/Location

All else being the same.

HTH,


Ben



SVN 1.7.5 curiosity...

2012-11-13 Thread BRM
I'm running SVN 1.7.5 Command-line client on Kubuntu 12.10 with latest updates.
What puzzles me is that when I run svn status it no longer reports the status 
of any svn:externals.
Is this expected behavior? Or is there a bug? Working Copy is proper version 
for 1.7 series so far as I know.

Ben


Svn Copy question...

2012-08-24 Thread BRM
A colleague left and I am going through his laptop to checkin anything that was 
not committed already.
As I don't know the state of things I'm copying stuff to their own branch - 
leaving the original source alone.

However, I've run into an issue - one working copy is missing a folder; 
however, that folder does not appear to have been in source control at all.
Another working copy of the same branch has the folder, but marked deleted - it 
was moved into a sub-tree I think.

I don't know anything about this particular folder, but SVN is refusing to let 
me do an 'svn copy' without the branch.
And I'd rather not do an svn update on the working copy as I want to maintain 
what is there without any changes for the moment.

I'm doing:

 svn copy _dot_ svn.my.server.com/path/to/copy/to

where _dot_ is a  single period for the current directory (since it doesn't 
show up too well in e-mail/webmail/etc).

Is there any way I can get around this?

Ben

P.S. In case it matters at all - Windows command-line client version of SVN 
installed is 1.6.9 (r901367) by CollabNet. SVN Server (on Apache2) version is 
1.6.6.

Re: SVN Keywords...

2010-10-26 Thread BRM
- Original Message 

 From: David Weintraub qazw...@gmail.com
 I'm not sure what you are planning on doing, but usually the RCS
 Keywords are  not a good idea. They usually cause more problems than
 they solve. What  usually works better (especially in C and C++) is to
 define macros at compile  time that are embedded in your program as
 strings. For example, you could  have an About Box that will display
 this information or if your run your  program with a --version switch.

I am already using some macros, etc. However, I find that using things that 
rely 
on the programmer
to make a modification can be troublesome and it is far to easy to forget to 
change the version and build date
information. Versus using the RCS keywords to record some of the same 
information.
 
 This will give you more flexible control  -- for example, you can use a
 release number that corresponds to your tags.  And, you don't have to
 worry about forcing programming changes just to munge  the $Date$
 keyword.

I don't want to munge it. I just want to print it. I'm not even particular 
about 
the format.Which is why a URL last commit date RCS Keyword would work just fine.

I've also seen some others in the past - such as autoincrementing a macro; 
however, that is even more broken as it requires it to be checked back in, so 
then two programmers could generate the same numbers separately. Ultimately 
there is no real good solution, only a series of solutions that are good enough 
and RCS keywords is one approach. It may not be for everyone, but it does have 
its purposes.

 However, if you must use RCS keywords, you can  modify a property that
 will force a diff in the file without modifying the  file itself.

Again that would require the programmer to do something.
Versus what I proposed, which would just work since as the name space gets 
copied from one URL (e.g. trunk) to another (e.g. tags) the property would 
automatically change.

Additionally, svnversion doesn't work b/c it only works on the local working 
copy, which doesn't work when you've exported the code. (since it just reports 
that was exported).

I've already gotten around the revision thing somewhat by requiring the 
programmer to include it in the release tag, and then having some custom code 
that can parse the HeadURL to get the information - but only b/c it knows how 
to 
decode it out of the tag name and it knows a little bit about our SVN 
repository 
structure.

Ben



Re: Repository organization for complex project

2010-10-13 Thread BRM
Mauro,

Yes, such things are possible.
I have a similar project and my repository is setup as follows:

/project
/project/libraries
/project/libraries/library
/project/clients
/project/clients/client
/project/server
/project/tools
/project/tools/tool
/project/other parts

(project is optional - as I have many different suites of projects, I do 
this.)

Each of the following has its own trunk, branches, and tags namespace:

/project/libraries/library
/project/clients/client
/project/tools/tool
/project/other parts

Projects under /project/libraries are utilized by all the other projects, and 
linked in via svn:externals.

So, for example, a testClient would be stored at /myProject/tools/testClient 
and 
have its own trunk, tags, and branches namespaces, and it may link in the 
myProjectNetworkProtocol library from 
/myProject/libraries/myProjectNetworkProtocol; during development of the 
protocol it might use a branch of the myProjectNetworkProtocol library; during 
a 
merge it may use the trunk; otherwise it would use a release from under the 
tags.

I have also found it useful to use the Revision number (as reported by svn 
info) 
of the last modification on a trunk in the name of the tag. For example, if 
myProjectNetworkProtocol was last modified at revision 5734 then its release 
tag 
would be /myProject/libraries/myProjectNetworkProtocol/tags/Release_5734, even 
if I was making the release at revision 15000. This is mostly just easier to 
track in the repository; though I don't usually need maintain older versions - 
things usually get moved to the latest version instead so I don't have to worry 
about releasing a modification to an older release; though if I did it'd 
probably become Release_oldRev_newRev for tracking purposes.

We are also contemplating a namespace for system releases - that is, a release 
of all the parts under /project, likely in /project/system/tags; something 
to just say these versions of all these parts go together.

HTH,

Ben


From: Mauro Adolfo San Martin Ramas msmar...@userena.cl

To: users@subversion.apache.org
Sent: Wed, October 13, 2010 12:05:43 PM
Subject: Repository organization for complex project


Hi,
So far I have been using svn in rather simple settings: at most some branches 
and merges limited to one dev tree.
 
However, now I need to set up a repository for a project composed by several 
modules where different subprojects (comprised by subsets of modules) need to 
be 
compiled and tested independently. Usually each team is actively developing 
only 
one module but requires the latest (or stable) versions of some of the others 
to 
build and test.
 
For instance, if p_i are projects and m_i are modules, I need to configure svn 
to support
m_1 m_2 m_3 m_4 m_5
p_1  u   u   d
p_2  d   u   u   u
p_3  u   u   d
...
where d means active development of module j by project i, and u only use.
 
Is such a setting possible with svn? Any advice will be greatly appreciated.
 
Best Regards,
Mauro San Martín
 
 
 

Re: Repository organization for complex project

2010-10-13 Thread BRM
- Original Message 

 From: Les Mikesell lesmikes...@gmail.com
 We currently commit component binaries back into  tags which are then used by 
other things with external references, and final  binaries are managed 
separately by project, but that seems wrong on several  levels.

For the projects we do nightly builds on we use an FTP site that the build 
scripts upload the builds to. This is easy enough to script even on Windows - 
whether using DOS Batch or Windows Scripting Host.
I'm sure Hudson and other build systems can handle that just fine.
 
 I'd like to find a generic scheme (and one that can be plugged  into hudson 
 if 
possible) to store build results with a versioning scheme that 

 doesn't force you to keep them forever because most are obsolete after a few 
new  builds but that has a close-coupling to the svn version
 or at least the tag name  of the matching source.  But this seems like it 
should be a common scenario  and not something everyone re-invents differently.

Well, right now I have a lot of projects that don't have a nightly build - 
mostly due to how Qt and Visual Studios interact - or rather, the problems in 
doing so.
However, you can do a couple things to track this very well and automatically, 
partially supported via Subversion's Keyword Substitution.
I use $HeadUrl$ in a number of projects to get the URL, which I then parse to 
get a information about the build; for example, if it's a tag then I grab the 
release information, or a branch then I build a special branch info to output.

For things like the global revision number you'll need to use 'svnversion' to 
capture the output somehow.

The following would probably work for you:

1. Capture the URL somewhere as part of checking it out using $HeadURL$
2. As part of the build script run and capture the output of svnversion, you 
might want to do so with svn info too - though this only works if you are NOT 
doing an export.

You can then store these with a copy of the source and resulting binaries to 
have full traceability.
Alternatively, if you are using svn co in the build, just tarball or zip up 
the project's sandbox at the end of the build script and save it as a whole - 
this will keep ALL the information, URLs, versions, etc; for you - and is very 
build system friendly too.

$0.02

Ben



Re: How to best manage authorization after tag/branch creation?

2010-10-13 Thread BRM
- Original Message 

 From: Shaun Pinney shaun.pin...@bil.konicaminolta.us
  The usual issue is making sure people outside the project are
   prevented from reading the code. You might not want people in your
   project making changes on tags and branches, but there usually isn't a
   security issue if they see the code on the branches and tags.
 Our issue  is handling multiple companies doing development on the same
 project.   Various restrictions (e.g. licensing) prevent us from sharing
 all project  files with everyone involved.  It's a tricky use case.  We
 also  have additional considerations which require us to control project
 read  access within a project even within the same company.
  The only way  you can prevent people from reading your code is to setup
  httpd  configuration. pre-commit hooks can't do this and there's no
   pre-checkout hook.
 Yeah, was afraid of that...

I've always been an advocate of the Apache2+WebDAV setup for SVN.
It's just easier.

I know the apache access method (webdav) has path-based authentication;
I don't know about the others.

If you need to control access to the code you can do things such as:
- only allow the developers that need access access to the whole project
- setup a secondary tags namespace for special binary only information
- have the build mechanism push the binaries to a special binary tag by the 
same 
name
- use svn:externals to reference the binary releases instead of source releases.
 
  However,  changing httpd configuration is tricky since it involves
  having root  access on the httpd server and being able to at least
  bounce the server  when the permissions get changed.
 
 Yes.  Perhaps if there was a  pre-checkout hook it'd be possible to create
 a homegrown admin tool.  Or  perhaps if Subversion had a feature to natively
 manage access control within  a repository then no Apache changes would be
 needed in the first place.   Either way, some automation would be useful here
 but it may not be possible  to implement.
 
   By the way, there's also a way to configure  Apache httpd to use LDAP
   instead of a regular text file. This  means that users will have access
   to your Subversion repository  based upon their Windows or Unix account
   and that users will  automatically get logins and have their access
   removed when  they get hired or move on.
  
   That's something we'll  definitely consider.  We have some other quirks
   with account  management to sort out first :)
  
  When your development team gets  bigger than a dozen people, you start
  having people come and go all the  time. That makes it difficult to
  keep the httpd configuration up to  date. It just becomes easier if
  this becomes more automated. Or at least  someone else's problem when a
  new developer doesn't have access to  Subversion.
 
 I completely agree, and will be using that argument to push  for it (or
 at least the first part :)

And that's why you use LDAP or another alternative authentication method.
BTW, Subversion does support groups as part of the path-based authentication.
I don't know how that interacts with LDAP if at all, but that might be 
something 
to investigate or perhaps add support for.

$0.02

Ben



Re: Repository organization for complex project

2010-10-13 Thread BRM
- Original Message 

 From: Les Mikesell lesmikes...@gmail.com
 To: BRM bm_witn...@yahoo.com
 On 10/13/2010 2:52 PM, BRM wrote:
  From: Les Mikeselllesmikes...@gmail.com
  We  currently commit component binaries back into  tags which are then 
  used  
by
  other things with external references, and final  binaries  are managed
  separately by project, but that seems wrong on  several  levels.
  
  For the projects we do nightly builds on  we use an FTP site that the build
  scripts upload the builds to. This is  easy enough to script even on 
  Windows 
-
  whether using DOS Batch or  Windows Scripting Host.
  I'm sure Hudson and other build systems can  handle that just fine.
  
  I'd like to find a generic scheme  (and one that can be plugged  into 
  hudson 
if
  possible) to store  build results with a versioning scheme that
  
  doesn't  force you to keep them forever because most are obsolete after a 
few
   new  builds but that has a close-coupling to the svn version
  or  at least the tag name  of the matching source.  But this seems like  it
  should be a common scenario  and not something everyone  re-invents 
differently.
  
  Well, right now I have a lot of  projects that don't have a nightly build -
  mostly due to how Qt and  Visual Studios interact - or rather, the problems 
in
  doing so.
   However, you can do a couple things to track this very well and  
automatically,
  partially supported via Subversion's Keyword  Substitution.
  I use $HeadUrl$ in a number of projects to get the URL,  which I then parse 
to
  get a information about the build; for example, if  it's a tag then I grab 
the
  release information, or a branch then I build  a special branch info to 
output.
  
  For things like the global  revision number you'll need to use 'svnversion' 
to
  capture the output  somehow.
  
  The following would probably work for you:
  
  1. Capture the URL somewhere as part of checking it out using  $HeadURL$
  2. As part of the build script run and capture the output of  svnversion, 
you
  might want to do so with svn info too - though this  only works if you 
  are 
NOT
  doing an export.
  
  You can then  store these with a copy of the source and resulting binaries 
to
  have  full traceability.
  Alternatively, if you are using svn co in the  build, just tarball or zip 
up
  the project's sandbox at the end of the  build script and save it as a 
  whole 
-
  this will keep ALL the  information, URLs, versions, etc; for you - and is 
very
  build system  friendly too.
 
 This covers the 'backtrack from binary' scenario as long as  you keep those 
extra pieces in the zip with them.
 But I'm looking more for  a filesystem and/or http URL name/path mapping to 
store the binaries so you can
 easily find the currently relevant versions in the first place.  Among  other 
things it should provide a straightforward
 way to replace our current svn  externals to pull specific libraries into 
 place 
for dependent builds, and also  map to
 our branch/tag name structure for qa and production releases.  Maven  may be 
the right answer, but I was thinking
 in terms of something that could be  viewed as a filesystem - maybe like 
alfresco where additional rules can be  imposed.

I actually have the $HeadUrl$ going into a source file in such a way as it is 
actually in the final build (since I actually parse it at run-time). If I ever 
edited the binary I would be able to read the URL.
You can do the same with the others if you like, but getting them there can be 
more problematic and is build system specific on how to do so.

The rest of it was per your statement:

  doesn't  force you to keep them forever because most are obsolete after a 
few
   new  builds but that has a close-coupling to the svn version
  or  at least the tag name  of the matching source.  But this seems like  it
  should be a common scenario  and not something everyone  re-invents 
differently.

So you only keep the tarballs around as long as you like. You could 
alternatively toss them back into SVN, but then you'd be keeping them forever.

Any how, just $0.02. Apply as desired.

Ben



Re: Subversion 1.6.13 Released

2010-10-04 Thread BRM
Why not just install Apache2 on Windows and use the Apache2 DLLs for a WebDAV 
system?
Far easier to manage.

Ben



From: Sjoerd Kivits sjo...@separator-spareparts.de
To: users@subversion.apache.org
Sent: Sat, October 2, 2010 8:36:46 AM
Subject: RE: Subversion 1.6.13 Released

 RE: Subversion 1.6.13 Released 

Hi,

Is it possible to download windows binaries for subversion server somewhere?
I could only find packages including apache and so on...

Brg,

Sjoerd

-Oorspronkelijk bericht-
Van: hy...@hyrumwright.org namens Hyrum Wright
Verzonden: vr 1-10-2010 19:12
Aan: announce
Onderwerp: Subversion 1.6.13 Released

I'm happy to announce Subversion 1.6.13, available from:

http://subversion.tigris.org/downloads/subversion-1.6.13.tar.bz2
http://subversion.tigris.org/downloads/subversion-1.6.13.tar.gz
http://subversion.tigris.org/downloads/subversion-1.6.13.zip
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.tar.bz2
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.tar.gz
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.zip

This is a bugfix release, part of the 1.6.x release series.  Of note, this
release includes a fix which addresses CVE-2010-3315, a security issue when
using 'SVNPathAuthz short_circuit'.  More information can be found here:
http://subversion.apache.org/security/CVE-2010-3315-advisory.txt

The MD5 checksums are:

7ae1c827689f21cf975804005be30aeb  subversion-1.6.13.tar.bz2
8451f5d771edc0a0302bd9a52d54e150  subversion-1.6.13.tar.gz
dd4009b239a5354b434e5f66cddde145  subversion-1.6.13.zip
2a7d662bac872c61a5e11c89263d7f07  subversion-deps-1.6.13.tar.bz2
688bdb107731f9db2f3b6297b663a68d  subversion-deps-1.6.13.tar.gz
bb960d37f835e5e556e23e4eb85a9b08  subversion-deps-1.6.13.zip

The SHA1 checksums are:

185efd129c3c4b04f1544d62bb9a3fcd0f58ba29  subversion-1.6.13.tar.bz2
06d3afc49182c80ea712c13409c008d27a4e889b  subversion-1.6.13.tar.gz
6530528fae0335cd8495ebf1f2072e2dd9df2e31  subversion-1.6.13.zip
e51bffda416a3a9abe068aab6f90d174dedef352  subversion-deps-1.6.13.tar.bz2
1faa5ba0c87210f534ed445d061e4955396524d4  subversion-deps-1.6.13.tar.gz
945ef9f68998aedf320af50d220e47a470684a06  subversion-deps-1.6.13.zip

PGP Signatures are available at:

http://subversion.tigris.org/downloads/subversion-1.6.13.tar.bz2.asc
http://subversion.tigris.org/downloads/subversion-1.6.13.tar.gz.asc
http://subversion.tigris.org/downloads/subversion-1.6.13.zip.asc
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.tar.bz2.asc
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.tar.gz.asc
http://subversion.tigris.org/downloads/subversion-deps-1.6.13.zip.asc

For this release, the following people have provided PGP signatures:

   Senthil Kumaran S [1024D/6CCD4038] with fingerprint:
8035 16A5 1D6E 50E2 1ECD  DE56 F68D 46FB 6CCD 4038
   Philip Martin [2048R/ED1A599C] with fingerprint:
A844 790F B574 3606 EE95  9207 76D7 88E1 ED1A 599C
   Paul T. Burba [1024D/53FCDC55] with fingerprint:
E630 CF54 792C F913 B13C  32C5 D916 8930 53FC DC55
   Julian Foad [1024D/353E25BC] with fingerprint:
6604 5A4B 43BC F994   5728 351F 33E4 353E 25BC
   Bert Huijben [1024D/9821F7B2] with fingerprint:
2017 F51A 2572 0E78 8827  5329 FCFD 6305 9821 F7B2
   Hyrum K. Wright [1024D/4E24517C] with fingerprint:
3324 80DA 0F8C A37D AEE6  D084 0B03 AE6E 4E24 517C
   Stefan Sperling [1024D/F59D25F0] with fingerprint:
B1CF 1060 A1E9 34D1 9E86  D6D6 E5D3 0273 F59D 25F0
   Mark Phippard [1024D/035A96A9] with fingerprint:
D315 89DB E1C1 E9BA D218  39FD 265D F8A0 035A 96A9

Release notes for the 1.6.x release series may be found at:

http://subversion.apache.org/docs/release-notes/1.6.html

You can find the list of changes between 1.6.13 and earlier versions at:

http://svn.apache.org/repos/asf/subversion/tags/1.6.13/CHANGES

Questions, comments, and bug reports to us...@subversion.apache.org.

Thanks,
- The Subversion Team


 

Re: Hook Script Examples

2010-09-13 Thread BRM
- Original Message 

 From: Ryan Schmidt subversion-20...@ryandesign.com
 On Sep 10, 2010, at 10:50, BRM wrote:
  My old subversion server  had a hookscript to deny commits unless there was 
  a 

log 

  message. I'd  like to setup the same functionality on the new subversion 
server 

   too.
  I already got my hook-scripts in place, but...
 Note  the hook script to deny commits that have no log message is what you 
 get 

in the  default pre-commit.tmpl file that Subversion creates in every new  
repository.

Yes, that is very nice. I did have to add a message though - so that users 
would 

get some kind of feed back as to why it was denied.
Where as the pre-revprop-change.templ provides some default log message info.

  
  In  the process, I came across the following README files:
  
   http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/README
  http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/README
  ; 
  both of which references the old tigris.org site:
  
   http://subversion.tigris.org/tools_contrib.htmlHoweve, the page is no 
  longer 


  available, and I can't find it on the new apache.org site either.
  Is this page just  simply no longer going to be available? Or is there 
somewhere 

  else for  this stuff now?
 
 The files are  here:
 
 http://svn.apache.org/repos/asf/subversion/trunk/contrib/
 
 The  tools_contrib.html page was removed earlier this  year:
 
 http://svn.apache.org/viewvc?view=revisionrevision=900549

That's fine; however, my point for bringing this up is that there is stuff 
still 

referencing that page.
Those references should get updated.
That's all.

Ben


Re-integration Q...

2010-09-13 Thread BRM
I am running into the error:

svn: Cannot reintegrate from 'url://feature-branch' yet:
Some revisions have been merged under it that have not been merged
into the reintegration target; merge them first, then retry.

I came across a collab.net blog site[1] that referenced this issue. So I tried 
it in 1.6.6 too, which gave me a little more information - namely, one path in 
my branch seems to be missing a revision from trunk. In examining the 
svn:mergeinfo, it seems to be an 'off-by-one' - the svn:merge info records 
5627:6031 as being merged but not 5626. I synced the branch using a 1.5.1 
client; and running svn diff url-trunk url-branch produces only a delta in the 
svn:mergeinfo; so I am assuming the files are identical.

The merge revision in question adds a folder and file.

Reading more of the blog points to a forum[2], and following that I found a 
post[3] that references doing a record only merge, which I tried (using a 1.6.6 
client), but it didn't seem to resolve the 'off-by-one' issue.

So, is it:

i) safe to just delete the svn:mergeinfo in this case? 
ii) is is safer/better to just 'svn pedit svn:mergeinfo' to include the extra 
revision? (e.g. edit 5627:6031 - 5626:6013)

Would 'ii' even work? If so, which is (a) better, (b) safer?

I kind of lean towards 'i' since (1) it seems to be documented, and (2) the 
files do seem to be the same. But I'd like to understand this a little more 
before I do something.

TIA,

Ben

[1]http://blogs.open.collab.net/svn/2008/07/subversion-merg.html
[3]http://subversion.open.collab.net/ds/viewMessage.do?dsForumId=4dsMessageId=99955


Re: svn:mergeinfo property question...

2010-09-10 Thread BRM
- Original Message 

 From: Bob Archer bob.arc...@amsi.com
 frankly... 1.5.1 has many  merging bugs in it. I would suggest you upgrade 
 the 
client to the last 1.5  release or the current 1.6 release.

As much as I would like to be able to use a 1.6 client on the system - I can 
only get 1.5.1 on Kubuntu 8.04 TLS, and that requires using back-ports to do 
so; 
otherwise, I'm still limited to 1.4 on that system. So I still need to be able 
to do the work on that system. Sadly, the backports only has 1.5.1 and nothing 
newer.  I might setup a Kubuntu 10.04 TLS VM do so some work with, but the 8.04 
TLS has the environment I need to generate builds from for the time being, so 
1.5.1 and 1.4 are sadly with me to stay for a while.
 
 That said... I'm not sure you can  just reintegrate a branch that existed 
before merge tracking. If you do you have  to make sure to do record only 
merges 
from trunk into branch. To reintegrate the  branch 100% of the trunk code must 
have been merged to the branch... (assuming  you are reintegrating to trunk.)
 
 Yes, it is possible during a merge that  mergeinfo is removed. Google for 
mergeinfo elision. Druing a merge svn will  ellide any merge info of child 
nodes 
where all the info will reside in a parent  node.

Thanks. The article Subversion 1.5 Mergeinfo - Understanding the Internals[1] 
had some really good information, and the section on elision provides some good 
insight into what is going on. To Quote:

In other words, removing the subtree's mergeinfo is safe to do since, if  the 
subtree's mergeinfo is equivalent to its nearest parent with  explicit 
mergeinfo, then the mergeinfo the subtree inherits from that  parent is already 
sufficient to describe the merges to the subtree.   It's probably becoming 
clear 
now that mergeinfo inheritance and elision  are just two ways of looking at the 
same thing:  Inhertance is mergeinfo  sliding down the tree from parent to 
child, elision is mergeinfo  sliding up the tree from child to parent.

So, the removal is simply b/c it matches trunk and has no other merges to worry 
about if I understand it correctly, in which case - it's perfectly safe and 
sane 
to do.
Please correct me if I'm wrong.

Ben

[1] http://www.collab.net/community/subversion/articles/merge-info.html



Hook Script Examples

2010-09-10 Thread BRM
My old subversion server had a hookscript to deny commits unless there was a 
log 
message. I'd like to setup the same functionality on the new subversion server 
too.
I already got my hook-scripts in place, but...

In the process, I came across the following README files:

http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/README
http://svn.apache.org/repos/asf/subversion/trunk/contrib/hook-scripts/README

both of which references the old tigris.org site:

http://subversion.tigris.org/tools_contrib.htmlHoweve, the page is no longer 
available, and I can't find it on the new apache.org site either.
Is this page just simply no longer going to be available? Or is there somewhere 
else for this stuff now?

Ben



Re: Two trunks in one repository?

2010-09-09 Thread BRM
svn:externals are exactly what you want. Basically, treat PartA and  PartB as 
separate projects entirely - think third party libraries - then your ProjectD 
just brings together PartA and PartB and adds the glue to concat them together, 
using svn:externals to bring in the appropriate versions. Your ProjectD trunk 
could bring the trunks for the PartA and PartB, and branches could bring in the 
appropriate branches, with tags being locked to specific releases. Though I 
would suggest that you also lock trunk to specific releases of the externals 
too, for stability; but that's a project admin's decision.

Ben



- Original Message 
 From: Geoff Hoffman geoff.hoff...@jawa.com
 To: users@subversion.apache.org
 Sent: Thu, September 9, 2010 5:12:52 PM
 Subject: Re: Two trunks in one repository?
 
 SVN won't care, but our IDE may not like it like that. The only reason I 
brought  up svn:externals before is if PartA and PartB are already in SVN as 
their own  repos (or trees under one repo) then ProjectD doesn't want a copy 
of 
those  projects code, but rather a reference to them.
 
 Thus, on ProjectD you'd  have 
 
 svn propset svn:externals PartA ProjectA/tags/tagA1 PartB  ProjectB/tags/tagB1
 
 When you commit and update this, new folders appear  (PartA and PartB) from 
 svn 
checkout of tagA1 and tagB1 respectively. Update  those tags or change 
externals 
to new tag, and your ProjectD gets the update at  next svn up.
 
 
 
 - Original Message -
 From: Tech Geek  techgeek12...@gmail.com
 To:  Erik Andersson kir...@gmail.com
 Cc: Geoff Hoffman  geoff.hoff...@jawa.com, users@subversion.apache.org
 Sent:  Thursday, September 9, 2010 1:23:27 PM
 Subject: Re: Two trunks in one  repository?
 
 
 I am thinking something like this: 
 
 ProjectD 
 ProjectD/PartA/trunk 
 ProjectD/PartA/tags 
 ProjectD/PartA/branches 
 ProjectD/PartB/trunk 
 ProjectD/PartB/tags 
 ProjectD/PartB/branches 
 
 Beleive me or not in our scenario the code of Part A and Part B never  gets 
merged at any point. The only common part is that at the end of each  release 
of 
Part A and Part B their output file is concetenated into a one single  file 
which is then programmed on a hardware part by an external tool. 

 
 So  for a scenario like that I would like to keep it very simple. Any 
 feedback 
or  comments regarding the above structure? 

 
 Thanks! 
 


Re: Scripting an svn:externals change

2010-09-03 Thread BRM
- Original Message 

 From: Ryan Schmidt subversion-20...@ryandesign.com
  $ cat Example1.dump | sed 
   's/file:\/\/\/svnTest\/Example1/file:\/\/\/svnTest\/Example2/'  
   Example1-edited.dump
 Do not use sed to edit a dumpfile. Use a tool  designed for the task, like  
svndumptool.
 http://svn.borg.ch/svndumptool/

Why? B/c it might change data in files too? That's actually something I want 
done.
My prime repository has some scripts in it that store the repository 
information 
for auto-checkouts as part of build environments, and I want those changed too 
- 
not just the svn:externals.

Or would sed 'break' the dump file format? svndumptool does look useful to 
verify that sed did exactly what I wanted - standard diff won't work well on a 
2.1 GB dumpfile.
 
  5. Load the  edited dump into a new repository (Example2)
  
  $ cd  /svnTest
  $ svnadmin create Example2
  $ svnadmin load Example2   Example1-edited.dump
 Because this repository is now different than  it was before (the history has 
been edited), you must give the new repository a  new UUID.
 svnadmin load --ignore-uuid Example2   Example1-edited.dump

I wouldn't say 'must' but 'should' - as in 'highly recommended'.

 Since the UUID has changed, everyone must check  out new working copies; it 
 is 
not possible to update or switch existing working  copies to this new changed 
repository.

Or I could just ignore the history, and just go back to my original question of 
changing the values.

As I said, I need to make this as seamless as possible for everyone - 
preferably 
doing an 'svn relocate'/'svn update' on the working copies.

Question: If I checked them out again would the client realize that I have a 
series of files locked and retain the locks on the new working copy? (That 
would 
be a PITA to track down if it didn't.)

TIA,

Ben



Re: Scripting an svn:externals change

2010-09-03 Thread BRM
- Original Message 

 From: Ryan Schmidt subversion-20...@ryandesign.com
 To: BRM bm_witn...@yahoo.com
  Since  the UUID has changed, everyone must check  out new working copies; 
  it 
is 

  not possible to update or switch existing working  copies to  this new 
changed 

  repository.
  
  Or I could just  ignore the history, and just go back to my original 
  question 
of 

   changing the values.
  
  As I said, I need to make this as seamless  as possible for everyone - 
preferably 

  doing an 'svn relocate'/'svn  update' on the working copies.
 
 And as I said, dump and load and changing  UUID requires checking out new 
working copies.
 You cannot relocate or update  existing working copies. If that's too 
restrictive, then yes,
 you'll have to  skip the dump and load, just change the externals in HEAD, 
 and 
accept
 that you  can't check out a past revision and have the externals work.

Having the history broken is not much of a problem that way. It just would have 
been nice to have it work well too.
Though, couldn't I setup a script to modify the svn:externals via the pset 
--revprop option?
Any how...I've got a lot of work ahead regardless.
 
   Question: If I checked them out again would the client realize that I have 
  a 

  series of files locked and retain the locks on the new working copy?  (That 
would 

  be a PITA to track down if it didn't.)
 
 I'm not sure  exactly what you meant (checked out new working copies?
 from the new  repository?), but note that the dump format does not include
 information about  hook scripts, config files or locks. If you dump and load,
 the new repository  will have the default hook script templates (so, no hook
 scripts), the default  configuration, and nothing locked. But I think you can
 manually bring the  relevant files from the old repository to the new one to 
preserve this  data.
 

Okay - the basic situation is that I have a branch in SVN that was under 
migration. It was a port of our CVS into SVN and needed to be split up into 
separate projects which requires a lot of work to do.
So I had a working copy where I locked files that I had moved to the new 
structure to help keep from editing those files in the old structure, and it'll 
be a PITA to figure out which files were moved and locked between the two.
At least I still have the working copy. If they don't transfer, okay - I just 
have to go through the old working copy and relock them in a new working copy.

(I had to use locks as I couldn't just remove the files due to breaking other 
projects.)

Thanks - I think I have my plan of action now - it'll just take a while to 
implement. If I can get apache to do the proxy thing (http://silmor.de/49) then 
I can at least get back to a working state where we can move things about with 
our existing working copies - make sure all changes are in, and are at a good 
place to re-download them.

Sadly this all occurred due to a server crash, so it was rather unplanned 
though 
it didn't surprise some of us.

Thanks all!

Ben



Scripting an svn:externals change

2010-09-02 Thread BRM
I recently had my subversion server die - the box, not subversion itself - and 
have been working through the recovery process.
Part of that is going through and modifying a number of projects for the change 
in the URL - namely changing from a non-standard port for apache to a standard 
port.
We have started using svn:externals in some projects, but did not use the 
relative path values - instead, specifying the whole URL; so I need to update 
the URLs in the svn:externals.

I know I can get the values using 'svn pget svn:externals'; but the SVN redbook 
recommends against using pset/propset to set the values.
So, how do I set the values from a script? svn help pset seems to show a -F 
parameter for reading the values from a file. This seems like it would take 
care 
of the concern mentioned issue - that the externals are multi-line.
If that is the case, then shouldn't the note say to use that parameter with 
pset 
or use pedit instead of flatly saying use pedit?
Or is there another reason why I shouldn't use pset?

TIA,

Ben

http://svnbook.red-bean.com/nightly/en/svn.advanced.externals.html



Re: Scripting an svn:externals change

2010-09-02 Thread BRM
- Original Message 

 On Sep 2, 2010, at 11:27, BRM wrote:
  I recently had my  subversion server die - the box, not subversion itself - 
and 

  have been  working through the recovery process.
  Part of that is going through and  modifying a number of projects for the 
change 

  in the URL - namely  changing from a non-standard port for apache to a 
standard 

   port.
  We have started using svn:externals in some projects, but did not  use the 
  relative path values - instead, specifying the whole URL; so I  need to 
update 

  the URLs in the svn:externals.
  
  I know I  can get the values using 'svn pget svn:externals'; but the SVN 
redbook 

   recommends against using pset/propset to set the values.
  So, how do I  set the values from a script? svn help pset seems to show a 
-F 

   parameter for reading the values from a file. This seems like it would 
  take 
care 

  of the concern mentioned issue - that the externals are  multi-line.
  If that is the case, then shouldn't the note say to use that  parameter 
  with 
pset 

  or use pedit instead of flatly saying use  pedit?
  Or is there another reason why I shouldn't use pset?
 
 If  you can afford to have the repository offline, make a dumpfile, twiddle 
 it, 
load  it
 into a new repository, and have everybody check out new working copies, you  
may
 want to consider doing that. The twiddling step would be done with the  
svndumptool
 script. The advantage would be that you could correct the externals  
definitions in all
 past revisions of the repository too, not just the HEAD, so  that anybody 
needing to
 check out a past revision would still have working  externals in the 
repository's new
 location. And do use relative externals this  time so you won't have to do 
 this 
kind
 of surgery ever again, noting that the  relative externals syntax is only 
compatible
 with Subversion 1.5 and  higher. 

That's a good thought. I might try doing that tonight. I'm aware of they syntax 
compat issue, and have no problem
saying that we have to use 1.5 or higher; it's just a matter of getting the 
update through.

Ben



Re: Scripting an svn:externals change

2010-09-02 Thread BRM
- Original Message 

 From: BRM bm_witn...@yahoo.com
 To: Ryan Schmidt subversion-20...@ryandesign.com
 - Original Message 
  On Sep 2, 2010, at 11:27, BRM  wrote:
  If  you can afford to have the repository offline, make a  dumpfile, 
  twiddle 
it, load  it
  into a new repository, and  have everybody check out new working copies, 
  you 
may
  want  to consider doing that. The twiddling step would be done with the 
svndumptool
  script. The advantage would be that you could  correct the externals 
definitions in all
  past revisions of  the repository too, not just the HEAD, so  that anybody 
needing  to
  check out a past revision would still have working  externals in  the 
repository's new
  location. And do use relative externals  this  time so you won't have to do 
this kind
  of surgery  ever again, noting that the  relative externals syntax is only 
compatible
  with Subversion 1.5 and  higher. 
 That's  a good thought. I might try doing that tonight. I'm aware of they 
syntax 

 compat issue, and have no problem
 saying that we have to use 1.5 or  higher; it's just a matter of getting the 
 update through.

Okay - well, I decided to try this route, but was advised to try it on a test 
repository first.
Good thing - as there is a bit of an issue, and one I need to avoid if I can...

The issue is that an existing working copy's externals are not being updated 
when 'svn update' runs,
even though the externals have changed on the server through the update.

Here's my test:

1. Create a file-based repository:

$ cd /
$ mkdir svnTest  cd svnTest
$ svnadmin create Example1

$ mkdir -p ~/testsvn  cd ~/testsvn
$ export SVNROOT=/svnTest
$ svn co ${SVNROOT}/Example1 example1.wc
$ cd example1.wc
$ mkdir sub1 sub2
$ svn add sub1 sub2
$ svn commit -m Adding some structure for test
$ touch sub1/file1
$ svn add sub1/file1
$ svn commit -m Adding a file for test
$ svn pedit svn:externals sub2

set the svn:externals to:

sub2a file:///svnTest/Example1

save and quit

$ svn update
$ svn commit -m Adding an external for test

2. Make a backup of the working copy
$ cd ~/testsvn
$ tar -jcvvf example1.wc.tar.bz2 example1.wc

3. Dump the repository

$ cd /svnTest
$ svnadmin dump Example1  Example1.dump

4. Switch the external reference from Example1 to Example2

$ cat Example1.dump | sed 
's/file:\/\/\/svnTest\/Example1/file:\/\/\/svnTest\/Example2/'  
Example1-edited.dump

5. Load the edited dump into a new repository (Example2)

$ cd /svnTest
$ svnadmin create Example2
$ svnadmin load Example2  Example1-edited.dump

6. Rename the Example1 repository so it looks like it was removed

$ cd /svnTest
$ mv Example1 Example1.removed

7. Relocate the Example1 working copy, then update it

$ cd ~/testsvn
$ cd example1.wc
$ svn switch --relocate file:///svnTest/Example1 file:///svnTest/Example2
$ svn update

At this point 'svn update' fails outright complaining that it cannot find 
file:///svnTest/Example1 (since it was removed).
So I can live with sub2a not getting updated without an svn switch  --relocate 
occurring on it - integrity and all; however, I would have  expected that
svn update the svn:externals on sub2. I could even live with having to  rename 
an existing external (sub2a - sub2a.orig) and updating (it's  kinda of 
acceptable, but not ideal).

At this point, I would expect that the svn:externals property for 'sub2' match 
what is in the Example2 repository.
However, an 'svn pget svn:externals sub2'  reveals that it did not get updated. 
I even tried 'svn update --force'.
I kind of expected that 'svn update --ignore-externals' would not update it 
either  - which is what I found when I tried it.

Now I tried this with a 1.5.1 and 1.6.6 versions of the svn toolchain; though 
if 
it is working in something newer okay. However, I'm kind of stuck with those 
two 
versions - ubuntu hardy-backports provides 1.5.1 and lucid uses 1.6.6.

Now why is this a big issue for me? B/c I and a number of my team  members 
have a lot of projects with svn:externals, and we need to update  our working 
copies.
I need to make this as seamless as possible. Scripting the svn switch  
--relocate command is easy; but I shouldn't have to also edit the  
svn:externals 
on each project
since that was already changed in the repository.

Now I may be able to alleviate my issue some through temporarily  restoring an 
alternate port that gets redirected to the server via  proxy[1] (the old server 
ran on example.com:82 and the new one is on  example.com); but forcing people 
to 
have to completely delete their  working copies is not an easy option - 
especially since there may be  some changes in the working copies that have not 
yet made it to the  server.

Or am I missing some?  At this point, I am not going to touch my primary 
repository until I know the right solution - but that also means we're stuck.

TIA,

Ben

[1]http://silmor.de/49



Re: Mailing lists? Really?

2010-07-28 Thread BRM
- Original Message 

  Certainly not. Nor do you have to subscribe to post. As a  non-subscriber 
your post will be moderated but if you are patient it will be  approved 
through 
fairly quickly (says I as one of the moderators).
  
 And indeed, I started this thread without subscribing.  But I  still can't 
 find 
a way to respond to an existing message without first having  that message in 
my 
inbox.  That's my main problem.

I just opened groups.google.com, and then searched for subversion. Both the 
subversion-dev and subversion users lists came up at the top. Here's the users:


http://groups.google.com/group/subversion_users?lnk=srg

And even this thread:

http://groups.google.com/group/subversion_users/browse_thread/thread/b87e732b8a47420f


Note that there is also a way to post to the list via this interface's + new 
post button. I didn't join the group through that interface, but it seems that 
the new post button makes you join the group before you can post. It has a 
nifty forward feature gmail style already there regardless, and I'm guessing 
you 
will get the reply after joining the group.

HTH,

Ben


Re: truMerge 1.1.0 released

2010-05-26 Thread BRM
Checked out the website, and there doesn't seem to be much up on truMerge; it 
took me a while to find out it needs the command-line 1.5 series client to 
function. More info on the website would be useful - especially requirements, 
supported platforms, a working Wiki, etc. (No, I didn't log into 
open.collab.net; but I shouldn't have to to find out that information either.) 
I did eventually find some of the info in the INSTALL doc, but it took me a 
while to even find that.
Any how...all that aside...

Question: Does it require a 1.5 series or later SVN server? Or can it make due 
with older servers?
TSVN requires a Merge tracking enabled SVN server to be able to do merges. 
Right now, I don't have access to one - my server is 1.4 series and I can't 
change it right now (external limitations).
So if you can work with an older server without the merge tracking info then 
I'm more than happy to try a few merges with it and see how things go.
If not, please add that to the documentation too.

Thanks,

Ben



- Original Message 
 From: Stefan Sperling s...@elego.de
 To: users@subversion.apache.org
 Sent: Wed, May 26, 2010 8:27:10 AM
 Subject: Re: truMerge 1.1.0 released
 
 On Wed, May 26, 2010 at 12:17:38AM +0200, Schellingerhout, Nico wrote:
 
 Dear Subversion users,
 
 I am happy to announce the release of 
 truMerge 1.1.0.
 
 truMerge is a merge helper tool that combines 
 true
 
 renamehttp://subversion.tigris.org/merge-tracking/requirements.html
 
 functionality with Subversion merge, in order to handle tree conflicts
 
 more reliably and effectively. truMerge not only recognizes but also
 
 handles most tree conflicts automatically.

I would like to encourage all 
 users who regularly encounter tree conflicts
to try trumerge and let the 
 community know their opinion on its behaviour
(regarding performance as well 
 as perceived correctness of tree conflict
resolution).

The behaviour 
 of trumerge will likely be a role-model for Subversion
when we get around to 
 further improving tree conflict detection and
resolution in the post-1.7 era. 
 So you will help Subversion by providing
feedback about 
 trumerge.

Thanks,
Stefan


Re: Managing Vendor Branches

2010-02-27 Thread BRM
- Original Message 

 From: Jeff Mott jeff.mott...@gmail.com
 I've recently needed to track changes for vendor code drops, so I read
 the SVN book's vendor branches chapter. But I'm not entirely happy
 with part of the procedure, so I'd like to talk it out and, I hope,
 find a better way.
 The part I hope to improve is when I have a versioned code drop in the
 /vendor directory, then the vendor provides a new code drop. The SVN
 book suggests that I should copy the new files over top of the files
 in my working copy. Then I need to SVN add and delete as needed. I saw
 there's a script to ease this process, but I still feel that this
 should be easier.
 It seems to me that comparing two trees, even unrelated trees, is
 something SVN is very good at. So if I have /vendor/code-drop-v1 and
 /vendor/code-drop-v2, then it seems SVN should be able to derive the
 changes between the two and apply those changes to my working copy.
 Can I do this?

Here's what I do:

In my repository I have a ThirdParty namespace (e.g. /ThirdParty) under which 
each Third-Party import has their own namespace (e.g. /ThirdParty/import/), 
with each having its own 'trunk', 'branches', and 'tags'.

When I import a new version, it goes into the 'branches'. This then gets merged 
to 'trunk', and released to 'tags'. My projects then pull against the 'tag' 
using svn:externals.

In this way, I can track the changes that happen from the vendor and even 
accept or deny some changes if I need to. For example, Qt has a niced add-on 
for supporting services/daemons - the Qt Service Class 
(http://doc.trolltech.com/solutions/qtservice/qtservice.html). However, their 
releases of it are targeted either at Windows OR Unix/Linux/Mac, but I need to 
support both; so using this method I merge them both together and use the 
merged result in my source.

Personally, I think this helps as it is basically treating the vendor as 
another project in the repository. Of course, each of my projects have their 
own trunk/branches/tags, so this might not work for you if you're not doing 
that too...but you could probably find similar way.

HTH,

Ben