[svn.haxx.se] · SVN Dev · SVN Users · SVN Org · TSVN Dev · TSVN Users · Subclipse Dev · Subclipse Users · this month's index

EXTERNALS table -- good or bad?

From: Neels J Hofmeyr <neels_at_elego.de>
Date: Thu, 06 Oct 2011 22:28:58 +0200

Hi all,

I have committed code to trunk that populates the EXTERNALS table during
upgrade from 1.6. With a nudge from Philip, I noticed that the EXTERNALS
table is still a neither-here-nor-there implementation. Now I'm unsure.

This table is / would be very useful if one tries to find all externals
defined or checked out in a given subtree, without having to first find and
then parse all externals skels.

But in fact it is little more than a cache for svn:externals props. It
duplicates information in a way. But it adds the knowledge of exactly which
repository and relpath an external is from (stores URLs in repos-root and
repos-relpath, readily parsed from the various formats found in
svn:externals definitions).

So it is useful for speeding up things, but it also has a danger: heavens
forbid if the EXTERNALS table is ever out of sync with the svn:externals
props. So, we may often be forced to parse the props anyway (cleanup?).

What do you guys think about the EXTERNALS table? Yay or nay? What thought
has gone into this so far?

Your answer is interesting to me right now because it will change the fixes
for file-externals-under-unversioned (WIP) and it will either shorten or
obsolete this nomination:

[[[
 * r1173574, r1174342, r1174693, r1174699, r1178910
   Fix issue #4016: 'externals after upgrade from 1.6 have wrong URL
   information in EXTERNALS rows'
   Also: previously, the first failing external upgrade aborted all other
   external upgrades, now just prints the error and carries on.
   Justification:
     Users will start upgrading their WCs soon, and it would be nice to
     have proper information in wc.db. I know of no real problems when
     EXTERNALS rows are wrong and/or missing info, but we might see them
     soon enough, or hit problems if same users upgrade same WCs to 1.8,
     much later.
     Argument against: "If EXTERNALS is just some sort of cache perhaps
       upgrade should just leave the columns null?"
     Argument for: "Currently 1.7 populates those columns. So upgrade
       should, too. We don't know which way we'll go -- drop EXTERNALS
       columns or heavily rely on them. So rather make an upgraded 1.6 WC
       look exactly the same as a fresh 1.7 WC would, saving us special
       cases in subsequent upgrade code. Meaning: power users with age-old
       WCs won't get dropped during upgrade to 1.8, whichever way we
       choose."
   Notes:
     r1173574 is just a cosmetic change that avoids conflicts in r1174693.
     r1174699 removes obsoleted stuff, but doesn't change the outcome.
     r1178910 fixes upgrade_tests.py 2 on windows.
     The entire patch seems quite large, but a large portion of it is just
     moving a function from static to private API.
   Conflicts:
     --accept=tc
     (r1174693, indent mismatch in handle_external_item_change() caused by
     cosmetic fix from r1169770)
   Votes:
     +1: neels
]]]

Thanks,
~Neels

(What is it with externals, that they always seem to bring out ambivalent
half-hearted implementations that have everyone stumped?)

Received on 2011-10-06 22:29:34 CEST

This is an archived mail posted to the Subversion Dev mailing list.