Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Thorsten Schöning
Hello,

on one of our development servers we have a special setup with folders
for different customers, one reference folder with codebase of a web
application and the contents of the customer folders are linked
symbolically to the reference folder. The reason was to be able to
test customers themes etc. with current code base by beeing able to
commit little changes to files without the need to explicitly merge.
This setup worked pretty fine in Subversion 1.6 and before, but
doesn't seem to work now. When I do a svn status in a customer folder
every linked file is shown with a ~ and not just those files which
contents were changed against the own base of the customer folder.
Commits are not possible because of error E145001, saying something
about the special status of the file has changed unexpectadly. The
error message is presented in german language only.

Is there any possibility to be able to get the old behaviour back? I
don't want Subversion in this case to recognize that a file was
replaced with a symbolic link, but use the link fully transparent and
only consider the contents of a file.

An example of my folders:

reference_folder
 - fileA
 - fileB
customer1
 - fileA -> reference_folder/fileA
 - fileB -> reference_folder/fileB

The links were created with link -s. If I change
reference_folder/fileA and visit customer1/fileA in vi, I see the
changed contents, but svn status customer1/file A prints ~ and the
file can't be committed, too.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon.030-2 1001-310
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hanover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Stefan Sperling
On Tue, Apr 24, 2012 at 11:55:47AM +0200, Thorsten Schöning wrote:
> Hello,
> 
> on one of our development servers we have a special setup with folders
> for different customers, one reference folder with codebase of a web
> application and the contents of the customer folders are linked
> symbolically to the reference folder. The reason was to be able to
> test customers themes etc. with current code base by beeing able to
> commit little changes to files without the need to explicitly merge.
> This setup worked pretty fine in Subversion 1.6 and before, but
> doesn't seem to work now. When I do a svn status in a customer folder
> every linked file is shown with a ~ and not just those files which
> contents were changed against the own base of the customer folder.
> Commits are not possible because of error E145001, saying something
> about the special status of the file has changed unexpectadly. The
> error message is presented in german language only.

Hi Thorsten,

you mention that you're using 1.7.2.
Have you tried 1.7.4? Some bugs with symlinks were fixed:

