Johan Corveleyn wrote on Mon, Nov 28, 2011 at 21:37:43 +0100:
> On Mon, Nov 28, 2011 at 7:32 AM, Daniel Shahaf <d...@daniel.shahaf.name> 
> wrote:
> > On Sunday, November 27, 2011 11:16 PM, "Johan Corveleyn" 
> > <jcor...@gmail.com> wrote:
> >> <wild idea>
> >> What if we could 'svnadmin (re)load' a single revision $REV in a
> >> repository, which would then automatically fix up everything coming
> >> after $REV:
> >>
> >>   0. Take backup
> >>   1. Dump $REV
> >>   2. Fix $REV.dumpfile with some dumptool
> >>   3. Take repo offline
> >>   4. Reload $REV (fixes up everything after $REV)
> >>   5. Bring repo back online
> >>
> >> For the part of "... automatically fix up everything coming after $REV":
> >>
> >>   - naive approach: simply dump+load internally in the repository
> >> ("reload") everything from $REV+1 until HEAD.
> >>
> >>   - better approaches may be possible, depending on the change that
> >> was done in $REV, and depending on the type of backend.
> >>
> >> Of course this reloading step will be more costly if $REV is far
> >> before HEAD, but that's normal I guess. If you are able to fix
> >> problems not too late after they happened, the reloading cost will be
> >> reasonable.
> >> </wild idea>
> >>
> >> Thoughts?
> >>
> >> --
> >> Johan
> >>
> > You're asking how to implement a generic rewrite of a historical
> > revision, but aren't addressing the question of what to do with 
> > younger-than-the-
> > rename revisions that do not apply (in the libsvn_delta, libsvn_diff, or

I meant s/rename/reload/.

> > tree-delta sense) to the modified history.
> 
> I'm not sure I understand. If all those younger-than-the-rename
> revisions are "reloaded", there wouldn't be a problem, right? Ok,
> maybe some of them don't need to be touched in any way, because they
> do not apply to the modified history, but that can be seen as an
> optimization, right?
> 

I was thinking about the general case: replacing a revision X by an
arbitrarily-different revision.

In the special case of just updating the copyfrom pointers file contents
obviously wouldn't be affected, and if the younger-than-the-reload
revisions are replayed (in the svn_ra_replay*() sense) then they would
be okay too...  but if we try to use the tree merge logic on them (why?
again, for the general-rewrite case) then I think the changing of
copyfrom link may have visible consequences --- for example, since 'svn
merge' takes a --ignore-ancestry option.

> It's actually a bit similar to your suggestion of 'svnsync
> --up-to-revision', which you made elsethread. But with dump/load, and
> wrapped into a convenient tool for an svn administrator.

> Concerning the question "if I'm serious about solving this problem":
> well, at this point it's really only an academic exercise, trying to
> find a way which works in theory. I'm not sure if I'm serious about
> implementing this myself (at my current rate (of free time x speed)
> that might take me several years, and I'm not sure that's worth it for
> my personal situation). So I guess at this point I'm just throwing
> around some ideas, hoping that some good will come out of it, and that
> someone will one day write the code to do it :-).
> 

Fair enough, thanks for clarifying :)

> -- 
> Johan

Reply via email to