SF.net SVN: docutils:[9856 ] trunk/sandbox/aa-turner/g it_conversion

aa-turner--- via Docutils-checkins <[email protected]>
Newsgroups gmane.text.docutils.cvs
Message-ID <[email protected]>
Revision: 9856
          http://sourceforge.net/p/docutils/code/9856
Author:   aa-turner
Date:     2024-08-07 01:41:55 +0000 (Wed, 07 Aug 2024)
Log Message:
-----------
Major improvement to the reposurgeon conversion procedure

- Update to reposurgeon 4.38
- Incorporate more history (pre-CVS release archives)
- Preserve SVN branches and convert to git merges
- Add attribution for contributed patches

Modified Paths:
--------------
    trunk/sandbox/aa-turner/git_conversion/Makefile
    trunk/sandbox/aa-turner/git_conversion/common_clean.lift
    trunk/sandbox/aa-turner/git_conversion/common_combine.sh
    trunk/sandbox/aa-turner/git_conversion/common_load.lift
    trunk/sandbox/aa-turner/git_conversion/docutils.lift
    trunk/sandbox/aa-turner/git_conversion/docutils.map
    trunk/sandbox/aa-turner/git_conversion/post-convert.sh
    trunk/sandbox/aa-turner/git_conversion/prest.lift
    trunk/sandbox/aa-turner/git_conversion/sandbox.lift
    trunk/sandbox/aa-turner/git_conversion/web.lift

Added Paths:
-----------
    trunk/sandbox/aa-turner/git_conversion/Justfile
    trunk/sandbox/aa-turner/git_conversion/common_cvs_docstring.lift
    trunk/sandbox/aa-turner/git_conversion/common_cvs_structuredtext.lift