* fix spurious conflict when merging deleted symbolic link (issue #4052)
* fix regressions with symlinks pointing at externals (issue #4102)

I think the second fix might be relevant. It changed the way svn
resolves symlinks while locating working copy roots. This might affect
the problem you describe below.

> Is there any possibility to be able to get the old behaviour back? I
> don't want Subversion in this case to recognize that a file was
> replaced with a symbolic link, but use the link fully transparent and
> only consider the contents of a file.
> 
> An example of my folders:
> 
> reference_folder
>  - fileA
>  - fileB
> customer1
>  - fileA -> reference_folder/fileA
>  - fileB -> reference_folder/fileB
> 
> The links were created with link -s. If I change
> reference_folder/fileA and visit customer1/fileA in vi, I see the
> changed contents, but svn status customer1/file A prints ~ and the
> file can't be committed, too.

Did you add the symlinks to version control?
It sounds like perhaps your case would be better handled by unversioned
symlinks. Please experiment with versioned/unversioned symlinks in 1.7.4
and check if you can get the desired behaviour.


Re: Subversion 1.6.18 released

2012-04-24 Thread Daniel Shahaf
Daniel Shahaf wrote on Sat, Apr 14, 2012 at 18:28:05 +0300:
> Stefan Sperling wrote on Sat, Apr 14, 2012 at 17:00:19 +0200:
> > On Sat, Apr 14, 2012 at 10:05:36AM -0400, Nico Kadel-Garcia wrote:
> > > It's cool. I've seen projects fork and keep the same name before, and it
> > > wasn't pretty.
> > 
> > Just to be clear: It's not a fork. It's the same project under a new 
> > umbrella.
> > 
> > > The COPYING file also mentions checking
> > > http://subversion.tigris.org/license-1.html, which now points to
> > > http://svn.apache.org/repos/asf/subversion/trunk/LICENSE, which an ASL 2.0
> > > license. Any chance of getting the COPYING file updated to reflect the
> > > newer license?
> > 
> > Hmm. That looks wrong. I think license-1.html should display the
> > old licence and point out that newer releases use a difference licence.
> 
> +1.  (license-1.html is what our old releases refer to, so we can't
> change it. Typical of svn devs to embed a version number into
> a URL..)


Can someone apply this to tigris please?

[[[
* www/license-1.html: Link to the historic v1 license.  
 
 Found by: Nico Kadel-Garcia
]]]

[[[
Index: license-1.html
===
--- license-1.html  (revision 120)
+++ license-1.html  (working copy)
@@ -8,6 +8,8 @@
 
 This information has been moved to
 http://svn.apache.org/repos/asf/subversion/trunk/LICENSE";
->http://svn.apache.org/repos/asf/subversion/trunk/LICENSE
+>http://svn.apache.org/repos/asf/subversion/trunk/LICENSE.
+http://svn.apache.org/repos/asf/subversion/tags/1.6.0/www/license-1.html";
+>The historic contents of this page is also available.
 
 

]]]


Re: Subversion 1.6.18 released

2012-04-24 Thread Stefan Sperling
On Tue, Apr 24, 2012 at 01:30:56PM +0300, Daniel Shahaf wrote:
> Can someone apply this to tigris please?

Thanks, done.

> 
> [[[
> * www/license-1.html: Link to the historic v1 license.  
>  
>  Found by: Nico Kadel-Garcia
> ]]]
> 
> [[[
> Index: license-1.html
> ===
> --- license-1.html(revision 120)
> +++ license-1.html(working copy)
> @@ -8,6 +8,8 @@
>  
>  This information has been moved to
>  http://svn.apache.org/repos/asf/subversion/trunk/LICENSE";
> ->http://svn.apache.org/repos/asf/subversion/trunk/LICENSE
> +>http://svn.apache.org/repos/asf/subversion/trunk/LICENSE.
> + href="http://svn.apache.org/repos/asf/subversion/tags/1.6.0/www/license-1.html";
> +>The historic contents of this page is also available.
>  
>  
> 
> ]]]


Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Thorsten Schöning
Guten Tag Stefan Sperling,
am Dienstag, 24. April 2012 um 12:19 schrieben Sie:

> you mention that you're using 1.7.2.
> Have you tried 1.7.4?

I upgraded and there were no changes in my described behaviour.
Subversion seems to recognized the change of the file to a symbolic
link itself, which seemed to be ignored in earlier versions of my
client.

> Did you add the symlinks to version control?

No, each customer folder was a somewhen branched copy of the reference
folder and does have all of it's own versioned files and folders. The
links were just created on the filesystem level by deleting the
versioned file and replacing it with a ln -s to toe same file in the
reference folder. No svn operations involved, only filesystem and in
earlier versions of the svn client this was fully transparent.
Subversion didn't recognized changed file types, from native file to
symbolic link, but only saw changes in file contents itself, if the
referenced file got changed.

> It sounds like perhaps your case would be better handled by unversioned
> symlinks. Please experiment with versioned/unversioned symlinks in 1.7.4
> and check if you can get the desired behaviour.

I can't use versioned symlinks at all because the reference folder is
trunk, not present on the production folders, I have Windows clients
which needs the customer-specific files and where the symbolic links
won't work etc.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon.030-2 1001-310
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hanover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: Trouble with shared object so file with svn_load_dirs.pl

2012-04-24 Thread Yves Martin
Le 23 avril 2012 17:46, Yves Martin  a écrit :

> Everything seems to be OK, except for one file - a Unix binary .so
> executable file - the script detects it as added whereas it is already
> present in the branch working copy and it has not changed at all.
>
> As a result, the "svn add" operation just fails with:
> svn: warning: W150002: '/path/to/current/myFileWithSomeCapLetters.so'
> is already under version control
> svn: E29: Could not add all targets because some targets are
> already versioned
> svn: E29: Illegal target for the requested operation
> Press return to quit and clean up svn working directory:

> How to diagnose what is wrong ?

 Hello,

I browse the Perl source and discover that the "global ignores" option
defaults to the variable from .subversion/config and it contains the
"*.so" pattern !

As this ignore list is used when scanning the source / working copy,
the file from the "vendor release" is detected as added.

What I find strange is why the global ignore list is not used to scan
the "vendor release" too.

So here is the solution: I have to define manually the
"global_ignores" option on command line.

--
Yves Martin


Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Thorsten Schöning
Guten Tag Thorsten Schöning,
am Dienstag, 24. April 2012 um 17:38 schrieben Sie:

> No, each customer folder was a somewhen branched copy of the reference
> folder and does have all of it's own versioned files and folders. The
> links were just created on the filesystem level by deleting the
> versioned file and replacing it with a ln -s to toe same file in the
> reference folder. No svn operations involved, only filesystem and in
> earlier versions of the svn client this was fully transparent.
> Subversion didn't recognized changed file types, from native file to
> symbolic link, but only saw changes in file contents itself, if the
> referenced file got changed.

One more thing is that each of the folders is it's own working copy
independent from the others, besides the symbolic links to some files
of the working copy of the trunk-folder. They are all somewhere in the
same repo, as trunk and tags or branches, but each folder on the
development server has been checked out independantly from the other
folders and the root folder of all of them is not a working copy at
all.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon.030-2 1001-310
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hanover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Stefan Sperling
On Tue, Apr 24, 2012 at 05:38:20PM +0200, Thorsten Schöning wrote:
> No, each customer folder was a somewhen branched copy of the reference
> folder and does have all of it's own versioned files and folders. The
> links were just created on the filesystem level by deleting the
> versioned file and replacing it with a ln -s to toe same file in the
> reference folder. No svn operations involved, only filesystem and in
> earlier versions of the svn client this was fully transparent.
> Subversion didn't recognized changed file types, from native file to
> symbolic link, but only saw changes in file contents itself, if the
> referenced file got changed.

Ah, so you are obstructing a versioned file with a symlink?
That's why 'svn status' shows the '~' symbol which means "obstructed".

It seems that the smarter handling of symlinks in 1.7 is what
breaks your current workflow. I don't think Subversion ever
intentionally ignored the fact that you are replacing a versioned
file with an unversioned symlink. I think you should somehow rearrange
your project so you don't have to do that. Perhaps you can move the
versioned file to a different location?
 
> I can't use versioned symlinks at all because the reference folder is
> trunk, not present on the production folders, I have Windows clients
> which needs the customer-specific files and where the symbolic links
> won't work etc.

Maybe externals will help?


Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Thorsten Schöning
Guten Tag Stefan Sperling,
am Dienstag, 24. April 2012 um 17:48 schrieben Sie:

> Ah, so you are obstructing a versioned file with a symlink?

Yes.

> That's why 'svn status' shows the '~' symbol which means "obstructed".

Thanks.

> I think you should somehow rearrange
> your project so you don't have to do that. Perhaps you can move the
> versioned file to a different location?

I don't think so, I need the tag to be as it is now, because that's
what get's deployed to the production servers and it really consists
all a web application for a customer needs and I want it versioned in
one combined folder. Because former versions of the svn client seemed
to ignore my file replacement to a symlink we were able to implement
this fast bugfix process: Test the customer templates and most of the
configuration with the symlinked programs from trunk, fix the bug in
trink while testing it with the customer installation and if it was
fixed just commit on the development server once for trunk and once
for the customer folder. Only th latter brekas now so it seems I just
have to adjust my workflow to merge the commits from trunk to the
customer in a separate step and folder without the symlinks.

> Maybe externals will help?

Wouldn't know how, as I want the tags unchanged, and only wnated to
replace the binaries of the web application for the fast bugfix way
with the contents of the trunk, keeping all themes etc. of the
customer. Symlinks on filesystem level were a good way to trick
Subversion and achieve this.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon.030-2 1001-310
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hanover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Stefan Sperling
On Tue, Apr 24, 2012 at 06:06:52PM +0200, Thorsten Schöning wrote:
> I don't think so, I need the tag to be as it is now, because that's
> what get's deployed to the production servers and it really consists
> all a web application for a customer needs and I want it versioned in
> one combined folder. Because former versions of the svn client seemed
> to ignore my file replacement to a symlink we were able to implement
> this fast bugfix process: Test the customer templates and most of the
> configuration with the symlinked programs from trunk, fix the bug in
> trink while testing it with the customer installation and if it was
> fixed just commit on the development server once for trunk and once
> for the customer folder. Only th latter brekas now so it seems I just
> have to adjust my workflow to merge the commits from trunk to the
> customer in a separate step and folder without the symlinks.

Yes. I would say that a merge is the correct thing to do here anyway
in terms of process policy. It seems better to track the fix being merged
to each customer-specific branch (is there ever more than one customer
branch involved in your case?), rather than having two independent
non-merge commits that happen to fix the same problem.


Vendor branch with customization, to be used in multiple projects

2012-04-24 Thread Ryan Lange
Hello,

I hope this is appropriate for the mailing list—and I apologize if it
isn't—but I have a repository design issue that I haven't been able to
find discussed elsewhere and was wondering if anyone would be willing
to offer their thoughts.

I'm using a single repository to hold multiple projects. Each of these
projects uses third party code from a particular vendor. They may use
different versions of that code, but this is handled well using vendor
branches as described in the SVN book, with a slight twist to
accomodate multiple projects.

- / (repository root)
- projects/
- ProjectA/
- VendorA/ (svn:externals "^/vendors/VendorA/1.1/")
- ProjectB/
- VendorA/ (svn:externals "^/vendors/VendorA/1.0/")
- vendors/
- VendorA/
- 1.0/
- 1.1/
- current/

I've so far had no need for project-specific customizations, which is
why I'm using svn:externals. Now, I also maintain a couple of local
bug fixes for VendorA's code. Since they're bug fixes, they should be
available to all projects. The part I'm struggling with is just
figuring out the cleanest way of handling this situation. My first
thought was to load up the initial drop, patch it, and tag it in some
way indicating that it has been customized. Something like this:

- vendors/
- VendorA/
- 1.0-custom1/
- current/

Then I realized that svn_load_dirs (or Ubuntu's equivalent, at least:
svn-load) doesn't actually merge changes; it's just an import. That
means any customizations in "current" would be overwritten and I would
have to reapply my patches for each new vendor drop.

Another option is to keep the customizations separate:

- vendors/
- VendorA/
- 1.0/
- current/
- vendors-custom/
- VendorA/
- 1.0-custom1/
- current/

Maybe a combination of the two:

- vendors/
- VendorA/
- 1.0/
- 1.0-custom1/
- current/
- current-custom/

But with the extra merging and tagging that would be needed to keep
this custom branch up-to-date, it might actually be easier to just
re-patch each new vendor drop.

Any thoughts, advice, and suggestions would be very welcome.

Thanks,
Ryan


Re: Can't commit contents of symbolically linked files with Subversion 1.7.2...

2012-04-24 Thread Thorsten Schöning
Guten Tag Stefan Sperling,
am Dienstag, 24. April 2012 um 18:24 schrieben Sie:

> is there ever more than one customer
> branch involved in your case?

No, as we only update other customers if necessary, then the get
merged and on special bugs we would behave like described before.

> It seems better to track the fix being merged
> to each customer-specific branch ([...]), rather than having two independent
> non-merge commits that happen to fix the same problem.

You're right and with a subversion server with merge tracking, we
currently use 1.4 as a server, your process is clearly the better one.

Thanks for the clarifications.

Mit freundlichen Grüßen,

Thorsten Schöning

-- 
Thorsten Schöning   E-Mail:thorsten.schoen...@am-soft.de
AM-SoFT IT-Systeme  http://www.AM-SoFT.de/

Telefon.030-2 1001-310
Fax...05151-  9468- 88
Mobil..0178-8 9468- 04

AM-SoFT GmbH IT-Systeme, Brandenburger Str. 7c, 31789 Hameln
AG Hanover HRB 207 694 - Geschäftsführer: Andreas Muchow



Re: Vendor branch with customization, to be used in multiple projects

2012-04-24 Thread Ryan Schmidt

On Apr 24, 2012, at 11:25, Ryan Lange wrote:

> Hello,
> 
> I hope this is appropriate for the mailing list—and I apologize if it
> isn't—but I have a repository design issue that I haven't been able to
> find discussed elsewhere and was wondering if anyone would be willing
> to offer their thoughts.
> 
> I'm using a single repository to hold multiple projects. Each of these
> projects uses third party code from a particular vendor. They may use
> different versions of that code, but this is handled well using vendor
> branches as described in the SVN book, with a slight twist to
> accomodate multiple projects.
> 
>- / (repository root)
>- projects/
>- ProjectA/
>- VendorA/ (svn:externals "^/vendors/VendorA/1.1/")
>- ProjectB/
>- VendorA/ (svn:externals "^/vendors/VendorA/1.0/")
>- vendors/
>- VendorA/
>- 1.0/
>- 1.1/
>- current/
> 
> I've so far had no need for project-specific customizations, which is
> why I'm using svn:externals. Now, I also maintain a couple of local
> bug fixes for VendorA's code. Since they're bug fixes, they should be
> available to all projects. The part I'm struggling with is just
> figuring out the cleanest way of handling this situation. My first
> thought was to load up the initial drop, patch it, and tag it in some
> way indicating that it has been customized. Something like this:
> 
>- vendors/
>- VendorA/
>- 1.0-custom1/
>- current/
> 
> Then I realized that svn_load_dirs (or Ubuntu's equivalent, at least:
> svn-load) doesn't actually merge changes; it's just an import. That
> means any customizations in "current" would be overwritten and I would
> have to reapply my patches for each new vendor drop.
> 
> Another option is to keep the customizations separate:
> 
>- vendors/
>- VendorA/
>- 1.0/
>- current/
>- vendors-custom/
>- VendorA/
>- 1.0-custom1/
>- current/
> 
> Maybe a combination of the two:
> 
>- vendors/
>- VendorA/
>- 1.0/
>- 1.0-custom1/
>- current/
>- current-custom/
> 
> But with the extra merging and tagging that would be needed to keep
> this custom branch up-to-date, it might actually be easier to just
> re-patch each new vendor drop.
> 
> Any thoughts, advice, and suggestions would be very welcome.

The convention is that /vendor should contain *only* vendor code, with no 
modifications.

If you want to modify vendor code, copy it elsewhere in your repository and 
make your modifications (bug fixes, etc.) there. Then, in the projects where 
you want to use that modified vendor code, you can set an external to that new 
location.

When a new vendor version is released, you "svn_load_dirs.pl" it in /vendor as 
usual, then "svn merge" it into your bugfixed/enhanced copy, then update the 
externals that reference it.



Re: Vendor branch with customization, to be used in multiple projects

2012-04-24 Thread Stefan Sperling
On Tue, Apr 24, 2012 at 12:25:22PM -0400, Ryan Lange wrote:
> Hello,
> 
> I hope this is appropriate for the mailing list—and I apologize if it
> isn't—but I have a repository design issue that I haven't been able to
> find discussed elsewhere and was wondering if anyone would be willing
> to offer their thoughts.
> 
> I'm using a single repository to hold multiple projects. Each of these
> projects uses third party code from a particular vendor. They may use
> different versions of that code, but this is handled well using vendor
> branches as described in the SVN book, with a slight twist to
> accomodate multiple projects.
> 
> - / (repository root)
> - projects/
> - ProjectA/
> - VendorA/ (svn:externals "^/vendors/VendorA/1.1/")
> - ProjectB/
> - VendorA/ (svn:externals "^/vendors/VendorA/1.0/")
> - vendors/
> - VendorA/
> - 1.0/
> - 1.1/
> - current/
> 
> I've so far had no need for project-specific customizations, which is
> why I'm using svn:externals. Now, I also maintain a couple of local
> bug fixes for VendorA's code. Since they're bug fixes, they should be
> available to all projects. The part I'm struggling with is just
> figuring out the cleanest way of handling this situation. My first
> thought was to load up the initial drop, patch it, and tag it in some
> way indicating that it has been customized. Something like this:
> 
> - vendors/
> - VendorA/
> - 1.0-custom1/
> - current/
> 
> Then I realized that svn_load_dirs (or Ubuntu's equivalent, at least:
> svn-load) doesn't actually merge changes; it's just an import. That
> means any customizations in "current" would be overwritten and I would
> have to reapply my patches for each new vendor drop.
> 
> Another option is to keep the customizations separate:
> 
> - vendors/
> - VendorA/
> - 1.0/
> - current/
> - vendors-custom/
> - VendorA/
> - 1.0-custom1/
> - current/
> 
> Maybe a combination of the two:
> 
> - vendors/
> - VendorA/
> - 1.0/
> - 1.0-custom1/
> - current/
> - current-custom/
> 
> But with the extra merging and tagging that would be needed to keep
> this custom branch up-to-date, it might actually be easier to just
> re-patch each new vendor drop.
> 
> Any thoughts, advice, and suggestions would be very welcome.
> 
> Thanks,
> Ryan

The extra merging and tagging buys you one very important thing:
It allows you to cleanly see the difference between the vendor's
version of the code and your own simply by comparing two URLs.
If you commit your own changes directly on the vendor branch you
don't have clean separation of histories of their and your own
change and telling apart changes coming from either side becomes
a bit messy.

It is not actually that complicated once you get used to it.

The usual approach would be to leave the 'vendor' branch unmodified,
and create a branch off this 'vendor' branch which you modify freely.
This modified branch can be used in your own projects (e.g. via an
external, as you do now).

Using svn_load_dirs you keep loading unmodified vendor drops on the
unmodified branch whenever you want to catch up with new vendor releases.

Visualising this in a graph where time flows from left to right
and each line represents a branch it looks like this:

  your commits go on this branch
/custom/VendorA +---
   /
  / copy
 / 
/vendors/VendorA ---+
initial drop  new vendor drops go here (via svn_load_dirs)
imported here


Now, each time you import a new drop, you can merge the incoming
changes into your custom branch, on top of your own local changes:

/custom/VendorA +--+-
   /  /
  / copy / merge r10-r200 vendor->custom
 /  /
  /vendors/VendorA -+--r200
   r10   new vendor drop X imported in r200


The commands to run this merge would be:

  svn checkout http://svn.example.com/svn/custom/VendorA
  cd VendorA
  svn merge ^/vendors/VendorA
  # fix any conflicts
  svn commit -m "merged vendor drop X with custom changes"

You don't need to specify revision numbers because merge-tracking
takes care of that for you.