One more thing: I didn't answer your original question, which is: why can't you do an atomic commit that recurses into externals?
If I understand correctly, this is the reason: svn:externals may fetch from multiple different repositories, even potentially located on different servers in different geographic regions. In your case, you are fetching all externals from the same repository, but I think the original idea behind externals was to construct a working copy of software that has various dependencies that come from different places. Rather than requiring you to use some other tool to do this, I think it was added to Subversion as a convenience feature. It is not feasible to make an "atomic" commit that spans across multiple repositories, because each repository has its own separate existence. Working with dependencies that all come from the same repository, as you are doing (and so are we), is a special case of this more general possibility, and Subversion does not treat this special case any differently than the general case. This is why we work in the original locations of the dependencies and use the externals only for assembling all the different pieces of a software to be compiled. The externals do serve the very useful purpose of recording exactly which dependencies are needed and which exact revision of each dependency, so that in the future we can checkout a past version and recompile it successfully, without losing the knowledge of exactly which bits were used in that build. On Tuesday, July 17, 2018 at 10:09:31 AM UTC-4, Gordon Jess wrote: > > I am currently working on projects which are composed of multiple software > units (stored on one SVN repository). Projects are "assembled" by > checking-out a combination of these shared software units to the > development environment, as svn:externals. > > The externals are defined in the 'Sources' folder as so: > > (local) (url) > <layer>/software_unit_1 <svn > server>/components/software_unit_1/source_code > <layer>/software_unit_2 <svn > server>/components/software_unit_2/source_code > ... ... > <layer>/software_unit_x <svn > server>/components/software_unit_x/source_code > > and external revisions are only pegged when tagging. > > > When I make modifications to an external in my working copy, I can commit > the changes back to the server by doing 'SVN commit' at its checkout > location. Perfect. > > Because of the dependencies between software units, I'd like to be able to > commit a logical set of changes to multiple externals in the same commit. > However, when I try do 'SVN commit' at the folder with the external > definitions, the external changes listed in the commit dialog window are > all greyed-out. > > Since they are listed in the commit window, it is clear to me that they > are from the same repository and be committed in a single commit. > > If my understanding is incorrect I'd be very happy to receive an > explanation of why this isn't possible. > > It would greatly improve our current workflow as, not only would it be > faster and more straightforward, the current process of individually > committing each external separately means our CI server cannot build > automatically on commits as changes for all dependencies cannot be > committed. > > Thanks and looking forward to heading from you. -- You received this message because you are subscribed to the Google Groups "TortoiseSVN" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/tortoisesvn/7f41bf6d-c81f-4a1b-b59e-b4180528773c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