Added: trunk/sandbox/aa-turner/git_conversion/Justfile
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/Justfile	                        (rev 0)
+++ trunk/sandbox/aa-turner/git_conversion/Justfile	2024-08-07 01:41:55 UTC (rev 9856)
@@ -0,0 +1,260 @@
+# Justfile for docutils conversion using reposurgeon
+#
+# Steps to using this:
+# 0. Install just version 1.27 or later.
+#    See https://github.com/casey/just#installation::
+#    
+#        $ curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh | bash -s -- --to ~/bin
+#        $ export PATH="$HOME/bin:$PATH"
+#        $ $ just --version
+#        just 1.34.0
+#
+# 1. Install reposurgeon 4.38 with ``just reposurgeon-install``
+# 2. Make sure reposurgeon and repotool are on your $PATH.
+# 3. Run 'just' to build a converted repository.
+
+set windows-shell := ["pwsh", "-NoLogo", "-NoProfileLoadTime", "-Command"]
+reposurgeon-version := "4.38"
+# https://github.com/casey/just/issues/11#issuecomment-1546877905
+reposurgeon_dir := replace("reposurgeon-VERSION", "VERSION", reposurgeon-version)
+
+# Convert Docutils to git (main entry point)
+[group('convert')]
+convert: docutils-git prest-git sandbox-git web-git
+  echo "Conversion finished. Cheerio!"
+
+# Get and install reposurgeon
+# ===========================
+
+# Install reposurgeon's dependencies using apt-get
+[group('reposurgeon')]
+reposurgeon-dependencies:
+  sudo apt install -y \
+    make rsync bzip2 \
+    golang \
+    cvs cvs-fast-export mercurial subversion \
+    asciidoctor shellcheck
+
+# Clone the reposurgeon repository
+[group('reposurgeon')]
+reposurgeon-clone:
+  git clone --config advice.detachedHead=false --depth=1 --branch {{ reposurgeon-version }} https://gitlab.com/esr/reposurgeon.git
+
+# Download the reposurgeon archive (requires bzip2 installed)
+[group('reposurgeon')]
+reposurgeon-download:
+  bzip2 --version 2>/dev/null || echo bzip2 not found!
+  curl \
+    --fail \
+    --globoff \
+    --location \
+    --proto-default https \
+    --remote-name \
+    --remote-time \
+    --retry 10 \
+    --retry-max-time 10 \
+    "https://gitlab.com/esr/reposurgeon/-/archive/{{reposurgeon-version}}/reposurgeon-{{reposurgeon-version}}.tar.bz2"
+  tar --extract --bzip2 --file "reposurgeon-{{reposurgeon-version}}.tar.bz2"
+
+# Install reposurgeon
+[group('reposurgeon')]
+reposurgeon-install: reposurgeon-dependencies
+  make -C {{reposurgeon_dir}} all
+  sudo make -C {{reposurgeon_dir}} install
+  make -C {{reposurgeon_dir}} test
+
+# Get local copies of the SVN and CVS sources
+# ===========================================
+
+# Update sourceforge mirrors (done automatically during conversion)
+[group('tools')]
+update-mirrors: _docutils-mirror _docstring-mirror _structuredtext-mirror _archives
+
+# short version: rsync -ahPvi svn.code.sf.net::p/docutils/code/* docutils-mirror
+
+_docutils-mirror:
+  # Estimated time: 60s
+  rsync \
+    --archive --human-readable --partial --progress --verbose --itemize-changes \
+    "svn.code.sf.net::p/docutils/code/*" \
+    docutils-mirror
+
+_docstring-mirror:
+  # Estimated time: 5s
+  rsync \
+    --archive --human-readable --partial --progress --verbose --itemize-changes \
+    "a.cvs.sourceforge.net::cvsroot/docstring/" \
+    docstring-mirror
+
+_structuredtext-mirror:
+  # Estimated time: 5s
+  rsync \
+    --archive --human-readable --partial --progress --verbose --itemize-changes \
+    "a.cvs.sourceforge.net::cvsroot/structuredtext/" \
+    structuredtext-mirror
+
+_archives:
+  # Get pre-CVS release archives for incorporation into history
+  [ -f dps-0.1.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.1/dps-0.1.tar.gz
+  [ -f dps.0.2.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.2/dps.0.2.tar.gz
+  [ -f dps.0.3.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.3/dps.0.3.tar.gz
+  [ -f rst-0.1.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.1/rst-0.1.tar.gz
+  [ -f rst.0.2.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.2/rst.0.2.tar.gz
+  [ -f rst.0.3.tar.gz ] || wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.3/rst.0.3.tar.gz
+  # no need for 0.4 archives, as CVS history begins at 0.3
+  # wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.4/dps-0.4.tar.gz
+  # wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.4/restructuredtext-0.4.tar.gz
+
+  # due to inscrutable tar errors, we repack every archive
+  mkdir -p tmp_repack
+  cd tmp_repack && tar -xzf ../dps-0.1.tar.gz --one-top-level=dps-0.1 --strip-components=0
+  cd tmp_repack && tar -xzf ../dps.0.2.tar.gz --one-top-level=dps-0.2 --strip-components=1
+  cd tmp_repack && tar -xzf ../dps.0.3.tar.gz --one-top-level=dps-0.3 --strip-components=1
+  cd tmp_repack && tar -xzf ../rst-0.1.tar.gz --one-top-level=rst-0.1 --strip-components=0
+  cd tmp_repack && tar -xzf ../rst.0.2.tar.gz --one-top-level=rst-0.2 --strip-components=1
+  cd tmp_repack && tar -xzf ../rst.0.3.tar.gz --one-top-level=rst-0.3 --strip-components=1
+
+  cd tmp_repack && tar -cf docstring-0.1.tar dps-0.1
+  cd tmp_repack && tar -cf docstring-0.2.tar dps-0.2
+  cd tmp_repack && tar -cf docstring-0.3.tar dps-0.3
+  cd tmp_repack && tar -cf structuredtext-0.1.tar rst-0.1
+  cd tmp_repack && tar -cf structuredtext-0.2.tar rst-0.2
+  cd tmp_repack && tar -cf structuredtext-0.3.tar rst-0.3
+  mv tmp_repack/*.tar ./
+  rm -rf tmp_repack
+
+# Dump streams for reposurgeon
+# ============================
+
+# Dump reposurgeon streams (done automatically during conversion)
+[group('tools')]
+dump-streams: _dump-docutils-svn _dump-docstring-fi _dump-structuredtext-fi
+
+_dump-docutils-svn: _docutils-mirror
+  # Estimated time: 10 mins
+  repotool export -d docutils-mirror > docutils.svn
+
+_dump-docstring-fi: _docstring-mirror
+  # Estimated time: 10s
+  repotool export -d docstring-mirror > docstring.fi
+
+_dump-structuredtext-fi: _structuredtext-mirror
+  # Estimated time: 10s
+  repotool export -d structuredtext-mirror > structuredtext.fi
+
+# Create the git repositories
+# ===========================
+
+_common-git: _archives
+  # 'Caching' of sorts; don't rebuild if a file exists.
+  # To force a regeneration, run `just dump-streams`
+  [ -f docutils.svn ] || just _dump-docutils-svn
+  [ -f docstring.fi ] || just _dump-docstring-fi
+  [ -f structuredtext.fi ] || just _dump-structuredtext-fi
+  # Estimated time: script common.lift: 
+  # Estimated time: write >common.fi:   60s
+  # Estimated time: rebuild common-git: 
+  [ -f docutils_late.fi ] || reposurgeon 'script common_load.lift'
+  [ -f cvs_docstring.fi ] || reposurgeon 'script common_cvs_docstring.lift'
+  [ -f cvs_structuredtext.fi ] || reposurgeon 'script common_cvs_structuredtext.lift'
+  [ -d docutils_tmp_early ] || reposurgeon 'read <docutils_early.fi' 'prefer git' 'write docutils_tmp_early/'
+  [ -d docutils_tmp_late ] || reposurgeon 'read <docutils_late.fi' 'prefer git' 'write docutils_tmp_late/'
+  [ -d cvs_tmp_docstring ] || reposurgeon 'read <cvs_docstring.fi' 'prefer git' 'write cvs_tmp_docstring/'
+  [ -d cvs_tmp_structuredtext ] || reposurgeon 'read <cvs_structuredtext.fi' 'prefer git' 'write cvs_tmp_structuredtext/'
+  [ -d tmp_combined ] || ./common_combine.sh
+  [ -f tmp_combined.fi ] || repotool export -d tmp_combined > tmp_combined.fi
+  [ -f common.fi ] || reposurgeon 'script common_clean.lift' 'prefer git' 'rebuild common-git'
+  # just _common-combine
+
+[group('convert')]
+docutils-git: _common-git
+  reposurgeon 'script docutils.lift' 'rebuild docutils-git'
+  cd docutils-git && just ../ _post-convert
+  # Remove rel-0.15 branch. Must be done after retagging,
+  # otherwise the tip commit is lost, but for some reason
+  # the tags don't survive if reposurgeon does it.
+  cd docutils-git && git branch --delete --force rel-0.15
+
+[group('convert')]
+prest-git: _common-git
+  reposurgeon 'script prest.lift' 'rebuild prest-git'
+  cd prest-git && just ../ _post-convert
+
+[group('convert')]
+sandbox-git: _common-git
+  reposurgeon 'script sandbox.lift' 'rebuild sandbox-git'
+  cd sandbox-git && just ../ _post-convert
+
+[group('convert')]
+web-git: _common-git
+  reposurgeon 'script web.lift' 'rebuild web-git'
+  cd web-git && just ../ _post-convert
+
+[no-cd]
+_post-convert:
+  # Reinitialise repository. We do this for sanity, as git might expect
+  # things that reposurgeon doesn't provide.
+  git init
+
+  # Run a garbage-collect on the generated git repository.  Import doesn't.
+  # This repack call is the active part of gc --aggressive.  This call is
+  # tuned for very large repositories.
+  git -c pack.threads=1 repack -AdF --window=1250 --depth=250
+
+  # Clean repo
+  git prune
+  git rm -rf .
+  git clean -fxd
+  git reset HEAD --hard
+
+  # Check integrity
+  git fsck --full --strict --unreachable --dangling --lost-found
+
+  # Enable commit graph
+  git config core.commitGraph true
+  git config fetch.writeCommitGraph true
+  git commit-graph write --append --reachable --changed-paths
+  git commit-graph verify
+
+  # End by re-reinitialising repository. Why not!
+  git init
+
+# Comparison commands
+# ===================
+
+# Make a local checkout of the source mirror for inspection
+_docutils-svn-export:
+  svn export --ignore-keywords https://svn.code.sf.net/p/docutils/code/trunk docutils-svn-export
+
+# Compare the histories of the unconverted and converted repositories at HEAD.
+[group('tools')]
+compare: _docutils-svn-export docutils-git 
+  repotool compare docutils-svn-export docutils-git
+
+# Bundle the conversion files
+# ===========================
+
+SOURCES := "Makefile Justfile docutils.map common_load.lift common_cvs_docstring.lift common_cvs_structuredtext.lift common_combine.sh common_clean.lift docutils.lift prest.lift sandbox.lift web.lift post-convert.sh"
+# Bundle the conversion files
+[group('tools')]
+dist:
+  tar --dereference --transform 's:^:docutils-conversion/:' -czvf docutils-conversion.tar.gz $(SOURCES)
+
+# Publish the git repositories
+# ============================
+
+# Publish the git repositories
+[group('tools')]
+push-remote:
+  # Docutils
+  cd docutils-git; git remote add origin https://github.com/docutils-conversion/docutils.git
+  cd docutils-git; git push -u origin --tags
+  # Prest
+  cd prest-git; git remote add origin https://github.com/docutils-conversion/prest.git
+  cd prest-git; git push -u origin --tags
+  # Sandbox
+  cd sandbox-git; git remote add origin https://github.com/docutils-conversion/sandbox.git
+  cd sandbox-git; git push -u origin --tags
+  # Web
+  cd web-git; git remote add origin https://github.com/docutils-conversion/web.git
+  cd web-git; git push -u origin --tags

Modified: trunk/sandbox/aa-turner/git_conversion/Makefile
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/Makefile	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/Makefile	2024-08-07 01:41:55 UTC (rev 9856)
@@ -6,11 +6,10 @@
 
 .PHONY: convert
 convert: docutils-git prest-git sandbox-git web-git
-
 # Install reposurgeon
 # ===========================
 
-# requires reposurgeon 4.31; this is the latest version in Ubuntu 22.04
+# requires reposurgeon 4.38; this is the latest version in Ubuntu 24.04
 .PHONY: reposurgeon-install
 reposurgeon-install:
 	sudo apt install --yes make rsync cvs-fast-export subversion cvs reposurgeon
@@ -28,9 +27,52 @@
 structuredtext-mirror:
 	rsync --archive --human-readable --partial --progress --verbose --itemize-changes a.cvs.sourceforge.net::cvsroot/structuredtext/ structuredtext-mirror
 
+# Get local copies of the pre-CVS release archives
+# ================================================
+
+dps-0.1.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.1/dps-0.1.tar.gz
+dps.0.2.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.2/dps.0.2.tar.gz
+dps.0.3.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.3/dps.0.3.tar.gz
+rst-0.1.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.1/rst-0.1.tar.gz
+rst.0.2.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.2/rst.0.2.tar.gz
+rst.0.3.tar.gz:
+	wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.3/rst.0.3.tar.gz
+# no need for 0.4 archives, as CVS history begins at 0.3
+# wget --no-verbose https://master.dl.sourceforge.net/project/docstring/dps/0.4/dps-0.4.tar.gz
+# wget --no-verbose https://master.dl.sourceforge.net/project/structuredtext/restructuredtext/0.4/restructuredtext-0.4.tar.gz
+
+.PHONY: repack_archives
+repack_archives: dps-0.1.tar.gz dps.0.2.tar.gz dps.0.3.tar.gz rst-0.1.tar.gz rst.0.2.tar.gz rst.0.3.tar.gz
+	# due to inscrutable tar errors, we repack every archive
+	mkdir -p tmp_repack
+	cd tmp_repack && tar -xzf ../dps-0.1.tar.gz --one-top-level=dps-0.1 --strip-components=0
+	cd tmp_repack && tar -xzf ../dps.0.2.tar.gz --one-top-level=dps-0.2 --strip-components=1
+	cd tmp_repack && tar -xzf ../dps.0.3.tar.gz --one-top-level=dps-0.3 --strip-components=1
+	cd tmp_repack && tar -xzf ../rst-0.1.tar.gz --one-top-level=rst-0.1 --strip-components=0
+	cd tmp_repack && tar -xzf ../rst.0.2.tar.gz --one-top-level=rst-0.2 --strip-components=1
+	cd tmp_repack && tar -xzf ../rst.0.3.tar.gz --one-top-level=rst-0.3 --strip-components=1
+
+	cd tmp_repack && tar -cf docstring-0.1.tar dps-0.1
+	cd tmp_repack && tar -cf docstring-0.2.tar dps-0.2
+	cd tmp_repack && tar -cf docstring-0.3.tar dps-0.3
+	cd tmp_repack && tar -cf structuredtext-0.1.tar rst-0.1
+	cd tmp_repack && tar -cf structuredtext-0.2.tar rst-0.2
+	cd tmp_repack && tar -cf structuredtext-0.3.tar rst-0.3
+	mv tmp_repack/*.tar ./
+	rm -rf tmp_repack
+
 # Dump streams for reposurgeon
 # ============================
 
+# Dump reposurgeon streams (done automatically during conversion)
+.PHONY: dump-streams
+dump-streams: docutils.svn docstring.fi structuredtext.fi
+
 docutils.svn: docutils-mirror
 	repotool export -d docutils-mirror > docutils.svn
 
@@ -43,31 +85,53 @@
 # Create the git repositories
 # ===========================
 
-common-git: docutils.svn docstring.fi structuredtext.fi
-	# prepare the two
-	reposurgeon 'script common_cvs.lift'
+# Also outputs docutils_early.fi
+docutils_late.fi: common_load.lift docutils.svn
 	reposurgeon 'script common_load.lift'
-	mkdir -p docutils_tmp_early
-	reposurgeon 'read <docutils_early.fi' 'prefer git' 'write docutils_tmp_early'
-	mkdir -p docutils_tmp_late
-	reposurgeon 'read <docutils_late.fi' 'prefer git' 'write docutils_tmp_late'
+
+docutils_tmp_early: docutils_late.fi
+	reposurgeon 'read <docutils_early.fi' 'prefer git' 'write docutils_tmp_early/'
+
+docutils_tmp_late: docutils_late.fi
+	reposurgeon 'read <docutils_late.fi' 'prefer git' 'write docutils_tmp_late/'
+
+cvs_docstring.fi: common_cvs_docstring.lift docstring.fi
+	reposurgeon 'script common_cvs_docstring.lift'
+
+cvs_tmp_docstring: cvs_docstring.fi
+	reposurgeon 'read <cvs_docstring.fi' 'prefer git' 'write cvs_tmp_docstring/'
+
+cvs_structuredtext.fi: common_cvs_structuredtext.lift structuredtext.fi
+	reposurgeon 'script common_cvs_structuredtext.lift'
+
+cvs_tmp_structuredtext: cvs_structuredtext.fi
+	reposurgeon 'read <cvs_structuredtext.fi' 'prefer git' 'write cvs_tmp_structuredtext/'
+
+tmp_combined: common_combine.sh docutils_tmp_early cvs_tmp_docstring cvs_tmp_structuredtext
 	./common_combine.sh
-	# TODO replace symlinks with copies
-	reposurgeon 'script common_clean.lift' 'write >common.fi' 'rebuild common-git'
 
-docutils-git: common-git docutils.lift
+tmp_combined.fi: tmp_combined
+	repotool export -d tmp_combined > tmp_combined.fi
+
+common.fi: common_clean.lift tmp_combined.fi docutils_late.fi
+	reposurgeon 'script common_clean.lift' 'prefer git' 'rebuild common-git'
+
+common-git: common.fi post-convert.sh
+	./post-convert.sh common-git
+
+docutils-git: docutils.lift common.fi post-convert.sh
 	reposurgeon 'script docutils.lift' 'rebuild docutils-git'
 	./post-convert.sh docutils-git
 
-prest-git: common-git prest.lift
+prest-git: prest.lift common.fi post-convert.sh
 	reposurgeon 'script prest.lift' 'rebuild prest-git'
 	./post-convert.sh prest-git
 
-sandbox-git: common-git sandbox.lift
+sandbox-git: sandbox.lift common.fi post-convert.sh
 	reposurgeon 'script sandbox.lift' 'rebuild sandbox-git'
 	./post-convert.sh sandbox-git
 
-web-git: common-git web.lift
+web-git: web.lift common.fi post-convert.sh
 	reposurgeon 'script web.lift' 'rebuild web-git'
 	./post-convert.sh web-git
 
@@ -76,19 +140,38 @@
 
 # Make a local checkout of the source mirror for inspection
 docutils-svn-export:
+	# --ignore-keywords keeps RCS keywords ("$Date$" etc) unchanged
 	svn export --ignore-keywords https://svn.code.sf.net/p/docutils/code/trunk docutils-svn-export
 
 # Compare the histories of the unconverted and converted repositories at HEAD.
 .PHONY: compare
-compare: docutils-svn-export docutils-git 
+compare: docutils-svn-export docutils-git
 	repotool compare docutils-svn-export docutils-git
 
 # Bundle the conversion files
 # ===========================
 
-SOURCES = Makefile docutils.map common.lift cvs.lift docutils.lift prest.lift sandbox.lift web.lift post-convert.sh
+SOURCES = Makefile Justfile docutils.map common_load.lift common_cvs_docstring.lift common_cvs_structuredtext.lift common_combine.sh common_clean.lift docutils.lift prest.lift sandbox.lift web.lift post-convert.sh
 docutils-conversion.tar.gz: $(SOURCES)
 	tar --dereference --transform 's:^:docutils-conversion/:' -czvf docutils-conversion.tar.gz $(SOURCES)
 
 .PHONY: dist
 dist: docutils-conversion.tar.gz
+
+# Publish the git repositories
+# ============================
+
+.PHONY: push-remote
+push-remote:
+	# Docutils
+	cd docutils-git; git remote add origin https://github.com/docutils-conversion/docutils.git
+	cd docutils-git; git push -u origin --tags
+	# Prest
+	cd prest-git; git remote add origin https://github.com/docutils-conversion/prest.git
+	cd prest-git; git push -u origin --tags
+	# Sandbox
+	cd sandbox-git; git remote add origin https://github.com/docutils-conversion/sandbox.git
+	cd sandbox-git; git push -u origin --tags
+	# Web
+	cd web-git; git remote add origin https://github.com/docutils-conversion/web.git
+	cd web-git; git push -u origin --tags

Modified: trunk/sandbox/aa-turner/git_conversion/common_clean.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/common_clean.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/common_clean.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,50 +1,73 @@
 # common_clean.lift
 
-# These reposurgeon scripts are common to all repositories.
-# They are run in order:
+# This is the one of the common reposurgeon lift script
+# files, creating the common history that the four
+# repo-specific scripts use as their inputs. This file is
+# called as part of the common-git target, and should not
+# be loaded directly. It has no inputs.
+# These files require reposurgeon 4.38.
+
+# These 'common' scripts are run in order:
 # 1. common_load.lift
-# 2. common_merge.sh
-# 3. common_clean.lift
+# 2. common_cvs_docstring.lift
+# 3. common_cvs_structuredtext.lift
+# 4. common_combine.sh
+# 5. common_clean.lift
 
 # Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
 set canonicalize
+# Enable fancy progress messages even when not on a tty.
 set progress
-prefer git
 
-read --format=git tmp_combined/
-prefer git
+read <tmp_combined.fi
+read <docutils_late.fi
 
-read --format=git docutils_tmp_late/
-prefer git
+# After reading the input streams,
+# if something goes wrong we'd prefer not to abort.
+set relax
 
-# Unite the combined histories with Late
-# this makes the tip of tmp_combined the root commit for docutils_late
+# Unite the combined histories with docutils-late
+# this makes the tip of tmp_combined ("~merge histories~")
+# the root commit for docutils_late ("Initial revision")
 choose tmp_combined
-@max(=C) & /~merge histories~/ graft docutils_tmp_late
+@max(=C) & /~merge histories~/c graft docutils_late
 rename docutils
-renumber
 
 # Delete surgery branches
-branch delete heads/docutils
-branch delete heads/docstring
-branch delete heads/structuredtext
-branch rename /heads\/(.*)-docutils_tmp_late/ "heads/\1"
+branch delete refs/heads/docutils
+branch delete refs/heads/docstring
+branch delete refs/heads/structuredtext
+branch rename /heads\/(.*)-docutils_late/ "heads/\1"
+branch rename /tags\/(.*)-docutils_late/ "tags/\1"
 
 # Update metadata of merge commit
-# <2002-04-20T03:00:05Z#1> Initial revision (first commit of docutils_late)
+# <2002-04-20T03:01:52Z> Initial revision (first commit of docutils_late)
 # the parent of this commit is the merge commit, we can't rely on commit
 # message matching as we blank out the commit message and the date is
 # indeterminate
-@max(@par(<2002-04-20T03:00:05Z#1>)) assign --singleton merge_commit
-merge_commit setfield comment "Combine into Docutils\n\n***Commit added during git conversion***.\n\nMerged projects:\n\n- docutils (SVN)\n- docstring (CVS)\n- structuredtext (CVS)\n"
+#@max(@par(<2002-04-20T03:01:52Z>)) assign --singleton merge_commit
+=C & /~merge histories~/c assign --singleton merge_commit
+merge_commit setfield comment "Combine into Docutils\n\n***Commit created during git conversion***\n\nMerged projects:\n\n- docutils (SVN)\n- docstring (CVS)\n- structuredtext (CVS)\n"
 merge_commit attribution =A set "David Goodger" "[email protected]" "Sat Apr 20 02:00:00 2002 +0000"
 merge_commit attribution =C set "David Goodger" "[email protected]" "Sat Apr 20 02:00:00 2002 +0000"
 
-# Remove merge files
-define delete_merge {
-<2002-04-20T03:00:05Z#1> add D {0}
-}
-
+# Allow file moves from dps/ and restructuredtext/ to be recognised
+# This is quite involved. First we remove existing file operations
+# after the merge. Then we remove the reset (deleteall) marker in
+# the first commit, and finally manually add delete file operations
+# to each dps/ and restructuredtext/ file. We can't use expunge,
+# as that simply removes modifiacations rather than adding deletes.
+<2002-04-20T03:01:52Z#1> assign --singleton du_first_commit
+@suc(du_first_commit) expunge "(dps|restructuredtext)/.*")
+du_first_commit remove 1
+define delete_merge <2002-04-20T03:01:52Z#1> add D "{0}"
 do delete_merge dps/COPYING.txt
 do delete_merge dps/HISTORY.txt
 do delete_merge dps/MANIFEST.in
@@ -164,6 +187,11 @@
 
 # Ensure every commit message ends with a single new line
 =C append "\n" --rstrip
-=C append "\n"
 
+# Export to common.fi
+write >common.fi
+
+# Timing statistics
+timing
+
 exit

Modified: trunk/sandbox/aa-turner/git_conversion/common_combine.sh
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/common_combine.sh	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/common_combine.sh	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,16 +1,23 @@
 #!/bin/sh
 
+# exit on error or undefined variable; echo commands
+set -eux
+
 # These reposurgeon scripts are common to all repositories.
 # They are run in order:
 # 1. common_load.lift
-# 2. common_merge.sh
-# 3. common_clean.lift
+# 2. common_cvs_docstring.lift
+# 3. common_cvs_structuredtext.lift
+# 4. common_combine.sh
+# 5. common_clean.lift
 
-mkdir -p tmp_combined
+mkdir tmp_combined
 cd tmp_combined
 
 git init --quiet
 git config core.filemode false
+git config user.email "[email protected]"
+git config user.name "David Goodger"
 
 git remote add tmp_early ../docutils_tmp_early
 git remote add tmp_docstring ../cvs_tmp_docstring
@@ -18,16 +25,21 @@
 git fetch --all
 
 git switch -c docutils tmp_early/master
-git switch -c docstring tmp_docstring/docstring
-git switch -c structuredtext tmp_structuredtext/structuredtext
+git switch -c docstring tmp_docstring/master-docstring
+git switch -c structuredtext tmp_structuredtext/master-structuredtext
+
+# This will claim to fail, hence using read-tree
+# https://stackoverflow.com/a/31186732
 git switch docutils
-
-git merge --allow-unrelated-histories -m "~merge histories~" docutils structuredtext docstring
+git merge --allow-unrelated-histories -m "~merge histories~" docutils structuredtext docstring || true
 git read-tree docutils structuredtext docstring
+# Remove the old web directories
+git rm -r web_docstring web_structuredtext
+# Commit the index and reset the working tree
 git commit -m "~merge histories~"
 git reset --hard
 
-git rm -r web_docstring web_structuredtext
-git commit --amend --all -m "~merge histories~"
-#git rm -rf -- *
-#git checkout docutils -- .
+git branch --delete docstring structuredtext
+git remote remove tmp_early
+git remote remove tmp_docstring
+git remote remove tmp_structuredtext

Added: trunk/sandbox/aa-turner/git_conversion/common_cvs_docstring.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/common_cvs_docstring.lift	                        (rev 0)
+++ trunk/sandbox/aa-turner/git_conversion/common_cvs_docstring.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -0,0 +1,107 @@
+# common_cvs_docstring.lift
+
+# This is the one of the common reposurgeon lift script
+# files, creating the common history that the four
+# repo-specific scripts use as their inputs. This file is
+# called as part of the common-git target, and should not
+# be loaded directly. It has one input (docutils.map).
+# These files require reposurgeon 4.38.
+
+# These 'common' scripts are run in order:
+# 1. common_load.lift
+# 2. common_cvs_docstring.lift
+# 3. common_cvs_structuredtext.lift
+# 4. common_combine.sh
+# 5. common_clean.lift
+
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
+# Read CVS docstring repository
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#CVS
+# Do not modify .gitignore files in the source tree
+# Estimated time: 5s
+read --preserve --no-automatic-ignores --user-ignores <docstring.fi
+
+# Load the CVS-to-Git author IDs map
+# CSV just uses a username, Git demands a name and email address
+# MUST BE AFTER 'read' otherwise reposurgeon panics (SIGSEV).
+# Authors here are goodger, gtk, and richard.
+authors read <docutils.map
+
+# Write 'virgin' conversion with no changes
+#write --format=git virgin_docstring/
+
+# After reading the author map and the CVS dump,
+# if something goes wrong we'd prefer not to abort.
+set relax
+
+# Update commit messages
+# Attempt to massage comments into a git-friendly form
+# with a blank separator line after a summary line.
+gitify
+# Replace \r\n (Windows-style) line endings with \n
+=C filter dedos
+
+# Remove uneeded "import-1.1.1" branch
+reset delete refs/tags/rel-0-3
+branch delete refs/heads/import-1.1.1
+<2001-07-22T22:36:35Z> setfield comment "First Imported"
+
+# Combine "*** empty log message ***" commits with neighbours
+# where appropriate
+<2002-02-06T02:56:21Z> setfield comment "\n"
+<2002-02-06T02:56:21Z> squash
+# Drop empty commit that removes a single space in
+# dps/dps/__init__.py
+<2002-03-16T06:09:45Z> delete commit --quiet
+
+# Give "*** empty log message ***" actual messages
+# Chosen to be in the style of the existing repo/commit messages
+<2002-01-25T23:58:36Z> setfield comment "updated"
+<2002-02-06T03:02:51Z> setfield comment "Added core, readers"
+<2001-09-05T02:33:58Z> setfield comment "added python-docstring-mode.txt"
+
+# Incorporate pre-CSV release archives into the history
+# Only use 0.1-0.3, as 0.4 is already in the CVS history
+# Force fake committer details (always "Fred J. Foonly <[email protected]")
+set testmode  # 'set fakeuser' in 5.0+
+incorporate --firewall docstring-0.1.tar docstring-0.2.tar docstring-0.3.tar
+clear testmode
+/Fred J. Foonly <[email protected]>/ path rename "^(.*)" "dps/\1" --force
+# This isn't exactly accurate as 0.2 and 0.3 use "dps.0.x". It'll do.
+/Fred J. Foonly <[email protected]>/ filter regex /docstring-/dps-/c
+/Fred J. Foonly <[email protected]>/ append ".gz\n\n***Commit created during git conversion***" --rstrip
+# "First Imported" and the 0.3 archive have identical timestamps.
+# Make the 0.3 archive the parent of "First Imported",
+# and delete the firewall commit.
+<2001-07-22T22:36:35Z#1>,<2001-07-22T22:36:35Z#2> reparent
+/Firewall commit/c delete commit
+# Remove traces of the fake committer
+/Fred J. Foonly <[email protected]>/ attribution =C set "David Goodger" [email protected]
+
+# Remove autogenerated .gitignore
+expunge .gitignore
+
+# Prepare for merge; rename master branch
+branch rename heads/master heads/master-docstring
+
+# Prepare for merge; Rename web directory
+path rename "web/(.*)" "web_docstring/\1" --force
+
+# Export to git
+write >cvs_docstring.fi
+
+# Timing statistics
+timing
+
+exit

Added: trunk/sandbox/aa-turner/git_conversion/common_cvs_structuredtext.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/common_cvs_structuredtext.lift	                        (rev 0)
+++ trunk/sandbox/aa-turner/git_conversion/common_cvs_structuredtext.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -0,0 +1,149 @@
+# common_cvs_structuredtext.lift
+
+# This is the one of the common reposurgeon lift script
+# files, creating the common history that the four
+# repo-specific scripts use as their inputs. This file is
+# called as part of the common-git target, and should not
+# be loaded directly. It has one input (docutils.map).
+# These files require reposurgeon 4.38.
+
+# These 'common' scripts are run in order:
+# 1. common_load.lift
+# 2. common_cvs_docstring.lift
+# 3. common_cvs_structuredtext.lift
+# 4. common_combine.sh
+# 5. common_clean.lift
+
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
+# Read CVS structuredtext repository
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#CVS
+# Do not modify .gitignore files in the source tree
+# Estimated time: 5s
+read --preserve --no-automatic-ignores --user-ignores <structuredtext.fi
+
+# Load the CVS-to-Git author IDs map
+# CSV just uses a username, Git demands a name and email address
+# MUST BE AFTER 'read' otherwise reposurgeon panics (SIGSEV).
+# Authors here are goodger, gtk, and richard.
+authors read <docutils.map
+
+# Write 'virgin' conversion with no changes
+#write --format=git virgin_structuredtext/
+
+# After reading the author map and the CVS dump,
+# if something goes wrong we'd prefer not to abort.
+set relax
+
+# Update commit messages
+# Attempt to massage comments into a git-friendly form
+# with a blank separator line after a summary line.
+gitify
+# Replace \r\n (Windows-style) line endings with \n
+=C filter dedos
+
+# Remove uneeded "import-1.1.1" branch
+reset delete refs/heads/rel-0-3
+reset delete refs/tags/RELEASE
+branch delete refs/heads/import-1.1.1
+<2001-07-21T22:14:24Z#1> setfield comment "First Imported"
+<2001-07-21T22:14:24Z#2> delete commit --quiet
+
+# Remove uneeded "import-1.1.1" branch
+branch delete refs/heads/import-1.1.1
+branch delete refs/heads/rel-0-3
+branch delete refs/tags/RELEASE
+
+# Create merge commit from "merged from branch Rrefactor-test"
+# to tip of "heads/Rrefactor-test", and make Rrefactor-test
+# start from "initial checkin"
+<2001-07-22T22:45:33Z>,<2001-07-25T08:09:21Z> reparent --rebase
+<2001-09-01T16:29:12Z>,<2001-09-01T15:19:21Z> merge
+branch delete refs/heads/Rrefactor-test
+
+# Make moves more obvious in the Rrefactor-test branch
+# RTSTestSupport & ParserTestCase (<2001-09-01T15:10:16Z>, <2001-09-01T15:18:51Z>)
+# UnitTestFolder & TestFramework (<2001-09-01T15:10:50Z>, <2001-09-01T15:18:18Z>)
+# alltests/test_all (<2001-09-01T15:13:10Z>, <2001-09-01T15:19:21Z>)
+<2001-09-01T15:10:16Z>,<2001-09-01T15:18:51Z>,<2001-09-01T15:10:50Z>,<2001-09-01T15:18:18Z>,<2001-09-01T15:13:10Z>,<2001-09-01T15:19:21Z>,<2001-09-01T15:14:51Z> reorder
+<2001-09-01T15:10:16Z> squash
+<2001-09-01T15:10:50Z> squash
+<2001-09-01T15:13:10Z> squash
+
+# Merge "path change" and "initial checkin"
+<2001-07-22T22:27:43Z> squash
+<2001-07-22T22:45:33Z> setfield comment "initial checkin"
+
+# Remove empty commits
+=Z setfield comment "\n"
+=Z squash --empty-only --delete
+
+# Combine "*** empty log message ***" commits with neighbours
+# where appropriate
+# languages/__init__.py into "Added parser language module support"
+<2001-09-10T04:46:13Z>,<2001-09-10T04:42:28Z>,<2001-09-10T04:44:21Z> reorder
+<2001-09-10T04:46:13Z> setfield comment "\n"
+<2001-09-10T04:46:13Z> squash
+<2002-01-08T02:42:28Z> setfield comment "\n"
+<2002-01-08T02:42:28Z> squash --pushback
+<2002-02-20T04:29:13Z> setfield comment "\n"
+<2002-02-20T04:29:13Z> squash --pushback
+
+# Drop empty commit just before project retirement
+<2002-04-20T16:23:41Z> delete commit --quiet
+
+# Give "*** empty log message ***" actual messages
+# Chosen to be in the style of the existing repo/commit messages
+<2001-09-04T04:11:01Z> setfield comment "Added test_TableParser"
+<2001-10-26T04:33:17Z> setfield comment "updated"
+<2001-10-30T05:05:00Z> setfield comment "Added test_transitions"
+<2001-11-06T23:11:52Z> setfield comment "Added test_substitutions"
+<2002-02-07T01:53:41Z> setfield comment "updated"
+<2002-03-07T03:45:42Z> setfield comment "Added test_citations"
+<2002-03-16T05:39:36Z> setfield comment "updated"
+<2002-03-28T04:28:10Z> setfield comment "updated"
+
+# Incorporate pre-CSV release archives into the history
+# Only use 0.1-0.3, as 0.4 is already in the CVS history
+# Force fake committer details (always "Fred J. Foonly <[email protected]")
+set testmode  # 'set fakeuser' in 5.0+
+incorporate --firewall structuredtext-0.1.tar structuredtext-0.2.tar structuredtext-0.3.tar
+clear testmode
+/Fred J. Foonly <[email protected]>/ path rename "^(.*)" "restructuredtext/\1" --force
+# This isn't exactly accurate as 0.2 and 0.3 use "rst.0.x". It'll do.
+/Fred J. Foonly <[email protected]>/ filter regex /structuredtext-/rst-/c
+/Fred J. Foonly <[email protected]>/ append ".gz\n\n***Commit created during git conversion***" --rstrip
+# "First Imported" and the 0.3 archive have identical timestamps.
+# Make the 0.3 archive the parent of "First Imported",
+# and delete the firewall commit.
+<2001-07-21T22:14:24Z#1>,<2001-07-21T22:14:24Z#2> reparent
+/Firewall commit/c delete commit
+# Remove traces of the fake committer
+/Fred J. Foonly <[email protected]>/ attribution =C set "David Goodger" [email protected]
+
+# Remove autogenerated .gitignore
+expunge .gitignore
+
+# Prepare for merge; rename master branch
+branch rename heads/master heads/master-structuredtext
+
+# Prepare for merge; Rename web directory
+path rename "web/(.*)" "web_structuredtext/\1" --force
+
+# Export to git
+write >cvs_structuredtext.fi
+
+# Timing statistics
+timing
+
+exit

Modified: trunk/sandbox/aa-turner/git_conversion/common_load.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/common_load.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/common_load.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,66 +1,424 @@
 # common_load.lift
+# Estimated time: 90s
 
-# These reposurgeon scripts are common to all repositories.
-# They are run in order:
+# This is the one of the common reposurgeon lift script
+# files, creating the common history that the four
+# repo-specific scripts use as their inputs. This file is
+# called as part of the common-git target, and should not
+# be loaded directly. It has one input (docutils.map).
+# These files require reposurgeon 4.38.
+
+# These 'common' scripts are run in order:
 # 1. common_load.lift
-# 2. common_merge.sh
-# 3. common_clean.lift
+# 2. common_cvs_docstring.lift
+# 3. common_cvs_structuredtext.lift
+# 4. common_combine.sh
+# 5. common_clean.lift
 
 # Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
 set canonicalize
+# Enable fancy progress messages even when not on a tty.
 set progress
-prefer git
 
 # Read subversion repo
-read --no-automatic-ignores --user-ignores <docutils.svn
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#_reading_subversion_repositories
+# Do not modify .gitignore files in the source tree
+# Preserve the history up to deletion when a branch or tag was deleted
+# in SVN (under refs/deleted/)
+# Estimated time: 30s
+read --preserve --no-automatic-ignores --user-ignores <docutils.svn
+
+# Load the Subversion-to-Git author IDs map
+# Subversion just uses a username, Git demands a name and email address
+# MUST BE AFTER 'read' otherwise reposurgeon panics (SIGSEV).
 authors read <docutils.map
-prefer git
 
+# Write 'virgin' conversion with no changes
+#write --format=git virgin_docutils/
+
+# After reading the author map and the SVN dump,
+# if something goes wrong we'd prefer not to abort.
+set relax
+
 # Update commit messages
+# Attempt to massage comments into a git-friendly form
+# with a blank separator line after a summary line.
 gitify
+# Replace \r\n (Windows-style) line endings with \n
 =C filter dedos
 
-# Add backreference to SVN IDs
-=C append "\n\nSubversion-Revision-ID: %LEGACY%" --legacy --rstrip
+# Add backreference to SVN IDs as a git trailer
+# `--rstrip` right-strips the comment *before* appending the text
+=C append "\n\nSubversion-Revision: r%LEGACY%\n" --legacy --rstrip
 
 # Delete branch-creation commits in Subversion, which are prefixed with
 # "emptycommit".
 tag delete /emptycommit/
 
-# Delete invalid tags and branches
-tag delete deleted/r3814/docutils-0.3.9-root
-tag delete rel-0.15-root 
-branch delete /tags\/.*/
+# Delete '-tipdelete' tags, these all have branches for the tip
+tag delete /tipdelete$/
+
+# Delete invalid tags and branches with no actual changes
+# (refs/tags/ is needed for lightweight tags)
+# 'initial' (r63): manufactured by cvs2svn
+tag delete initial
+# 'start' (r1558): combination of r2, r1550, and r1555
 branch delete refs/tags/start
+# 'merged_to_nesting' (r2576): just deletes sandbox/ and web/
 branch delete refs/tags/merged_to_nesting
+# 'address-rendering' (r4314): re-applies reverted r4311 in new branch
 branch delete refs/heads/address-rendering
+# 'index-bug': fixed in https://sourceforge.net/p/docutils/bugs/448/
 branch delete refs/heads/index-bug
+# 'root' tags for branch points
+tag delete deleted/r3130/multiple-ids-root
+tag delete deleted/r4668/directives-root
+tag delete rel-0.15-root
+# Uninteresting working branch (merged in r3770)
+branch delete refs/deleted/r3771/heads/todo2
+# Integrated into 'deleted/r3771/todo2'
+branch delete refs/deleted/r3773/heads/todo
+# Only delete ops
+branch delete refs/deleted/r3540-1/heads/ax
+branch delete refs/deleted/r3540-3/heads/tibs
+# Duplicates of r22, r23, and full history of PEP 287.
+branch delete refs/deleted/r3540-2/heads/goodger
+# Duplicate of r1555
+branch delete refs/deleted/r3540-4/heads/vendor
+# Integrated into 'deleted/r5620/abolish-userstring-haskey'
+branch delete refs/deleted/r5611/heads/abolish-userstring
+# Only backports from master, no 0.4.X release was ever made
+branch delete refs/deleted/r8125/heads/docutils-0.4
+# Invalid release tags pointing to the branching point
+tag delete deleted/r3383/docutils-
+tag delete deleted/r3814/docutils-0.3.9
+tag delete deleted/r4267/docutils-0.4
+reset delete refs/deleted/r3383/tags/docutils-
+reset delete refs/deleted/r3814/tags/docutils-0.3.9
+reset delete refs/deleted/r4267/tags/docutils-0.4
 
+# Remove useless commits: web/docutils
+# Indentical content was added to web/docutils.txt and web/index.txt
+# in r2 and r4, three minutes apart. 30 seconds later, docutils.txt
+# was deleted in r6 (and that path never modified again)
+<2>,<6> squash --quiet --delete
+
+# Merge split "initial revision" commits (r18 into r17)
+<17> setfield comment "\n"
+<17> squash
+<18> filter regex /r18/r17\nSubversion-Revision: r18/c
+
 # Remove "This commit was manufactured by cvs2svn ..." commits
-<1813> squash --quiet --delete
+# r1813: "This commit was manufactured by cvs2svn to create branch 'nesting'."
+# only contains commit with file deletions
+<1813> delete commit
+# Squash r2531 into r2532 ("Synced nesting with recent HEAD changes")
 <2531> setfield comment "\n"
 <2531> squash
+# Squash r2573 into r2577 ("Merge *all* HEAD revisions into nesting")
 <2573> setfield comment "\n"
 <2573> squash
+# Add squashed subversion ID's (/c restricts to commit message only)
+<2532> filter regex /r2532/r2531\nSubversion-Revision: r2532/c
+<2577> filter regex /r2577/r2573\nSubversion-Revision: r2577/c
 
-# Merge split "initial revision" commits
-<18> setfield comment "Subversion-Revision-ID: 18"
-<18> squash --pushback
-renumber
+# Remove test commits (r7802, r7803)
+<7802>,<7803> delete commit --quiet
 
+# r3521 should be a child of r3513 (svn mistake)
+# r3513 deletes sandbox/ and web/ and moves docutils/ to root,
+# 3515-1 moves root back to docutils/
+<3513>,<3521> reparent --rebase
+<3513> delete commit --quiet
+<3515-1> delete commit --quiet
+
+# Merge setup.py/flit commits to show moves
+<9448>,<9450>,<9449> reorder
+<9450> setfield comment "\n"
+<9450> squash --pushback
+<9448> filter regex /r9448/r9448\nSubversion-Revision: r9450/c
+
+# The 'better-emacs' branch has no parent. r3848 is the immediate
+# chronological predecessor. Also move the files to the correct
+# location to make merging easier, and delete the now-drop-only
+# commit (r3850).
+@dsc(<3850>) path rename "^emacs/(.*)" "docutils/tools/editors/emacs/\1" --force
+<3848>,<3851> reparent --rebase
+<3850> delete commit --quiet
+
+# Drop 'empty' branch creation commits.
+# These commits delete all root content and make "docutils/"
+# the new root, but have no actual changes.
+define drop_branch_commit {
+@dsc({0}) path rename "^(.*)" "docutils/\1" --force
+{0} setfield comment "\n"
+{0} squash --delete --quiet
+}
+
+# r3162: root of deleted/r3171-1/reporter-categories
+do drop_branch_commit <3162>
+# r4011: root of deleted/r4158/s5
+do drop_branch_commit <4011>
+# r4952: root of plugins
+do drop_branch_commit <4952>
+# r5000: root of deleted/r5015-1/include-after-until
+do drop_branch_commit <5000>
+# r5043: root of deleted/r5624/adjacent-citations
+do drop_branch_commit <5043>
+# r5514: root of lossless-rst-writer
+do drop_branch_commit <5514>
+# r5609: root of deleted/r5620/abolish-userstring-haskey
+do drop_branch_commit <5609>
+
+# Fix file paths in the subdocs branch
+# We remove all file delete operations, and rename all remaining
+# paths to restore the docutils/ directory
+# subdocs
+<5265> remove deletes
+@dsc(<5265>) path rename "^(.*)" "docutils/\1" --force
+
+# Create merge commits for branches
+# r3129 merges deleted/r3130/multiple-ids
+<3129>,<3128> merge
+branch delete refs/deleted/r3130/heads/multiple-ids
+# r3171-2 merges deleted/r3171-1/reporter-categories
+<3171-2>,<3163> merge
+branch delete refs/deleted/r3171-1/heads/reporter-categories
+# r3581 merges deleted/r3584_blais/interrupt_render
+<3581>,<3580> merge
+branch delete refs/deleted/r3584/heads/blais_interrupt_render
+# r3860 merges deleted/r3862/better-emacs
+<3860>,<3859> merge
+branch delete refs/deleted/r3862/heads/better-emacs
+# 3892-2 merges deleted/r3892-1/transforms
+<3892-2>,<3891> merge
+branch delete refs/deleted/r3892-1/heads/transforms
+# r4156 merges deleted/r4158/s5
+<4156>,<4155> merge
+branch delete refs/deleted/r4158/heads/s5
+# r4667 merges deleted/r4668/directives
+<4667>,<4665> merge
+branch delete refs/deleted/r4668/heads/directives
+# r5015-2 merges deleted/r5015-1/include-after-until
+<5015-2>,<5014> merge
+branch delete refs/deleted/r5015-1/heads/include-after-until
+# r5618 merges deleted/r5620/abolish-userstring-haskey
+<5618>,<5616> merge
+branch delete refs/deleted/r5620/heads/abolish-userstring-haskey
+# r5623 merges deleted/r5624/adjacent-citations
+<5623>,<5622> merge
+branch delete refs/deleted/r5624/heads/adjacent-citations
+
+# Drop 'Spelling fixes' commits in release branches
+<8093-2> squash --quiet --delete --tagback
+<8093-3> squash --quiet --delete --tagback
+<8093-4> squash --quiet --delete --tagback
+<8093-5> squash --quiet --delete --tagback
+<8093-6> squash --quiet --delete --tagback
+<8093-7> squash --quiet --delete --tagback
+
+# Drop r4331 (no changes other than SVN metadata)
+<4331> squash --quiet --delete --tagback
+
+define fix_du_tag_dir {
+{0} remove deletes
+{0} path rename "^(.*)" "docutils/\1" --force
+}
+
+# tag: docutils-0.3.9
+do fix_du_tag_dir <3815>
+# tag: docutils-0.3.7
+do fix_du_tag_dir <3816>
+# tag: docutils-0.4
+do fix_du_tag_dir <4268>
+# tag: docutils-0.5
+do fix_du_tag_dir <5579>
+# tag: docutils-0.6
+do fix_du_tag_dir <6168>
+# tag: docutils-0.7
+do fix_du_tag_dir <6358>
+# tag: docutils-0.8
+do fix_du_tag_dir <7088>
+# tag: docutils-0.8.1
+do fix_du_tag_dir <7108>
+# tag: docutils-0.9
+do fix_du_tag_dir <7412>
+# tag: docutils-0.9.1
+do fix_du_tag_dir <7453>
+# tag: docutils-0.10
+do fix_du_tag_dir <7565>
+# tag: docutils-0.11
+do fix_du_tag_dir <7695>
+# tag: docutils-0.12
+do fix_du_tag_dir <7759>
+# tag: docutils-0.13.1
+do fix_du_tag_dir <7988>
+# tag: docutils-0.14.0a
+do fix_du_tag_dir <8078>
+# tag: docutils-0.14a0
+do fix_du_tag_dir <8082>
+# tag: docutils-0.14rc1
+do fix_du_tag_dir <8088>
+# tag: docutils-0.14rc2
+do fix_du_tag_dir <8137>
+# tag: docutils-0.14
+do fix_du_tag_dir <8150>
+# tag: docutils-0.15
+do fix_du_tag_dir <8268>
+# tag: docutils-0.16
+do fix_du_tag_dir <8454>
+# tag: docutils-0.17
+do fix_du_tag_dir <8655>
+# tag: docutils-0.17.1
+do fix_du_tag_dir <8708>
+# tag: docutils-0.18
+do fix_du_tag_dir <8866>
+# tag: docutils-0.18.1
+do fix_du_tag_dir <8901>
+# tag: docutils-0.19
+do fix_du_tag_dir <9104>
+# tag: docutils-0.20
+do fix_du_tag_dir <9375>
+# tag: docutils-0.20.1
+do fix_du_tag_dir <9389>
+# tag: docutils-0.21
+do fix_du_tag_dir <9622>
+# tag: docutils-0.21.1
+do fix_du_tag_dir <9634>
+# tag: docutils-0.21.2
+do fix_du_tag_dir <9650>
+
+define fix_prest_tag_dir {
+{0} remove deletes
+{0} path rename "^(.*)" "prest/\1" --force
+}
+
+# tag: prest-0.3.10
+do fix_prest_tag_dir <4328>
+# tag: prest-0.3.11
+do fix_prest_tag_dir <4584>
+
+# Fix commit attributions
+# This adds a git 'author', the committer stays the same.
+# Sorted by revision number, but grouped by author.
+# This is a best-effort attempt based on going through
+# https://sourceforge.net/p/docutils/patches/
+# and the commit history.
+
+<7679> attribution append "Takayuki SHIMIZUKAWA" [email protected]
+<7681> attribution append "Takayuki SHIMIZUKAWA" [email protected]
+
+<7689> attribution append "Benoît Allard" [email protected]
+<8243> attribution append "Benoît Allard" [email protected]
+
+<7784> attribution append "Brecht Machiels" [email protected]
+<7785> attribution append "Brecht Machiels" [email protected]
+<7960> attribution append "Brecht Machiels" [email protected]
+<8183> attribution append "Brecht Machiels" [email protected]
+<8184> attribution append "Brecht Machiels" [email protected]
+
+<7952> attribution append "Takeshi KOMIYA" [email protected]
+<8039> attribution append "Takeshi KOMIYA" [email protected]
+<8219> attribution append "Takeshi KOMIYA" [email protected]
+<8246> attribution append "Takeshi KOMIYA" [email protected]
+<8501> attribution append "Takeshi KOMIYA" [email protected]
+<8251> attribution append "Takeshi KOMIYA" [email protected]
+<8522> attribution append "Takeshi KOMIYA" [email protected]
+
+<7953> attribution append "Dmitry Shachnev" [email protected]
+<8282> attribution append "Dmitry Shachnev" [email protected]
+<8662> attribution append "Dmitry Shachnev" [email protected]
+<9365> attribution append "Dmitry Shachnev" [email protected]
+<9430> attribution append "Dmitry Shachnev" [email protected]
+
+<7967> attribution append "Shahin Azad" [email protected]
+<8600> attribution append "Shahin Azad" [email protected]
+
+<8228> attribution append "Hugo van Kemenade" [email protected]
+<8241> attribution append "Hugo van Kemenade" [email protected]
+<9198> attribution append "Hugo van Kemenade" [email protected]
+
+/Signed-off-by: Stephen Finucane <[email protected]>/c attribution append "Stephen Finucane" [email protected]
+<8333> attribution append "Stephen Finucane" [email protected]
+<8364> attribution append "Stephen Finucane" [email protected]
+<8366> attribution append "Stephen Finucane" [email protected]
+<8368> attribution append "Stephen Finucane" [email protected]
+<8371> attribution append "Stephen Finucane" [email protected]
+<8374> attribution append "Stephen Finucane" [email protected]
+<8375> attribution append "Stephen Finucane" [email protected]
+
+<8497> attribution append "Michał Górny" [email protected]
+
+<8569> attribution append "John T. Wodder II" [email protected]
+<8570> attribution append "John T. Wodder II" [email protected]
+<8571> attribution append "John T. Wodder II" [email protected]
+<8577> attribution append "John T. Wodder II" [email protected]
+<8626> attribution append "John T. Wodder II" [email protected]
+<8769> attribution append "John T. Wodder II" [email protected]
+
+<8604> attribution append "Casper Meijn" [email protected]
+
+<8823> attribution append "Clément Pit-Claudel" [email protected]
+<8827> attribution append "Clément Pit-Claudel" [email protected]
+<9176> attribution append "Clément Pit-Claudel" [email protected]
+<9176> filter regex /Clément/Clément/c
+
+<8934> attribution append "Adam Turner" [email protected]
+<8935> attribution append "Adam Turner" [email protected]
+<8950> attribution append "Adam Turner" [email protected]
+<8954> attribution append "Adam Turner" [email protected]
+<8955> attribution append "Adam Turner" [email protected]
+<8956> attribution append "Adam Turner" [email protected]
+<8959> attribution append "Adam Turner" [email protected]
+<8960> attribution append "Adam Turner" [email protected]
+<8968> attribution append "Adam Turner" [email protected]
+<8969> attribution append "Adam Turner" [email protected]
+<8970> attribution append "Adam Turner" [email protected]
+<8971> attribution append "Adam Turner" [email protected]
+<8972> attribution append "Adam Turner" [email protected]
+<8973> attribution append "Adam Turner" [email protected]
+<8976> attribution append "Adam Turner" [email protected]
+<8980> attribution append "Adam Turner" [email protected]
+<8984> attribution append "Adam Turner" [email protected]
+<8985> attribution append "Adam Turner" [email protected]
+<8987> attribution append "Adam Turner" [email protected]
+<9013> attribution append "Adam Turner" [email protected]
+<9072> attribution append "Adam Turner" [email protected]
+<9270> attribution append "Adam Turner" [email protected]
+<9448> attribution append "Adam Turner" [email protected]
+
+<9126> attribution append "Matthias C. M. Troffaes" [email protected]
+
+<9216> attribution append "Ximin Luo" [email protected]
+
+<9475> attribution append "Hood Chatham" [email protected]
+
+<9479> attribution append "Chris Sewell" [email protected]
+
 # Ensure every commit message ends with a single new line
 =C append "\n" --rstrip
-=C append "\n"
 
-# Export entire stream to git
+# Export entire stream to git-fast-import
 write >docutils_tmp.fi
 
 # Export to early (pre-CVS merge)
+# Up to and including r16
 # <2002-04-18T02:50:09Z#1> more editing progress (last commit of docutils-early)
-=C & 1..<2002-04-18T02:50:09Z#1> write >docutils_early.fi
+=C & 1..<16> write >docutils_early.fi
 
 #Export to late (post-CVS merge)
-=C & 1..<2002-04-18T02:50:09Z#1> delete
+# r17 and later (identical to @suc(<16>), all commits after r16)
+=C & 1..<16> delete commit --quiet
 write >docutils_late.fi
 
+# Timing statistics
+timing
+
 exit

Modified: trunk/sandbox/aa-turner/git_conversion/docutils.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/docutils.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/docutils.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,3 +1,15 @@
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
 # Set up logging
 logfile conversion.docutils.log
 
@@ -9,60 +21,93 @@
 
 # Create macros
 define releasetag {
-tag create {0} @min(/\nSubversion-Revision-ID: {1}\n/)
-<{0}> setfield comment "Docutils {0}"
+tag create "v{0}" {1}
+<v{0}> setfield comment "Docutils {0}"
 }
 
-# Move infrastructure, enhancement-proposals, web
+# Move infrastructure and enhancement-proposals
 path rename "sandbox/infrastructure/(.*)" "docutils/infrastructure/\1" --force
-path rename "sandbox/enhancement-proposals/(.*)" "docutils/docs/enhancement-proposals/\1" --force
-path rename "^web(.*)" "docutils/docs/web\1" --force
+path rename "sandbox/davidg/infrastructure/(.*)" "docutils/infrastructure/\1" --force
+path rename "sandbox/enhancement-proposals/(.*)" "docutils/docs/dev/enhancement-proposals/\1" --force
 
-# Delete everything else
-expunge --notagify /^sandbox\/.*$/
-expunge --notagify /^prest\/.*$/
-expunge --notagify /^.pre-commit-config.yaml\/.*$/
-expunge --notagify /^.flake8\/.*$/
+# Delete everything else in the root
+expunge --notagify /^(prest|sandbox|web|web_docstring|web_structuredtext)\/.*$/
+expunge --notagify /^tox.ini$/
+expunge --notagify /^\.(flake8|gitattributes|gitignore|pre-commit-config.yaml)$/
 
 # Move up a directory
-path rename "docutils/(.*)" "\1" --force
+path rename "^docutils/(.*)" "\1" --force
 
+# Remove now-empty commits
+=Z setfield comment "\n"
+=Z squash --empty-only --delete
+
 # Create new tags
-do releasetag 0.1.0 30
-do releasetag 0.2.0 433
-do releasetag 0.3.0 1504
-do releasetag 0.3.1 1641
-# 0.3.2 -- never released
-do releasetag 0.3.3 2067
+# Commits matches with contents of archives from
+# https://sourceforge.net/projects/docutils/files
+# and https://pypi.org/project/docutils/#history
+# 0.3.1, 0.3.2, and 0.3.3 had no archive made,
+# but we tag them here as there are over 1,000
+# commits between 0.3.0 and 0.3.5.
+# 0.3.4, 0.3.6, and 0.3.8 were never released
+# because of failures in the release process.
+# Likewise, 0.13.0 was not actually released.
+do releasetag 0.1.0 <30>
+do releasetag 0.2.0 <433>
+do releasetag 0.3.0 <1504>
+do releasetag 0.3.1 <1641>
+do releasetag 0.3.2 <1944>
+do releasetag 0.3.3 <2067>
 # 0.3.4 -- never released
-do releasetag 0.3.5 2512
+do releasetag 0.3.5 <2512>
 # 0.3.6 -- never released
-do releasetag 0.3.7 2900
+do releasetag 0.3.7 <2900>
 # 0.3.8 -- never released
-do releasetag 0.3.9 3376
-do releasetag 0.4.0 4262
-do releasetag 0.5.0 5578
-do releasetag 0.6.0 6167
-do releasetag 0.7.0 6360
-do releasetag 0.8.0 7087
-do releasetag 0.8.1 7107
-do releasetag 0.9.0 7410
-do releasetag 0.9.1 7452
-do releasetag 0.10.0 7563
-do releasetag 0.11.0 7696
-do releasetag 0.12.0 7760
+do releasetag 0.3.9 <3376>
+do releasetag 0.4.0 <4262>
+do releasetag 0.5.0 <5578>
+do releasetag 0.6.0 <6167>
+do releasetag 0.7.0 <6360>
+do releasetag 0.8.0 <7087>
+do releasetag 0.8.1 <7107>
+do releasetag 0.9.0 <7410>
+do releasetag 0.9.1 <7452>
+do releasetag 0.10.0 <7563>
+do releasetag 0.11.0 <7696>
+do releasetag 0.12.0 <7760>
 # 0.13.0 -- never released
-do releasetag 0.13.1 7985
-do releasetag 0.14.0 8148
-do releasetag 0.15.0 8272
-do releasetag 0.15.1 8298
-do releasetag 0.15.2 8304
-do releasetag 0.16.0 8453
-do releasetag 0.17.0 8653
-do releasetag 0.17.1 8705
-do releasetag 0.18.0 8865
-do releasetag 0.18.1 8900
-do releasetag 0.19.0 9103
+do releasetag 0.13.1 <7985>
+# do releasetag 0.14.0rc1 <8087>
+# do releasetag 0.14.0rc2 <8135>
+do releasetag 0.14.0 <8148>
+do releasetag 0.15.0 <8272>
+do releasetag 0.15.1 <8298>
+do releasetag 0.15.2 <8304>
+# do releasetag 0.16.0rc1 <8442>
+do releasetag 0.16.0 <8453>
+# do releasetag 0.17.0b1 <8615>
+do releasetag 0.17.0 <8653>
+do releasetag 0.17.1 <8705>
+# do releasetag 0.18.0b1 <8845>
+do releasetag 0.18.0 <8865>
+# do releasetag 0.18.1b1 <8893>
+do releasetag 0.18.1 <8900>
+# do releasetag 0.19.0b1 <9085>
+do releasetag 0.19.0 <9103>
+# do releasetag 0.20.0rc1 <9372>
+do releasetag 0.20.0 <9374>
+do releasetag 0.20.1 <9388>
+# do releasetag 0.21.0rc1 <9601>
+do releasetag 0.21.0 <9621>
+do releasetag 0.21.1 <9632>
+do releasetag 0.21.2 <9649>
 
-# Remove rel-0.15 branch (must be done after reposurgeon)
-branch delete heads/rel-0.15
+branch delete :refs/tags/docutils-:
+
+# Export to converted-docutils.fi
+write >converted-docutils.fi
+
+# Timing statistics
+timing
+
+exit

Modified: trunk/sandbox/aa-turner/git_conversion/docutils.map
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/docutils.map	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/docutils.map	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,5 +1,6 @@
 # Author map for docutils
 no-author = No Author <[email protected]>
+aa-turner =
 aahz =
 agurtovoy =
 aisaac =

Modified: trunk/sandbox/aa-turner/git_conversion/post-convert.sh
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/post-convert.sh	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/post-convert.sh	2024-08-07 01:41:55 UTC (rev 9856)
@@ -3,8 +3,9 @@
 
 cd "$1"
 
-# Ignore filemode changes
-git config core.filemode false
+# Reinitialise repository. We do this for sanity, as git might expect
+# things that reposurgeon doesn't provide.
+git init
 
 # Run a garbage-collect on the generated git repository.  Import doesn't.
 # This repack call is the active part of gc --aggressive.  This call is
@@ -13,12 +14,18 @@
 
 # Clean repo
 git prune
+git rm -rf .
 git clean -fxd
 git reset HEAD --hard
 
 # Check integrity
-git fsck --full --dangling --unreachable --strict
+git fsck --full --strict --unreachable --dangling --lost-found
 
 # Enable commit graph
 git config core.commitGraph true
-git show-ref -s | git commit-graph write --stdin-commits
+git config fetch.writeCommitGraph true
+git commit-graph write --append --reachable --changed-paths
+git commit-graph verify
+
+# End by re-reinitialising repository. Why not!
+git init

Modified: trunk/sandbox/aa-turner/git_conversion/prest.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/prest.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/prest.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,3 +1,15 @@
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
 # Set up logging
 logfile conversion.prest.log
 
@@ -9,8 +21,8 @@
 
 # Create macros
 define releasetag {
-tag create {0} @min(=C&/\nSubversion-Revision-ID: {1}\n/)
-<{0}> setfield comment "Docutils {0}"
+tag create "v{0}" {1}
+<v{0}> setfield comment "prest {0}"
 }
 
 # Delete unneeded branches
@@ -18,10 +30,10 @@
 branch delete refs/heads/subdocs
 branch delete refs/heads/lossless-rst-writer
 branch delete refs/heads/nesting
-branch delete heads/rel-0.15
+branch delete refs/heads/rel-0.15
 
 # Drop the "Remove 'prest'" commit
-/Remove 'prest'/ delete
+<9003> delete commit --quiet
 
 # Delete everything else
 expunge --notagify --not /^prest\/.*$/
@@ -29,40 +41,61 @@
 # Move up a directory
 path rename "prest/(.*)" "\1" --force
 
+# Remove now-empty merges
+=Z & <5623> unmerge
+=Z & <4667> unmerge
+=Z & <3892-2> unmerge
+
+# Remove now-empty commits
+=Z setfield comment "\n"
+=Z squash --empty-only --delete
+
 # Create new tags
-do releasetag 0.3.10 4327
-do releasetag 0.3.11 4580
+# Release archives found at https://metacpan.org/author/NODINE/releases
+do releasetag 0.3.10 <4327>
+do releasetag 0.3.11 <4583>
 # 0.3.12 -- never released
-do releasetag 0.3.13 4635
-do releasetag 0.3.14 4648
-do releasetag 0.3.15 4663
-do releasetag 0.3.16 4666
+do releasetag 0.3.13 <4635>
+do releasetag 0.3.14 <4648>
+do releasetag 0.3.15 <4663>
+do releasetag 0.3.16 <4666>
 # 0.3.17 -- never released
-do releasetag 0.3.18 4736
-do releasetag 0.3.19 4799
-do releasetag 0.3.20 4876
-do releasetag 0.3.21 4889
-do releasetag 0.3.22 4910
-do releasetag 0.3.23 4932
-do releasetag 0.3.24 4934
-do releasetag 0.3.25 4949
-do releasetag 0.3.26 5058
-do releasetag 0.3.27 5062
-do releasetag 0.3.28 5063
-do releasetag 0.3.29 5066
-do releasetag 0.3.30 5071
-do releasetag 0.3.31 5299
-do releasetag 0.3.32 5363
-do releasetag 0.3.33 5378
-do releasetag 0.3.34 5438
-do releasetag 0.3.35 5446
-do releasetag 0.3.36 5453
-do releasetag 0.3.37 5486
-do releasetag 0.3.38 5781
-do releasetag 0.3.39 5799
-do releasetag 0.3.40 5810
-do releasetag 0.3.41 6251
-do releasetag 0.3.42 6291
-do releasetag 0.3.43 6302
-do releasetag 0.3.44 6440
-do releasetag 0.3.45 6498
\ No newline at end of file
+do releasetag 0.3.18 <4736>
+do releasetag 0.3.19 <4799>
+do releasetag 0.3.20 <4876>
+do releasetag 0.3.21 <4889>
+do releasetag 0.3.22 <4910>
+do releasetag 0.3.23 <4932>
+do releasetag 0.3.24 <4934>
+do releasetag 0.3.25 <4949>
+do releasetag 0.3.26 <5058>
+do releasetag 0.3.27 <5062>
+do releasetag 0.3.28 <5063>
+do releasetag 0.3.29 <5066>
+do releasetag 0.3.30 <5071>
+do releasetag 0.3.31 <5299>
+do releasetag 0.3.32 <5363>
+do releasetag 0.3.33 <5378>
+do releasetag 0.3.34 <5438>
+do releasetag 0.3.35 <5446>
+do releasetag 0.3.36 <5453>
+do releasetag 0.3.37 <5486>
+do releasetag 0.3.38 <5781>
+do releasetag 0.3.39 <5799>
+do releasetag 0.3.40 <5810>
+do releasetag 0.3.41 <6251>
+do releasetag 0.3.42 <6291>
+do releasetag 0.3.43 <6302>
+do releasetag 0.3.44 <6440>
+do releasetag 0.3.45 <6498>
+
+# Delete auto-generated lightweight tags
+branch delete :refs/tags/prest-:
+
+# Export to converted-prest.fi
+write >converted-prest.fi
+
+# Timing statistics
+timing
+
+exit

Modified: trunk/sandbox/aa-turner/git_conversion/sandbox.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/sandbox.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/sandbox.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,3 +1,15 @@
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
 # Set up logging
 logfile conversion.sandbox.log
 
@@ -12,7 +24,7 @@
 branch delete refs/heads/subdocs
 branch delete refs/heads/lossless-rst-writer
 branch delete refs/heads/nesting
-branch delete heads/rel-0.15
+branch delete refs/heads/rel-0.15
 
 # Delete everything else
 expunge --notagify --not /^sandbox\/.*$/
@@ -19,3 +31,24 @@
 
 # Move up a directory
 path rename "sandbox/(.*)" "\1" --force
+
+# Remove now-empty merges
+=Z & <5623> unmerge
+=Z & <5618> unmerge
+=Z & <5015-2> unmerge
+=Z & <4667> unmerge
+=Z & <4156> unmerge
+=Z & <3581> unmerge
+=Z & <3129> unmerge
+
+# Remove now-empty commits (except "Combine into Docutils")
+=Z & ~<2002-04-20T02:00:00Z> setfield comment "\n"
+=Z & ~<2002-04-20T02:00:00Z> squash --empty-only --delete
+
+# Export to converted-docutils.fi
+write >converted-sandbox.fi
+
+# Timing statistics
+timing
+
+exit

Modified: trunk/sandbox/aa-turner/git_conversion/web.lift
===================================================================
--- trunk/sandbox/aa-turner/git_conversion/web.lift	2024-08-06 08:02:23 UTC (rev 9855)
+++ trunk/sandbox/aa-turner/git_conversion/web.lift	2024-08-07 01:41:55 UTC (rev 9856)
@@ -1,3 +1,15 @@
+# Set up options
+# http://www.catb.org/~esr/reposurgeon/repository-editing.html#control-options
+
+set echo
+# We expect version 4.38
+version 4.38
+# Canonicalise comments/messages by normalising line endings to LF,
+# stripping leading & trailing whitespace, and appending a new line.
+set canonicalize
+# Enable fancy progress messages even when not on a tty.
+set progress
+
 # Set up logging
 logfile conversion.web.log
 
@@ -12,7 +24,7 @@
 branch delete refs/heads/subdocs
 branch delete refs/heads/lossless-rst-writer
 branch delete refs/heads/nesting
-branch delete heads/rel-0.15
+branch delete refs/heads/rel-0.15
 
 # Delete everything else
 expunge --notagify --not /^web.*$/
@@ -21,3 +33,24 @@
 path rename "web_docstring/(.*)" "\1" --force
 path rename "web_structuredtext/(.*)" "\1" --force
 path rename "web/(.*)" "\1" --force
+
+# Remove now-empty merges
+=Z & <5623> unmerge
+=Z & <4667> unmerge
+=Z & <4156> unmerge
+=Z & <3892-2> unmerge
+=Z & <3581> unmerge
+=Z & <3129> unmerge
+=Z & <2001-09-01T16:29:12Z> unmerge
+
+# Remove now-empty commits (except "Combine into Docutils")
+=Z & ~<2002-04-20T02:00:00Z> setfield comment "\n"
+=Z & ~<2002-04-20T02:00:00Z> squash --empty-only --delete
+
+# Export to converted-docutils.fi
+write >converted-web.fi
+
+# Timing statistics
+timing
+
+exit

This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



_______________________________________________
Docutils-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/docutils-checkins
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.