'Need to SVN export changed projects

I maintain an SVN repository that has code dating back 9 years. This repo contains code for hundreds of applications in it, many of which are obsolete. The back-end is VisualSVN Server running on a Windows server and the client used is TortoiseSVN with CLI tools.

We are now prepping to migrate to a different SCM application and I need to export only the applications which have been updated in since January 1, 2021 (just under 40K revisions). If I only needed to export simply the artifacts that had been changed since that date, it would be simple. But instead, I need to export any project that contains any file (no matter how far down the tree) that has been created or modified since that date.

Note that while tags created after the cut-off date will be migrated (to make audits simpler), these should not be considered when deciding what is active or not.

I have no qualms making this a multi-step process (identifying active project root folders and putting them into a changelist, then exporting just those folders, but I'd prefer a single command solution if I can manage it. While Unix OS (like grep) commands are potentially possible, I'd prefer to stick to Windows OS commands (like findstr) if at all possible.

Things I want to avoid at all costs:

  • checking out the entire repo
  • considering anything in any of the thousands of /tags/ folders (active branches are fine)

I had started out trying svn diff --summarize -r{2021-01-01}:HEAD https://Url.To/Repo/ but after it had been running a while, I realized that it was trying to look at all of the /tags/ and would likely end up taking a week or more to finish.

I've also looked at ls -r -verbose and log commands but neither seems to give me what I need. Can anyone help come up with either the single or the two-step (or more) commands? I don't mind it taking several hours to run (or even overnight), but when we do the final migration, I can't take the SCM offline for more than one weekend, including the import on the other side. As a worst case, I can search the repo for all instances of /trunk/ (this would be the root of each project), and then loop through that output. Is there a cleaner/more elegant way to do this?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source