[ Taken from a post by Michael Sperber [Mr. Preprocessor] to comp.lang.scheme.scsh in May 2003; Subject: Re: Change in CVS layout ]

For those who want to avoid a full checkout, I've appended a little
script that redirects an existing checkout.  Call it like so:

rerepo-cvs.scm <sandbox> scsh-0.6 scsh

----

  #!/bin/sh
  IFS=" "
  exec scsh -e main -s "$0" "$@"
  !#

  (define (cvs-repository-files sandbox)
  (filter (lambda (name)
  (string-suffix? "CVS/Repository" name))
  (run/strings ("find" ,sandbox "-name" "Repository" "-print"))))

  (define (rerepo-cvs! sandbox old-repo new-repo)
  (for-each
  (lambda (repository-file)
  (let ((old-repository (call-with-input-file repository-file read-line)))
  (if (string-prefix? old-repo old-repository)
  (let ((new-repository
  (string-append new-repo
  (substring old-repository
  (string-length old-repo)
  (string-length old-repository)))))
  (call-with-output-file repository-file
  (lambda (port)
  (display new-repository port)))))))
  (cvs-repository-files sandbox)))

  (define (usage! moiself)
  (display "Usage: " (error-output-port))
  (display moiself (error-output-port))
  (display " <sandbox> <old-repo> <new-repo>" (error-output-port))
  (newline (error-output-port))
  (exit 1))

  (define (main args)
  (if (not (= 4 (length args)))
  (usage! (car args)))
  (apply rerepo-cvs! (cdr args)))