aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.editorconfig2
-rw-r--r--.gitattributes2
-rw-r--r--.github/workflows/coverity.yml2
-rw-r--r--.github/workflows/main.yml128
-rw-r--r--.gitignore2
-rw-r--r--.gitlab-ci.yml67
-rw-r--r--Documentation/.gitignore8
-rw-r--r--Documentation/BreakingChanges.adoc (renamed from Documentation/BreakingChanges.txt)25
-rw-r--r--Documentation/DecisionMaking.adoc (renamed from Documentation/DecisionMaking.txt)0
-rw-r--r--Documentation/Makefile200
-rw-r--r--Documentation/MyFirstContribution.adoc (renamed from Documentation/MyFirstContribution.txt)0
-rw-r--r--Documentation/MyFirstObjectWalk.adoc (renamed from Documentation/MyFirstObjectWalk.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.1.adoc (renamed from Documentation/RelNotes/1.5.0.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.2.adoc (renamed from Documentation/RelNotes/1.5.0.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.3.adoc (renamed from Documentation/RelNotes/1.5.0.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.4.adoc (renamed from Documentation/RelNotes/1.5.0.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.5.adoc (renamed from Documentation/RelNotes/1.5.0.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.6.adoc (renamed from Documentation/RelNotes/1.5.0.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.7.adoc (renamed from Documentation/RelNotes/1.5.0.7.txt)0
-rw-r--r--Documentation/RelNotes/1.5.0.adoc (renamed from Documentation/RelNotes/1.5.0.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.1.adoc (renamed from Documentation/RelNotes/1.5.1.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.2.adoc (renamed from Documentation/RelNotes/1.5.1.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.3.adoc (renamed from Documentation/RelNotes/1.5.1.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.4.adoc (renamed from Documentation/RelNotes/1.5.1.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.5.adoc (renamed from Documentation/RelNotes/1.5.1.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.6.adoc (renamed from Documentation/RelNotes/1.5.1.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.1.adoc (renamed from Documentation/RelNotes/1.5.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.1.adoc (renamed from Documentation/RelNotes/1.5.2.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.2.adoc (renamed from Documentation/RelNotes/1.5.2.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.3.adoc (renamed from Documentation/RelNotes/1.5.2.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.4.adoc (renamed from Documentation/RelNotes/1.5.2.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.5.adoc (renamed from Documentation/RelNotes/1.5.2.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.2.adoc (renamed from Documentation/RelNotes/1.5.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.1.adoc (renamed from Documentation/RelNotes/1.5.3.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.2.adoc (renamed from Documentation/RelNotes/1.5.3.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.3.adoc (renamed from Documentation/RelNotes/1.5.3.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.4.adoc (renamed from Documentation/RelNotes/1.5.3.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.5.adoc (renamed from Documentation/RelNotes/1.5.3.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.6.adoc (renamed from Documentation/RelNotes/1.5.3.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.7.adoc (renamed from Documentation/RelNotes/1.5.3.7.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.8.adoc (renamed from Documentation/RelNotes/1.5.3.8.txt)0
-rw-r--r--Documentation/RelNotes/1.5.3.adoc (renamed from Documentation/RelNotes/1.5.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.1.adoc (renamed from Documentation/RelNotes/1.5.4.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.2.adoc (renamed from Documentation/RelNotes/1.5.4.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.3.adoc (renamed from Documentation/RelNotes/1.5.4.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.4.adoc (renamed from Documentation/RelNotes/1.5.4.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.5.adoc (renamed from Documentation/RelNotes/1.5.4.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.6.adoc (renamed from Documentation/RelNotes/1.5.4.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.7.adoc (renamed from Documentation/RelNotes/1.5.4.7.txt)0
-rw-r--r--Documentation/RelNotes/1.5.4.adoc (renamed from Documentation/RelNotes/1.5.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.1.adoc (renamed from Documentation/RelNotes/1.5.5.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.2.adoc (renamed from Documentation/RelNotes/1.5.5.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.3.adoc (renamed from Documentation/RelNotes/1.5.5.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.4.adoc (renamed from Documentation/RelNotes/1.5.5.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.5.adoc (renamed from Documentation/RelNotes/1.5.5.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.6.adoc (renamed from Documentation/RelNotes/1.5.5.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.5.adoc (renamed from Documentation/RelNotes/1.5.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.1.adoc (renamed from Documentation/RelNotes/1.5.6.1.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.2.adoc (renamed from Documentation/RelNotes/1.5.6.2.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.3.adoc (renamed from Documentation/RelNotes/1.5.6.3.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.4.adoc (renamed from Documentation/RelNotes/1.5.6.4.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.5.adoc (renamed from Documentation/RelNotes/1.5.6.5.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.6.adoc (renamed from Documentation/RelNotes/1.5.6.6.txt)0
-rw-r--r--Documentation/RelNotes/1.5.6.adoc (renamed from Documentation/RelNotes/1.5.6.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.1.adoc (renamed from Documentation/RelNotes/1.6.0.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.2.adoc (renamed from Documentation/RelNotes/1.6.0.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.3.adoc (renamed from Documentation/RelNotes/1.6.0.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.4.adoc (renamed from Documentation/RelNotes/1.6.0.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.5.adoc (renamed from Documentation/RelNotes/1.6.0.5.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.6.adoc (renamed from Documentation/RelNotes/1.6.0.6.txt)0
-rw-r--r--Documentation/RelNotes/1.6.0.adoc (renamed from Documentation/RelNotes/1.6.0.txt)0
-rw-r--r--Documentation/RelNotes/1.6.1.1.adoc (renamed from Documentation/RelNotes/1.6.1.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.1.2.adoc (renamed from Documentation/RelNotes/1.6.1.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.1.3.adoc (renamed from Documentation/RelNotes/1.6.1.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.1.4.adoc (renamed from Documentation/RelNotes/1.6.1.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.1.adoc (renamed from Documentation/RelNotes/1.6.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.1.adoc (renamed from Documentation/RelNotes/1.6.2.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.2.adoc (renamed from Documentation/RelNotes/1.6.2.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.3.adoc (renamed from Documentation/RelNotes/1.6.2.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.4.adoc (renamed from Documentation/RelNotes/1.6.2.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.5.adoc (renamed from Documentation/RelNotes/1.6.2.5.txt)0
-rw-r--r--Documentation/RelNotes/1.6.2.adoc (renamed from Documentation/RelNotes/1.6.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.3.1.adoc (renamed from Documentation/RelNotes/1.6.3.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.3.2.adoc (renamed from Documentation/RelNotes/1.6.3.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.3.3.adoc (renamed from Documentation/RelNotes/1.6.3.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.3.4.adoc (renamed from Documentation/RelNotes/1.6.3.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.3.adoc (renamed from Documentation/RelNotes/1.6.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.1.adoc (renamed from Documentation/RelNotes/1.6.4.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.2.adoc (renamed from Documentation/RelNotes/1.6.4.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.3.adoc (renamed from Documentation/RelNotes/1.6.4.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.4.adoc (renamed from Documentation/RelNotes/1.6.4.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.5.adoc (renamed from Documentation/RelNotes/1.6.4.5.txt)0
-rw-r--r--Documentation/RelNotes/1.6.4.adoc (renamed from Documentation/RelNotes/1.6.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.1.adoc (renamed from Documentation/RelNotes/1.6.5.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.2.adoc (renamed from Documentation/RelNotes/1.6.5.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.3.adoc (renamed from Documentation/RelNotes/1.6.5.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.4.adoc (renamed from Documentation/RelNotes/1.6.5.4.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.5.adoc (renamed from Documentation/RelNotes/1.6.5.5.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.6.adoc (renamed from Documentation/RelNotes/1.6.5.6.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.7.adoc (renamed from Documentation/RelNotes/1.6.5.7.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.8.adoc (renamed from Documentation/RelNotes/1.6.5.8.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.9.adoc (renamed from Documentation/RelNotes/1.6.5.9.txt)0
-rw-r--r--Documentation/RelNotes/1.6.5.adoc (renamed from Documentation/RelNotes/1.6.5.txt)0
-rw-r--r--Documentation/RelNotes/1.6.6.1.adoc (renamed from Documentation/RelNotes/1.6.6.1.txt)0
-rw-r--r--Documentation/RelNotes/1.6.6.2.adoc (renamed from Documentation/RelNotes/1.6.6.2.txt)0
-rw-r--r--Documentation/RelNotes/1.6.6.3.adoc (renamed from Documentation/RelNotes/1.6.6.3.txt)0
-rw-r--r--Documentation/RelNotes/1.6.6.adoc (renamed from Documentation/RelNotes/1.6.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.1.adoc (renamed from Documentation/RelNotes/1.7.0.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.2.adoc (renamed from Documentation/RelNotes/1.7.0.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.3.adoc (renamed from Documentation/RelNotes/1.7.0.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.4.adoc (renamed from Documentation/RelNotes/1.7.0.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.5.adoc (renamed from Documentation/RelNotes/1.7.0.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.6.adoc (renamed from Documentation/RelNotes/1.7.0.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.7.adoc (renamed from Documentation/RelNotes/1.7.0.7.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.8.adoc (renamed from Documentation/RelNotes/1.7.0.8.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.9.adoc (renamed from Documentation/RelNotes/1.7.0.9.txt)0
-rw-r--r--Documentation/RelNotes/1.7.0.adoc (renamed from Documentation/RelNotes/1.7.0.txt)0
-rw-r--r--Documentation/RelNotes/1.7.1.1.adoc (renamed from Documentation/RelNotes/1.7.1.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.1.2.adoc (renamed from Documentation/RelNotes/1.7.1.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.1.3.adoc (renamed from Documentation/RelNotes/1.7.1.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.1.4.adoc (renamed from Documentation/RelNotes/1.7.1.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.1.adoc (renamed from Documentation/RelNotes/1.7.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.1.adoc (renamed from Documentation/RelNotes/1.7.10.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.2.adoc (renamed from Documentation/RelNotes/1.7.10.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.3.adoc (renamed from Documentation/RelNotes/1.7.10.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.4.adoc (renamed from Documentation/RelNotes/1.7.10.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.5.adoc (renamed from Documentation/RelNotes/1.7.10.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.10.adoc (renamed from Documentation/RelNotes/1.7.10.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.1.adoc (renamed from Documentation/RelNotes/1.7.11.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.2.adoc (renamed from Documentation/RelNotes/1.7.11.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.3.adoc (renamed from Documentation/RelNotes/1.7.11.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.4.adoc (renamed from Documentation/RelNotes/1.7.11.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.5.adoc (renamed from Documentation/RelNotes/1.7.11.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.6.adoc (renamed from Documentation/RelNotes/1.7.11.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.7.adoc (renamed from Documentation/RelNotes/1.7.11.7.txt)0
-rw-r--r--Documentation/RelNotes/1.7.11.adoc (renamed from Documentation/RelNotes/1.7.11.txt)0
-rw-r--r--Documentation/RelNotes/1.7.12.1.adoc (renamed from Documentation/RelNotes/1.7.12.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.12.2.adoc (renamed from Documentation/RelNotes/1.7.12.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.12.3.adoc (renamed from Documentation/RelNotes/1.7.12.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.12.4.adoc (renamed from Documentation/RelNotes/1.7.12.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.12.adoc (renamed from Documentation/RelNotes/1.7.12.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.1.adoc (renamed from Documentation/RelNotes/1.7.2.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.2.adoc (renamed from Documentation/RelNotes/1.7.2.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.3.adoc (renamed from Documentation/RelNotes/1.7.2.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.4.adoc (renamed from Documentation/RelNotes/1.7.2.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.5.adoc (renamed from Documentation/RelNotes/1.7.2.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.2.adoc (renamed from Documentation/RelNotes/1.7.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.1.adoc (renamed from Documentation/RelNotes/1.7.3.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.2.adoc (renamed from Documentation/RelNotes/1.7.3.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.3.adoc (renamed from Documentation/RelNotes/1.7.3.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.4.adoc (renamed from Documentation/RelNotes/1.7.3.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.5.adoc (renamed from Documentation/RelNotes/1.7.3.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.3.adoc (renamed from Documentation/RelNotes/1.7.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.1.adoc (renamed from Documentation/RelNotes/1.7.4.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.2.adoc (renamed from Documentation/RelNotes/1.7.4.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.3.adoc (renamed from Documentation/RelNotes/1.7.4.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.4.adoc (renamed from Documentation/RelNotes/1.7.4.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.5.adoc (renamed from Documentation/RelNotes/1.7.4.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.4.adoc (renamed from Documentation/RelNotes/1.7.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.5.1.adoc (renamed from Documentation/RelNotes/1.7.5.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.5.2.adoc (renamed from Documentation/RelNotes/1.7.5.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.5.3.adoc (renamed from Documentation/RelNotes/1.7.5.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.5.4.adoc (renamed from Documentation/RelNotes/1.7.5.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.5.adoc (renamed from Documentation/RelNotes/1.7.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.1.adoc (renamed from Documentation/RelNotes/1.7.6.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.2.adoc (renamed from Documentation/RelNotes/1.7.6.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.3.adoc (renamed from Documentation/RelNotes/1.7.6.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.4.adoc (renamed from Documentation/RelNotes/1.7.6.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.5.adoc (renamed from Documentation/RelNotes/1.7.6.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.6.adoc (renamed from Documentation/RelNotes/1.7.6.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.6.adoc (renamed from Documentation/RelNotes/1.7.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.1.adoc (renamed from Documentation/RelNotes/1.7.7.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.2.adoc (renamed from Documentation/RelNotes/1.7.7.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.3.adoc (renamed from Documentation/RelNotes/1.7.7.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.4.adoc (renamed from Documentation/RelNotes/1.7.7.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.5.adoc (renamed from Documentation/RelNotes/1.7.7.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.6.adoc (renamed from Documentation/RelNotes/1.7.7.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.7.adoc (renamed from Documentation/RelNotes/1.7.7.7.txt)0
-rw-r--r--Documentation/RelNotes/1.7.7.adoc (renamed from Documentation/RelNotes/1.7.7.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.1.adoc (renamed from Documentation/RelNotes/1.7.8.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.2.adoc (renamed from Documentation/RelNotes/1.7.8.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.3.adoc (renamed from Documentation/RelNotes/1.7.8.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.4.adoc (renamed from Documentation/RelNotes/1.7.8.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.5.adoc (renamed from Documentation/RelNotes/1.7.8.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.6.adoc (renamed from Documentation/RelNotes/1.7.8.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.8.adoc (renamed from Documentation/RelNotes/1.7.8.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.1.adoc (renamed from Documentation/RelNotes/1.7.9.1.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.2.adoc (renamed from Documentation/RelNotes/1.7.9.2.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.3.adoc (renamed from Documentation/RelNotes/1.7.9.3.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.4.adoc (renamed from Documentation/RelNotes/1.7.9.4.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.5.adoc (renamed from Documentation/RelNotes/1.7.9.5.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.6.adoc (renamed from Documentation/RelNotes/1.7.9.6.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.7.adoc (renamed from Documentation/RelNotes/1.7.9.7.txt)0
-rw-r--r--Documentation/RelNotes/1.7.9.adoc (renamed from Documentation/RelNotes/1.7.9.txt)0
-rw-r--r--Documentation/RelNotes/1.8.0.1.adoc (renamed from Documentation/RelNotes/1.8.0.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.0.2.adoc (renamed from Documentation/RelNotes/1.8.0.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.0.3.adoc (renamed from Documentation/RelNotes/1.8.0.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.0.adoc (renamed from Documentation/RelNotes/1.8.0.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.1.adoc (renamed from Documentation/RelNotes/1.8.1.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.2.adoc (renamed from Documentation/RelNotes/1.8.1.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.3.adoc (renamed from Documentation/RelNotes/1.8.1.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.4.adoc (renamed from Documentation/RelNotes/1.8.1.4.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.5.adoc (renamed from Documentation/RelNotes/1.8.1.5.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.6.adoc (renamed from Documentation/RelNotes/1.8.1.6.txt)0
-rw-r--r--Documentation/RelNotes/1.8.1.adoc (renamed from Documentation/RelNotes/1.8.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.2.1.adoc (renamed from Documentation/RelNotes/1.8.2.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.2.2.adoc (renamed from Documentation/RelNotes/1.8.2.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.2.3.adoc (renamed from Documentation/RelNotes/1.8.2.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.2.adoc (renamed from Documentation/RelNotes/1.8.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.3.1.adoc (renamed from Documentation/RelNotes/1.8.3.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.3.2.adoc (renamed from Documentation/RelNotes/1.8.3.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.3.3.adoc (renamed from Documentation/RelNotes/1.8.3.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.3.4.adoc (renamed from Documentation/RelNotes/1.8.3.4.txt)0
-rw-r--r--Documentation/RelNotes/1.8.3.adoc (renamed from Documentation/RelNotes/1.8.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.1.adoc (renamed from Documentation/RelNotes/1.8.4.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.2.adoc (renamed from Documentation/RelNotes/1.8.4.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.3.adoc (renamed from Documentation/RelNotes/1.8.4.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.4.adoc (renamed from Documentation/RelNotes/1.8.4.4.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.5.adoc (renamed from Documentation/RelNotes/1.8.4.5.txt)0
-rw-r--r--Documentation/RelNotes/1.8.4.adoc (renamed from Documentation/RelNotes/1.8.4.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.1.adoc (renamed from Documentation/RelNotes/1.8.5.1.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.2.adoc (renamed from Documentation/RelNotes/1.8.5.2.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.3.adoc (renamed from Documentation/RelNotes/1.8.5.3.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.4.adoc (renamed from Documentation/RelNotes/1.8.5.4.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.5.adoc (renamed from Documentation/RelNotes/1.8.5.5.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.6.adoc (renamed from Documentation/RelNotes/1.8.5.6.txt)0
-rw-r--r--Documentation/RelNotes/1.8.5.adoc (renamed from Documentation/RelNotes/1.8.5.txt)0
-rw-r--r--Documentation/RelNotes/1.9.0.adoc (renamed from Documentation/RelNotes/1.9.0.txt)0
-rw-r--r--Documentation/RelNotes/1.9.1.adoc (renamed from Documentation/RelNotes/1.9.1.txt)0
-rw-r--r--Documentation/RelNotes/1.9.2.adoc (renamed from Documentation/RelNotes/1.9.2.txt)0
-rw-r--r--Documentation/RelNotes/1.9.3.adoc (renamed from Documentation/RelNotes/1.9.3.txt)0
-rw-r--r--Documentation/RelNotes/1.9.4.adoc (renamed from Documentation/RelNotes/1.9.4.txt)0
-rw-r--r--Documentation/RelNotes/1.9.5.adoc (renamed from Documentation/RelNotes/1.9.5.txt)0
-rw-r--r--Documentation/RelNotes/2.0.0.adoc (renamed from Documentation/RelNotes/2.0.0.txt)0
-rw-r--r--Documentation/RelNotes/2.0.1.adoc (renamed from Documentation/RelNotes/2.0.1.txt)0
-rw-r--r--Documentation/RelNotes/2.0.2.adoc (renamed from Documentation/RelNotes/2.0.2.txt)0
-rw-r--r--Documentation/RelNotes/2.0.3.adoc (renamed from Documentation/RelNotes/2.0.3.txt)0
-rw-r--r--Documentation/RelNotes/2.0.4.adoc (renamed from Documentation/RelNotes/2.0.4.txt)0
-rw-r--r--Documentation/RelNotes/2.0.5.adoc (renamed from Documentation/RelNotes/2.0.5.txt)0
-rw-r--r--Documentation/RelNotes/2.1.0.adoc (renamed from Documentation/RelNotes/2.1.0.txt)0
-rw-r--r--Documentation/RelNotes/2.1.1.adoc (renamed from Documentation/RelNotes/2.1.1.txt)0
-rw-r--r--Documentation/RelNotes/2.1.2.adoc (renamed from Documentation/RelNotes/2.1.2.txt)0
-rw-r--r--Documentation/RelNotes/2.1.3.adoc (renamed from Documentation/RelNotes/2.1.3.txt)0
-rw-r--r--Documentation/RelNotes/2.1.4.adoc (renamed from Documentation/RelNotes/2.1.4.txt)0
-rw-r--r--Documentation/RelNotes/2.10.0.adoc (renamed from Documentation/RelNotes/2.10.0.txt)0
-rw-r--r--Documentation/RelNotes/2.10.1.adoc (renamed from Documentation/RelNotes/2.10.1.txt)0
-rw-r--r--Documentation/RelNotes/2.10.2.adoc (renamed from Documentation/RelNotes/2.10.2.txt)0
-rw-r--r--Documentation/RelNotes/2.10.3.adoc (renamed from Documentation/RelNotes/2.10.3.txt)0
-rw-r--r--Documentation/RelNotes/2.10.4.adoc (renamed from Documentation/RelNotes/2.10.4.txt)0
-rw-r--r--Documentation/RelNotes/2.10.5.adoc (renamed from Documentation/RelNotes/2.10.5.txt)0
-rw-r--r--Documentation/RelNotes/2.11.0.adoc (renamed from Documentation/RelNotes/2.11.0.txt)0
-rw-r--r--Documentation/RelNotes/2.11.1.adoc (renamed from Documentation/RelNotes/2.11.1.txt)0
-rw-r--r--Documentation/RelNotes/2.11.2.adoc (renamed from Documentation/RelNotes/2.11.2.txt)0
-rw-r--r--Documentation/RelNotes/2.11.3.adoc (renamed from Documentation/RelNotes/2.11.3.txt)0
-rw-r--r--Documentation/RelNotes/2.11.4.adoc (renamed from Documentation/RelNotes/2.11.4.txt)0
-rw-r--r--Documentation/RelNotes/2.12.0.adoc (renamed from Documentation/RelNotes/2.12.0.txt)0
-rw-r--r--Documentation/RelNotes/2.12.1.adoc (renamed from Documentation/RelNotes/2.12.1.txt)0
-rw-r--r--Documentation/RelNotes/2.12.2.adoc (renamed from Documentation/RelNotes/2.12.2.txt)0
-rw-r--r--Documentation/RelNotes/2.12.3.adoc (renamed from Documentation/RelNotes/2.12.3.txt)0
-rw-r--r--Documentation/RelNotes/2.12.4.adoc (renamed from Documentation/RelNotes/2.12.4.txt)0
-rw-r--r--Documentation/RelNotes/2.12.5.adoc (renamed from Documentation/RelNotes/2.12.5.txt)0
-rw-r--r--Documentation/RelNotes/2.13.0.adoc (renamed from Documentation/RelNotes/2.13.0.txt)0
-rw-r--r--Documentation/RelNotes/2.13.1.adoc (renamed from Documentation/RelNotes/2.13.1.txt)0
-rw-r--r--Documentation/RelNotes/2.13.2.adoc (renamed from Documentation/RelNotes/2.13.2.txt)0
-rw-r--r--Documentation/RelNotes/2.13.3.adoc (renamed from Documentation/RelNotes/2.13.3.txt)0
-rw-r--r--Documentation/RelNotes/2.13.4.adoc (renamed from Documentation/RelNotes/2.13.4.txt)0
-rw-r--r--Documentation/RelNotes/2.13.5.adoc (renamed from Documentation/RelNotes/2.13.5.txt)0
-rw-r--r--Documentation/RelNotes/2.13.6.adoc (renamed from Documentation/RelNotes/2.13.6.txt)0
-rw-r--r--Documentation/RelNotes/2.13.7.adoc (renamed from Documentation/RelNotes/2.13.7.txt)0
-rw-r--r--Documentation/RelNotes/2.14.0.adoc (renamed from Documentation/RelNotes/2.14.0.txt)0
-rw-r--r--Documentation/RelNotes/2.14.1.adoc (renamed from Documentation/RelNotes/2.14.1.txt)0
-rw-r--r--Documentation/RelNotes/2.14.2.adoc (renamed from Documentation/RelNotes/2.14.2.txt)0
-rw-r--r--Documentation/RelNotes/2.14.3.adoc (renamed from Documentation/RelNotes/2.14.3.txt)0
-rw-r--r--Documentation/RelNotes/2.14.4.adoc (renamed from Documentation/RelNotes/2.14.4.txt)0
-rw-r--r--Documentation/RelNotes/2.14.5.adoc (renamed from Documentation/RelNotes/2.14.5.txt)0
-rw-r--r--Documentation/RelNotes/2.14.6.adoc (renamed from Documentation/RelNotes/2.14.6.txt)0
-rw-r--r--Documentation/RelNotes/2.15.0.adoc (renamed from Documentation/RelNotes/2.15.0.txt)0
-rw-r--r--Documentation/RelNotes/2.15.1.adoc (renamed from Documentation/RelNotes/2.15.1.txt)0
-rw-r--r--Documentation/RelNotes/2.15.2.adoc (renamed from Documentation/RelNotes/2.15.2.txt)0
-rw-r--r--Documentation/RelNotes/2.15.3.adoc (renamed from Documentation/RelNotes/2.15.3.txt)0
-rw-r--r--Documentation/RelNotes/2.15.4.adoc (renamed from Documentation/RelNotes/2.15.4.txt)0
-rw-r--r--Documentation/RelNotes/2.16.0.adoc (renamed from Documentation/RelNotes/2.16.0.txt)0
-rw-r--r--Documentation/RelNotes/2.16.1.adoc (renamed from Documentation/RelNotes/2.16.1.txt)0
-rw-r--r--Documentation/RelNotes/2.16.2.adoc (renamed from Documentation/RelNotes/2.16.2.txt)0
-rw-r--r--Documentation/RelNotes/2.16.3.adoc (renamed from Documentation/RelNotes/2.16.3.txt)0
-rw-r--r--Documentation/RelNotes/2.16.4.adoc (renamed from Documentation/RelNotes/2.16.4.txt)0
-rw-r--r--Documentation/RelNotes/2.16.5.adoc (renamed from Documentation/RelNotes/2.16.5.txt)0
-rw-r--r--Documentation/RelNotes/2.16.6.adoc (renamed from Documentation/RelNotes/2.16.6.txt)0
-rw-r--r--Documentation/RelNotes/2.17.0.adoc (renamed from Documentation/RelNotes/2.17.0.txt)0
-rw-r--r--Documentation/RelNotes/2.17.1.adoc (renamed from Documentation/RelNotes/2.17.1.txt)0
-rw-r--r--Documentation/RelNotes/2.17.2.adoc (renamed from Documentation/RelNotes/2.17.2.txt)0
-rw-r--r--Documentation/RelNotes/2.17.3.adoc (renamed from Documentation/RelNotes/2.17.3.txt)0
-rw-r--r--Documentation/RelNotes/2.17.4.adoc (renamed from Documentation/RelNotes/2.17.4.txt)0
-rw-r--r--Documentation/RelNotes/2.17.5.adoc (renamed from Documentation/RelNotes/2.17.5.txt)0
-rw-r--r--Documentation/RelNotes/2.17.6.adoc (renamed from Documentation/RelNotes/2.17.6.txt)0
-rw-r--r--Documentation/RelNotes/2.18.0.adoc (renamed from Documentation/RelNotes/2.18.0.txt)0
-rw-r--r--Documentation/RelNotes/2.18.1.adoc (renamed from Documentation/RelNotes/2.18.1.txt)0
-rw-r--r--Documentation/RelNotes/2.18.2.adoc (renamed from Documentation/RelNotes/2.18.2.txt)0
-rw-r--r--Documentation/RelNotes/2.18.3.adoc (renamed from Documentation/RelNotes/2.18.3.txt)0
-rw-r--r--Documentation/RelNotes/2.18.4.adoc (renamed from Documentation/RelNotes/2.18.4.txt)0
-rw-r--r--Documentation/RelNotes/2.18.5.adoc (renamed from Documentation/RelNotes/2.18.5.txt)0
-rw-r--r--Documentation/RelNotes/2.19.0.adoc (renamed from Documentation/RelNotes/2.19.0.txt)0
-rw-r--r--Documentation/RelNotes/2.19.1.adoc (renamed from Documentation/RelNotes/2.19.1.txt)0
-rw-r--r--Documentation/RelNotes/2.19.2.adoc (renamed from Documentation/RelNotes/2.19.2.txt)0
-rw-r--r--Documentation/RelNotes/2.19.3.adoc (renamed from Documentation/RelNotes/2.19.3.txt)0
-rw-r--r--Documentation/RelNotes/2.19.4.adoc (renamed from Documentation/RelNotes/2.19.4.txt)0
-rw-r--r--Documentation/RelNotes/2.19.5.adoc (renamed from Documentation/RelNotes/2.19.5.txt)0
-rw-r--r--Documentation/RelNotes/2.19.6.adoc (renamed from Documentation/RelNotes/2.19.6.txt)0
-rw-r--r--Documentation/RelNotes/2.2.0.adoc (renamed from Documentation/RelNotes/2.2.0.txt)0
-rw-r--r--Documentation/RelNotes/2.2.1.adoc (renamed from Documentation/RelNotes/2.2.1.txt)0
-rw-r--r--Documentation/RelNotes/2.2.2.adoc (renamed from Documentation/RelNotes/2.2.2.txt)0
-rw-r--r--Documentation/RelNotes/2.2.3.adoc (renamed from Documentation/RelNotes/2.2.3.txt)0
-rw-r--r--Documentation/RelNotes/2.20.0.adoc (renamed from Documentation/RelNotes/2.20.0.txt)0
-rw-r--r--Documentation/RelNotes/2.20.1.adoc (renamed from Documentation/RelNotes/2.20.1.txt)0
-rw-r--r--Documentation/RelNotes/2.20.2.adoc (renamed from Documentation/RelNotes/2.20.2.txt)0
-rw-r--r--Documentation/RelNotes/2.20.3.adoc (renamed from Documentation/RelNotes/2.20.3.txt)0
-rw-r--r--Documentation/RelNotes/2.20.4.adoc (renamed from Documentation/RelNotes/2.20.4.txt)0
-rw-r--r--Documentation/RelNotes/2.20.5.adoc (renamed from Documentation/RelNotes/2.20.5.txt)0
-rw-r--r--Documentation/RelNotes/2.21.0.adoc (renamed from Documentation/RelNotes/2.21.0.txt)0
-rw-r--r--Documentation/RelNotes/2.21.1.adoc (renamed from Documentation/RelNotes/2.21.1.txt)0
-rw-r--r--Documentation/RelNotes/2.21.2.adoc (renamed from Documentation/RelNotes/2.21.2.txt)0
-rw-r--r--Documentation/RelNotes/2.21.3.adoc (renamed from Documentation/RelNotes/2.21.3.txt)0
-rw-r--r--Documentation/RelNotes/2.21.4.adoc (renamed from Documentation/RelNotes/2.21.4.txt)0
-rw-r--r--Documentation/RelNotes/2.22.0.adoc (renamed from Documentation/RelNotes/2.22.0.txt)0
-rw-r--r--Documentation/RelNotes/2.22.1.adoc (renamed from Documentation/RelNotes/2.22.1.txt)0
-rw-r--r--Documentation/RelNotes/2.22.2.adoc (renamed from Documentation/RelNotes/2.22.2.txt)0
-rw-r--r--Documentation/RelNotes/2.22.3.adoc (renamed from Documentation/RelNotes/2.22.3.txt)0
-rw-r--r--Documentation/RelNotes/2.22.4.adoc (renamed from Documentation/RelNotes/2.22.4.txt)0
-rw-r--r--Documentation/RelNotes/2.22.5.adoc (renamed from Documentation/RelNotes/2.22.5.txt)0
-rw-r--r--Documentation/RelNotes/2.23.0.adoc (renamed from Documentation/RelNotes/2.23.0.txt)0
-rw-r--r--Documentation/RelNotes/2.23.1.adoc (renamed from Documentation/RelNotes/2.23.1.txt)0
-rw-r--r--Documentation/RelNotes/2.23.2.adoc (renamed from Documentation/RelNotes/2.23.2.txt)0
-rw-r--r--Documentation/RelNotes/2.23.3.adoc (renamed from Documentation/RelNotes/2.23.3.txt)0
-rw-r--r--Documentation/RelNotes/2.23.4.adoc (renamed from Documentation/RelNotes/2.23.4.txt)0
-rw-r--r--Documentation/RelNotes/2.24.0.adoc (renamed from Documentation/RelNotes/2.24.0.txt)0
-rw-r--r--Documentation/RelNotes/2.24.1.adoc (renamed from Documentation/RelNotes/2.24.1.txt)0
-rw-r--r--Documentation/RelNotes/2.24.2.adoc (renamed from Documentation/RelNotes/2.24.2.txt)0
-rw-r--r--Documentation/RelNotes/2.24.3.adoc (renamed from Documentation/RelNotes/2.24.3.txt)0
-rw-r--r--Documentation/RelNotes/2.24.4.adoc (renamed from Documentation/RelNotes/2.24.4.txt)0
-rw-r--r--Documentation/RelNotes/2.25.0.adoc (renamed from Documentation/RelNotes/2.25.0.txt)0
-rw-r--r--Documentation/RelNotes/2.25.1.adoc (renamed from Documentation/RelNotes/2.25.1.txt)0
-rw-r--r--Documentation/RelNotes/2.25.2.adoc (renamed from Documentation/RelNotes/2.25.2.txt)0
-rw-r--r--Documentation/RelNotes/2.25.3.adoc (renamed from Documentation/RelNotes/2.25.3.txt)0
-rw-r--r--Documentation/RelNotes/2.25.4.adoc (renamed from Documentation/RelNotes/2.25.4.txt)0
-rw-r--r--Documentation/RelNotes/2.25.5.adoc (renamed from Documentation/RelNotes/2.25.5.txt)0
-rw-r--r--Documentation/RelNotes/2.26.0.adoc (renamed from Documentation/RelNotes/2.26.0.txt)0
-rw-r--r--Documentation/RelNotes/2.26.1.adoc (renamed from Documentation/RelNotes/2.26.1.txt)0
-rw-r--r--Documentation/RelNotes/2.26.2.adoc (renamed from Documentation/RelNotes/2.26.2.txt)0
-rw-r--r--Documentation/RelNotes/2.26.3.adoc (renamed from Documentation/RelNotes/2.26.3.txt)0
-rw-r--r--Documentation/RelNotes/2.27.0.adoc (renamed from Documentation/RelNotes/2.27.0.txt)0
-rw-r--r--Documentation/RelNotes/2.27.1.adoc (renamed from Documentation/RelNotes/2.27.1.txt)0
-rw-r--r--Documentation/RelNotes/2.28.0.adoc (renamed from Documentation/RelNotes/2.28.0.txt)0
-rw-r--r--Documentation/RelNotes/2.28.1.adoc (renamed from Documentation/RelNotes/2.28.1.txt)0
-rw-r--r--Documentation/RelNotes/2.29.0.adoc (renamed from Documentation/RelNotes/2.29.0.txt)0
-rw-r--r--Documentation/RelNotes/2.29.1.adoc (renamed from Documentation/RelNotes/2.29.1.txt)0
-rw-r--r--Documentation/RelNotes/2.29.2.adoc (renamed from Documentation/RelNotes/2.29.2.txt)0
-rw-r--r--Documentation/RelNotes/2.29.3.adoc (renamed from Documentation/RelNotes/2.29.3.txt)0
-rw-r--r--Documentation/RelNotes/2.3.0.adoc (renamed from Documentation/RelNotes/2.3.0.txt)0
-rw-r--r--Documentation/RelNotes/2.3.1.adoc (renamed from Documentation/RelNotes/2.3.1.txt)0
-rw-r--r--Documentation/RelNotes/2.3.10.adoc (renamed from Documentation/RelNotes/2.3.10.txt)0
-rw-r--r--Documentation/RelNotes/2.3.2.adoc (renamed from Documentation/RelNotes/2.3.2.txt)0
-rw-r--r--Documentation/RelNotes/2.3.3.adoc (renamed from Documentation/RelNotes/2.3.3.txt)0
-rw-r--r--Documentation/RelNotes/2.3.4.adoc (renamed from Documentation/RelNotes/2.3.4.txt)0
-rw-r--r--Documentation/RelNotes/2.3.5.adoc (renamed from Documentation/RelNotes/2.3.5.txt)0
-rw-r--r--Documentation/RelNotes/2.3.6.adoc (renamed from Documentation/RelNotes/2.3.6.txt)0
-rw-r--r--Documentation/RelNotes/2.3.7.adoc (renamed from Documentation/RelNotes/2.3.7.txt)0
-rw-r--r--Documentation/RelNotes/2.3.8.adoc (renamed from Documentation/RelNotes/2.3.8.txt)0
-rw-r--r--Documentation/RelNotes/2.3.9.adoc (renamed from Documentation/RelNotes/2.3.9.txt)0
-rw-r--r--Documentation/RelNotes/2.30.0.adoc (renamed from Documentation/RelNotes/2.30.0.txt)0
-rw-r--r--Documentation/RelNotes/2.30.1.adoc (renamed from Documentation/RelNotes/2.30.1.txt)0
-rw-r--r--Documentation/RelNotes/2.30.2.adoc (renamed from Documentation/RelNotes/2.30.2.txt)0
-rw-r--r--Documentation/RelNotes/2.30.3.adoc (renamed from Documentation/RelNotes/2.30.3.txt)0
-rw-r--r--Documentation/RelNotes/2.30.4.adoc (renamed from Documentation/RelNotes/2.30.4.txt)0
-rw-r--r--Documentation/RelNotes/2.30.5.adoc (renamed from Documentation/RelNotes/2.30.5.txt)0
-rw-r--r--Documentation/RelNotes/2.30.6.adoc (renamed from Documentation/RelNotes/2.30.6.txt)0
-rw-r--r--Documentation/RelNotes/2.30.7.adoc (renamed from Documentation/RelNotes/2.30.7.txt)0
-rw-r--r--Documentation/RelNotes/2.30.8.adoc (renamed from Documentation/RelNotes/2.30.8.txt)0
-rw-r--r--Documentation/RelNotes/2.30.9.adoc (renamed from Documentation/RelNotes/2.30.9.txt)0
-rw-r--r--Documentation/RelNotes/2.31.0.adoc (renamed from Documentation/RelNotes/2.31.0.txt)0
-rw-r--r--Documentation/RelNotes/2.31.1.adoc (renamed from Documentation/RelNotes/2.31.1.txt)0
-rw-r--r--Documentation/RelNotes/2.31.2.adoc (renamed from Documentation/RelNotes/2.31.2.txt)0
-rw-r--r--Documentation/RelNotes/2.31.3.adoc (renamed from Documentation/RelNotes/2.31.3.txt)0
-rw-r--r--Documentation/RelNotes/2.31.4.adoc (renamed from Documentation/RelNotes/2.31.4.txt)0
-rw-r--r--Documentation/RelNotes/2.31.5.adoc (renamed from Documentation/RelNotes/2.31.5.txt)0
-rw-r--r--Documentation/RelNotes/2.31.6.adoc (renamed from Documentation/RelNotes/2.31.6.txt)0
-rw-r--r--Documentation/RelNotes/2.31.7.adoc (renamed from Documentation/RelNotes/2.31.7.txt)0
-rw-r--r--Documentation/RelNotes/2.31.8.adoc (renamed from Documentation/RelNotes/2.31.8.txt)0
-rw-r--r--Documentation/RelNotes/2.32.0.adoc (renamed from Documentation/RelNotes/2.32.0.txt)0
-rw-r--r--Documentation/RelNotes/2.32.1.adoc (renamed from Documentation/RelNotes/2.32.1.txt)0
-rw-r--r--Documentation/RelNotes/2.32.2.adoc (renamed from Documentation/RelNotes/2.32.2.txt)0
-rw-r--r--Documentation/RelNotes/2.32.3.adoc (renamed from Documentation/RelNotes/2.32.3.txt)0
-rw-r--r--Documentation/RelNotes/2.32.4.adoc (renamed from Documentation/RelNotes/2.32.4.txt)0
-rw-r--r--Documentation/RelNotes/2.32.5.adoc (renamed from Documentation/RelNotes/2.32.5.txt)0
-rw-r--r--Documentation/RelNotes/2.32.6.adoc (renamed from Documentation/RelNotes/2.32.6.txt)0
-rw-r--r--Documentation/RelNotes/2.32.7.adoc (renamed from Documentation/RelNotes/2.32.7.txt)0
-rw-r--r--Documentation/RelNotes/2.33.0.adoc (renamed from Documentation/RelNotes/2.33.0.txt)0
-rw-r--r--Documentation/RelNotes/2.33.1.adoc (renamed from Documentation/RelNotes/2.33.1.txt)0
-rw-r--r--Documentation/RelNotes/2.33.2.adoc (renamed from Documentation/RelNotes/2.33.2.txt)0
-rw-r--r--Documentation/RelNotes/2.33.3.adoc (renamed from Documentation/RelNotes/2.33.3.txt)0
-rw-r--r--Documentation/RelNotes/2.33.4.adoc (renamed from Documentation/RelNotes/2.33.4.txt)0
-rw-r--r--Documentation/RelNotes/2.33.5.adoc (renamed from Documentation/RelNotes/2.33.5.txt)0
-rw-r--r--Documentation/RelNotes/2.33.6.adoc (renamed from Documentation/RelNotes/2.33.6.txt)0
-rw-r--r--Documentation/RelNotes/2.33.7.adoc (renamed from Documentation/RelNotes/2.33.7.txt)0
-rw-r--r--Documentation/RelNotes/2.33.8.adoc (renamed from Documentation/RelNotes/2.33.8.txt)0
-rw-r--r--Documentation/RelNotes/2.34.0.adoc (renamed from Documentation/RelNotes/2.34.0.txt)0
-rw-r--r--Documentation/RelNotes/2.34.1.adoc (renamed from Documentation/RelNotes/2.34.1.txt)0
-rw-r--r--Documentation/RelNotes/2.34.2.adoc (renamed from Documentation/RelNotes/2.34.2.txt)0
-rw-r--r--Documentation/RelNotes/2.34.3.adoc (renamed from Documentation/RelNotes/2.34.3.txt)0
-rw-r--r--Documentation/RelNotes/2.34.4.adoc (renamed from Documentation/RelNotes/2.34.4.txt)0
-rw-r--r--Documentation/RelNotes/2.34.5.adoc (renamed from Documentation/RelNotes/2.34.5.txt)0
-rw-r--r--Documentation/RelNotes/2.34.6.adoc (renamed from Documentation/RelNotes/2.34.6.txt)0
-rw-r--r--Documentation/RelNotes/2.34.7.adoc (renamed from Documentation/RelNotes/2.34.7.txt)0
-rw-r--r--Documentation/RelNotes/2.34.8.adoc (renamed from Documentation/RelNotes/2.34.8.txt)0
-rw-r--r--Documentation/RelNotes/2.35.0.adoc (renamed from Documentation/RelNotes/2.35.0.txt)0
-rw-r--r--Documentation/RelNotes/2.35.1.adoc (renamed from Documentation/RelNotes/2.35.1.txt)0
-rw-r--r--Documentation/RelNotes/2.35.2.adoc (renamed from Documentation/RelNotes/2.35.2.txt)0
-rw-r--r--Documentation/RelNotes/2.35.3.adoc (renamed from Documentation/RelNotes/2.35.3.txt)0
-rw-r--r--Documentation/RelNotes/2.35.4.adoc (renamed from Documentation/RelNotes/2.35.4.txt)0
-rw-r--r--Documentation/RelNotes/2.35.5.adoc (renamed from Documentation/RelNotes/2.35.5.txt)0
-rw-r--r--Documentation/RelNotes/2.35.6.adoc (renamed from Documentation/RelNotes/2.35.6.txt)0
-rw-r--r--Documentation/RelNotes/2.35.7.adoc (renamed from Documentation/RelNotes/2.35.7.txt)0
-rw-r--r--Documentation/RelNotes/2.35.8.adoc (renamed from Documentation/RelNotes/2.35.8.txt)0
-rw-r--r--Documentation/RelNotes/2.36.0.adoc (renamed from Documentation/RelNotes/2.36.0.txt)0
-rw-r--r--Documentation/RelNotes/2.36.1.adoc (renamed from Documentation/RelNotes/2.36.1.txt)0
-rw-r--r--Documentation/RelNotes/2.36.2.adoc (renamed from Documentation/RelNotes/2.36.2.txt)0
-rw-r--r--Documentation/RelNotes/2.36.3.adoc (renamed from Documentation/RelNotes/2.36.3.txt)0
-rw-r--r--Documentation/RelNotes/2.36.4.adoc (renamed from Documentation/RelNotes/2.36.4.txt)0
-rw-r--r--Documentation/RelNotes/2.36.5.adoc (renamed from Documentation/RelNotes/2.36.5.txt)0
-rw-r--r--Documentation/RelNotes/2.36.6.adoc (renamed from Documentation/RelNotes/2.36.6.txt)0
-rw-r--r--Documentation/RelNotes/2.37.0.adoc (renamed from Documentation/RelNotes/2.37.0.txt)0
-rw-r--r--Documentation/RelNotes/2.37.1.adoc (renamed from Documentation/RelNotes/2.37.1.txt)0
-rw-r--r--Documentation/RelNotes/2.37.2.adoc (renamed from Documentation/RelNotes/2.37.2.txt)0
-rw-r--r--Documentation/RelNotes/2.37.3.adoc (renamed from Documentation/RelNotes/2.37.3.txt)0
-rw-r--r--Documentation/RelNotes/2.37.4.adoc (renamed from Documentation/RelNotes/2.37.4.txt)0
-rw-r--r--Documentation/RelNotes/2.37.5.adoc (renamed from Documentation/RelNotes/2.37.5.txt)0
-rw-r--r--Documentation/RelNotes/2.37.6.adoc (renamed from Documentation/RelNotes/2.37.6.txt)0
-rw-r--r--Documentation/RelNotes/2.37.7.adoc (renamed from Documentation/RelNotes/2.37.7.txt)0
-rw-r--r--Documentation/RelNotes/2.38.0.adoc (renamed from Documentation/RelNotes/2.38.0.txt)0
-rw-r--r--Documentation/RelNotes/2.38.1.adoc (renamed from Documentation/RelNotes/2.38.1.txt)0
-rw-r--r--Documentation/RelNotes/2.38.2.adoc (renamed from Documentation/RelNotes/2.38.2.txt)0
-rw-r--r--Documentation/RelNotes/2.38.3.adoc (renamed from Documentation/RelNotes/2.38.3.txt)0
-rw-r--r--Documentation/RelNotes/2.38.4.adoc (renamed from Documentation/RelNotes/2.38.4.txt)0
-rw-r--r--Documentation/RelNotes/2.38.5.adoc (renamed from Documentation/RelNotes/2.38.5.txt)0
-rw-r--r--Documentation/RelNotes/2.39.0.adoc (renamed from Documentation/RelNotes/2.39.0.txt)0
-rw-r--r--Documentation/RelNotes/2.39.1.adoc (renamed from Documentation/RelNotes/2.39.1.txt)0
-rw-r--r--Documentation/RelNotes/2.39.2.adoc (renamed from Documentation/RelNotes/2.39.2.txt)0
-rw-r--r--Documentation/RelNotes/2.39.3.adoc (renamed from Documentation/RelNotes/2.39.3.txt)0
-rw-r--r--Documentation/RelNotes/2.39.4.adoc (renamed from Documentation/RelNotes/2.39.4.txt)0
-rw-r--r--Documentation/RelNotes/2.39.5.adoc (renamed from Documentation/RelNotes/2.39.5.txt)0
-rw-r--r--Documentation/RelNotes/2.4.0.adoc (renamed from Documentation/RelNotes/2.4.0.txt)0
-rw-r--r--Documentation/RelNotes/2.4.1.adoc (renamed from Documentation/RelNotes/2.4.1.txt)0
-rw-r--r--Documentation/RelNotes/2.4.10.adoc (renamed from Documentation/RelNotes/2.4.10.txt)0
-rw-r--r--Documentation/RelNotes/2.4.11.adoc (renamed from Documentation/RelNotes/2.4.11.txt)0
-rw-r--r--Documentation/RelNotes/2.4.12.adoc (renamed from Documentation/RelNotes/2.4.12.txt)0
-rw-r--r--Documentation/RelNotes/2.4.2.adoc (renamed from Documentation/RelNotes/2.4.2.txt)0
-rw-r--r--Documentation/RelNotes/2.4.3.adoc (renamed from Documentation/RelNotes/2.4.3.txt)0
-rw-r--r--Documentation/RelNotes/2.4.4.adoc (renamed from Documentation/RelNotes/2.4.4.txt)0
-rw-r--r--Documentation/RelNotes/2.4.5.adoc (renamed from Documentation/RelNotes/2.4.5.txt)0
-rw-r--r--Documentation/RelNotes/2.4.6.adoc (renamed from Documentation/RelNotes/2.4.6.txt)0
-rw-r--r--Documentation/RelNotes/2.4.7.adoc (renamed from Documentation/RelNotes/2.4.7.txt)0
-rw-r--r--Documentation/RelNotes/2.4.8.adoc (renamed from Documentation/RelNotes/2.4.8.txt)0
-rw-r--r--Documentation/RelNotes/2.4.9.adoc (renamed from Documentation/RelNotes/2.4.9.txt)0
-rw-r--r--Documentation/RelNotes/2.40.0.adoc (renamed from Documentation/RelNotes/2.40.0.txt)0
-rw-r--r--Documentation/RelNotes/2.40.1.adoc (renamed from Documentation/RelNotes/2.40.1.txt)0
-rw-r--r--Documentation/RelNotes/2.40.2.adoc (renamed from Documentation/RelNotes/2.40.2.txt)0
-rw-r--r--Documentation/RelNotes/2.40.3.adoc (renamed from Documentation/RelNotes/2.40.3.txt)0
-rw-r--r--Documentation/RelNotes/2.40.4.adoc (renamed from Documentation/RelNotes/2.40.4.txt)0
-rw-r--r--Documentation/RelNotes/2.41.0.adoc (renamed from Documentation/RelNotes/2.41.0.txt)0
-rw-r--r--Documentation/RelNotes/2.41.1.adoc (renamed from Documentation/RelNotes/2.41.1.txt)0
-rw-r--r--Documentation/RelNotes/2.41.2.adoc (renamed from Documentation/RelNotes/2.41.2.txt)0
-rw-r--r--Documentation/RelNotes/2.41.3.adoc (renamed from Documentation/RelNotes/2.41.3.txt)0
-rw-r--r--Documentation/RelNotes/2.42.0.adoc (renamed from Documentation/RelNotes/2.42.0.txt)0
-rw-r--r--Documentation/RelNotes/2.42.1.adoc (renamed from Documentation/RelNotes/2.42.1.txt)0
-rw-r--r--Documentation/RelNotes/2.42.2.adoc (renamed from Documentation/RelNotes/2.42.2.txt)0
-rw-r--r--Documentation/RelNotes/2.42.3.adoc (renamed from Documentation/RelNotes/2.42.3.txt)0
-rw-r--r--Documentation/RelNotes/2.42.4.adoc (renamed from Documentation/RelNotes/2.42.4.txt)0
-rw-r--r--Documentation/RelNotes/2.43.0.adoc (renamed from Documentation/RelNotes/2.43.0.txt)0
-rw-r--r--Documentation/RelNotes/2.43.1.adoc (renamed from Documentation/RelNotes/2.43.1.txt)0
-rw-r--r--Documentation/RelNotes/2.43.2.adoc (renamed from Documentation/RelNotes/2.43.2.txt)0
-rw-r--r--Documentation/RelNotes/2.43.3.adoc (renamed from Documentation/RelNotes/2.43.3.txt)0
-rw-r--r--Documentation/RelNotes/2.43.4.adoc (renamed from Documentation/RelNotes/2.43.4.txt)0
-rw-r--r--Documentation/RelNotes/2.43.5.adoc (renamed from Documentation/RelNotes/2.43.5.txt)0
-rw-r--r--Documentation/RelNotes/2.43.6.adoc (renamed from Documentation/RelNotes/2.43.6.txt)0
-rw-r--r--Documentation/RelNotes/2.44.0.adoc (renamed from Documentation/RelNotes/2.44.0.txt)0
-rw-r--r--Documentation/RelNotes/2.44.1.adoc (renamed from Documentation/RelNotes/2.44.1.txt)0
-rw-r--r--Documentation/RelNotes/2.44.2.adoc (renamed from Documentation/RelNotes/2.44.2.txt)0
-rw-r--r--Documentation/RelNotes/2.44.3.adoc (renamed from Documentation/RelNotes/2.44.3.txt)0
-rw-r--r--Documentation/RelNotes/2.45.0.adoc (renamed from Documentation/RelNotes/2.45.0.txt)0
-rw-r--r--Documentation/RelNotes/2.45.1.adoc (renamed from Documentation/RelNotes/2.45.1.txt)0
-rw-r--r--Documentation/RelNotes/2.45.2.adoc (renamed from Documentation/RelNotes/2.45.2.txt)0
-rw-r--r--Documentation/RelNotes/2.45.3.adoc (renamed from Documentation/RelNotes/2.45.3.txt)0
-rw-r--r--Documentation/RelNotes/2.46.0.adoc (renamed from Documentation/RelNotes/2.46.0.txt)0
-rw-r--r--Documentation/RelNotes/2.46.1.adoc (renamed from Documentation/RelNotes/2.46.1.txt)0
-rw-r--r--Documentation/RelNotes/2.46.2.adoc (renamed from Documentation/RelNotes/2.46.2.txt)0
-rw-r--r--Documentation/RelNotes/2.46.3.adoc (renamed from Documentation/RelNotes/2.46.3.txt)0
-rw-r--r--Documentation/RelNotes/2.47.0.adoc (renamed from Documentation/RelNotes/2.47.0.txt)0
-rw-r--r--Documentation/RelNotes/2.47.1.adoc (renamed from Documentation/RelNotes/2.47.1.txt)0
-rw-r--r--Documentation/RelNotes/2.47.2.adoc (renamed from Documentation/RelNotes/2.47.2.txt)0
-rw-r--r--Documentation/RelNotes/2.48.0.adoc (renamed from Documentation/RelNotes/2.48.0.txt)0
-rw-r--r--Documentation/RelNotes/2.48.1.adoc (renamed from Documentation/RelNotes/2.48.1.txt)0
-rw-r--r--Documentation/RelNotes/2.49.0.adoc (renamed from Documentation/RelNotes/2.49.0.txt)63
-rw-r--r--Documentation/RelNotes/2.5.0.adoc (renamed from Documentation/RelNotes/2.5.0.txt)0
-rw-r--r--Documentation/RelNotes/2.5.1.adoc (renamed from Documentation/RelNotes/2.5.1.txt)0
-rw-r--r--Documentation/RelNotes/2.5.2.adoc (renamed from Documentation/RelNotes/2.5.2.txt)0
-rw-r--r--Documentation/RelNotes/2.5.3.adoc (renamed from Documentation/RelNotes/2.5.3.txt)0
-rw-r--r--Documentation/RelNotes/2.5.4.adoc (renamed from Documentation/RelNotes/2.5.4.txt)0
-rw-r--r--Documentation/RelNotes/2.5.5.adoc (renamed from Documentation/RelNotes/2.5.5.txt)0
-rw-r--r--Documentation/RelNotes/2.5.6.adoc (renamed from Documentation/RelNotes/2.5.6.txt)0
-rw-r--r--Documentation/RelNotes/2.6.0.adoc (renamed from Documentation/RelNotes/2.6.0.txt)0
-rw-r--r--Documentation/RelNotes/2.6.1.adoc (renamed from Documentation/RelNotes/2.6.1.txt)0
-rw-r--r--Documentation/RelNotes/2.6.2.adoc (renamed from Documentation/RelNotes/2.6.2.txt)0
-rw-r--r--Documentation/RelNotes/2.6.3.adoc (renamed from Documentation/RelNotes/2.6.3.txt)0
-rw-r--r--Documentation/RelNotes/2.6.4.adoc (renamed from Documentation/RelNotes/2.6.4.txt)0
-rw-r--r--Documentation/RelNotes/2.6.5.adoc (renamed from Documentation/RelNotes/2.6.5.txt)0
-rw-r--r--Documentation/RelNotes/2.6.6.adoc (renamed from Documentation/RelNotes/2.6.6.txt)0
-rw-r--r--Documentation/RelNotes/2.6.7.adoc (renamed from Documentation/RelNotes/2.6.7.txt)0
-rw-r--r--Documentation/RelNotes/2.7.0.adoc (renamed from Documentation/RelNotes/2.7.0.txt)0
-rw-r--r--Documentation/RelNotes/2.7.1.adoc (renamed from Documentation/RelNotes/2.7.1.txt)0
-rw-r--r--Documentation/RelNotes/2.7.2.adoc (renamed from Documentation/RelNotes/2.7.2.txt)0
-rw-r--r--Documentation/RelNotes/2.7.3.adoc (renamed from Documentation/RelNotes/2.7.3.txt)0
-rw-r--r--Documentation/RelNotes/2.7.4.adoc (renamed from Documentation/RelNotes/2.7.4.txt)0
-rw-r--r--Documentation/RelNotes/2.7.5.adoc (renamed from Documentation/RelNotes/2.7.5.txt)0
-rw-r--r--Documentation/RelNotes/2.7.6.adoc (renamed from Documentation/RelNotes/2.7.6.txt)0
-rw-r--r--Documentation/RelNotes/2.8.0.adoc (renamed from Documentation/RelNotes/2.8.0.txt)0
-rw-r--r--Documentation/RelNotes/2.8.1.adoc (renamed from Documentation/RelNotes/2.8.1.txt)0
-rw-r--r--Documentation/RelNotes/2.8.2.adoc (renamed from Documentation/RelNotes/2.8.2.txt)0
-rw-r--r--Documentation/RelNotes/2.8.3.adoc (renamed from Documentation/RelNotes/2.8.3.txt)0
-rw-r--r--Documentation/RelNotes/2.8.4.adoc (renamed from Documentation/RelNotes/2.8.4.txt)0
-rw-r--r--Documentation/RelNotes/2.8.5.adoc (renamed from Documentation/RelNotes/2.8.5.txt)0
-rw-r--r--Documentation/RelNotes/2.8.6.adoc (renamed from Documentation/RelNotes/2.8.6.txt)0
-rw-r--r--Documentation/RelNotes/2.9.0.adoc (renamed from Documentation/RelNotes/2.9.0.txt)0
-rw-r--r--Documentation/RelNotes/2.9.1.adoc (renamed from Documentation/RelNotes/2.9.1.txt)0
-rw-r--r--Documentation/RelNotes/2.9.2.adoc (renamed from Documentation/RelNotes/2.9.2.txt)0
-rw-r--r--Documentation/RelNotes/2.9.3.adoc (renamed from Documentation/RelNotes/2.9.3.txt)0
-rw-r--r--Documentation/RelNotes/2.9.4.adoc (renamed from Documentation/RelNotes/2.9.4.txt)0
-rw-r--r--Documentation/RelNotes/2.9.5.adoc (renamed from Documentation/RelNotes/2.9.5.txt)0
-rw-r--r--Documentation/ReviewingGuidelines.adoc (renamed from Documentation/ReviewingGuidelines.txt)0
-rw-r--r--Documentation/ToolsForGit.adoc (renamed from Documentation/ToolsForGit.txt)0
-rw-r--r--Documentation/blame-options.adoc (renamed from Documentation/blame-options.txt)2
-rwxr-xr-xDocumentation/cmd-list.perl8
-rw-r--r--Documentation/config.adoc (renamed from Documentation/config.txt)186
-rw-r--r--Documentation/config/add.adoc (renamed from Documentation/config/add.txt)0
-rw-r--r--Documentation/config/advice.adoc (renamed from Documentation/config/advice.txt)0
-rw-r--r--Documentation/config/alias.adoc (renamed from Documentation/config/alias.txt)0
-rw-r--r--Documentation/config/am.adoc (renamed from Documentation/config/am.txt)0
-rw-r--r--Documentation/config/apply.adoc (renamed from Documentation/config/apply.txt)0
-rw-r--r--Documentation/config/attr.adoc (renamed from Documentation/config/attr.txt)0
-rw-r--r--Documentation/config/bitmap-pseudo-merge.adoc (renamed from Documentation/config/bitmap-pseudo-merge.txt)0
-rw-r--r--Documentation/config/blame.adoc (renamed from Documentation/config/blame.txt)0
-rw-r--r--Documentation/config/branch.adoc (renamed from Documentation/config/branch.txt)0
-rw-r--r--Documentation/config/browser.adoc (renamed from Documentation/config/browser.txt)0
-rw-r--r--Documentation/config/bundle.adoc (renamed from Documentation/config/bundle.txt)0
-rw-r--r--Documentation/config/checkout.adoc (renamed from Documentation/config/checkout.txt)0
-rw-r--r--Documentation/config/clean.adoc (renamed from Documentation/config/clean.txt)0
-rw-r--r--Documentation/config/clone.adoc (renamed from Documentation/config/clone.txt)0
-rw-r--r--Documentation/config/color.adoc (renamed from Documentation/config/color.txt)0
-rw-r--r--Documentation/config/column.adoc (renamed from Documentation/config/column.txt)0
-rw-r--r--Documentation/config/commit.adoc (renamed from Documentation/config/commit.txt)0
-rw-r--r--Documentation/config/commitgraph.adoc (renamed from Documentation/config/commitgraph.txt)0
-rw-r--r--Documentation/config/completion.adoc (renamed from Documentation/config/completion.txt)0
-rw-r--r--Documentation/config/core.adoc (renamed from Documentation/config/core.txt)0
-rw-r--r--Documentation/config/credential.adoc (renamed from Documentation/config/credential.txt)0
-rw-r--r--Documentation/config/diff.adoc (renamed from Documentation/config/diff.txt)0
-rw-r--r--Documentation/config/difftool.adoc (renamed from Documentation/config/difftool.txt)2
-rw-r--r--Documentation/config/extensions.adoc (renamed from Documentation/config/extensions.txt)2
-rw-r--r--Documentation/config/fastimport.adoc (renamed from Documentation/config/fastimport.txt)0
-rw-r--r--Documentation/config/feature.adoc (renamed from Documentation/config/feature.txt)0
-rw-r--r--Documentation/config/fetch.adoc (renamed from Documentation/config/fetch.txt)0
-rw-r--r--Documentation/config/filter.adoc (renamed from Documentation/config/filter.txt)0
-rw-r--r--Documentation/config/fmt-merge-msg.adoc (renamed from Documentation/config/fmt-merge-msg.txt)0
-rw-r--r--Documentation/config/format.adoc (renamed from Documentation/config/format.txt)0
-rw-r--r--Documentation/config/fsck.adoc (renamed from Documentation/config/fsck.txt)0
-rw-r--r--Documentation/config/fsmonitor--daemon.adoc (renamed from Documentation/config/fsmonitor--daemon.txt)0
-rw-r--r--Documentation/config/gc.adoc (renamed from Documentation/config/gc.txt)0
-rw-r--r--Documentation/config/gitcvs.adoc (renamed from Documentation/config/gitcvs.txt)0
-rw-r--r--Documentation/config/gitweb.adoc (renamed from Documentation/config/gitweb.txt)0
-rw-r--r--Documentation/config/gpg.adoc (renamed from Documentation/config/gpg.txt)0
-rw-r--r--Documentation/config/grep.adoc (renamed from Documentation/config/grep.txt)0
-rw-r--r--Documentation/config/gui.adoc (renamed from Documentation/config/gui.txt)0
-rw-r--r--Documentation/config/guitool.adoc (renamed from Documentation/config/guitool.txt)0
-rw-r--r--Documentation/config/help.adoc (renamed from Documentation/config/help.txt)9
-rw-r--r--Documentation/config/http.adoc (renamed from Documentation/config/http.txt)0
-rw-r--r--Documentation/config/i18n.adoc (renamed from Documentation/config/i18n.txt)0
-rw-r--r--Documentation/config/imap.adoc (renamed from Documentation/config/imap.txt)0
-rw-r--r--Documentation/config/includeif.adoc (renamed from Documentation/config/includeif.txt)0
-rw-r--r--Documentation/config/index.adoc (renamed from Documentation/config/index.txt)0
-rw-r--r--Documentation/config/init.adoc (renamed from Documentation/config/init.txt)0
-rw-r--r--Documentation/config/instaweb.adoc (renamed from Documentation/config/instaweb.txt)0
-rw-r--r--Documentation/config/interactive.adoc (renamed from Documentation/config/interactive.txt)0
-rw-r--r--Documentation/config/log.adoc (renamed from Documentation/config/log.txt)0
-rw-r--r--Documentation/config/lsrefs.adoc (renamed from Documentation/config/lsrefs.txt)0
-rw-r--r--Documentation/config/mailinfo.adoc (renamed from Documentation/config/mailinfo.txt)0
-rw-r--r--Documentation/config/mailmap.adoc (renamed from Documentation/config/mailmap.txt)0
-rw-r--r--Documentation/config/maintenance.adoc (renamed from Documentation/config/maintenance.txt)0
-rw-r--r--Documentation/config/man.adoc (renamed from Documentation/config/man.txt)0
-rw-r--r--Documentation/config/merge.adoc (renamed from Documentation/config/merge.txt)4
-rw-r--r--Documentation/config/mergetool.adoc (renamed from Documentation/config/mergetool.txt)0
-rw-r--r--Documentation/config/notes.adoc (renamed from Documentation/config/notes.txt)0
-rw-r--r--Documentation/config/pack.adoc (renamed from Documentation/config/pack.txt)0
-rw-r--r--Documentation/config/pager.adoc (renamed from Documentation/config/pager.txt)0
-rw-r--r--Documentation/config/pretty.adoc (renamed from Documentation/config/pretty.txt)0
-rw-r--r--Documentation/config/promisor.adoc (renamed from Documentation/config/promisor.txt)0
-rw-r--r--Documentation/config/protocol.adoc (renamed from Documentation/config/protocol.txt)0
-rw-r--r--Documentation/config/pull.adoc (renamed from Documentation/config/pull.txt)0
-rw-r--r--Documentation/config/push.adoc (renamed from Documentation/config/push.txt)0
-rw-r--r--Documentation/config/rebase.adoc (renamed from Documentation/config/rebase.txt)0
-rw-r--r--Documentation/config/receive.adoc (renamed from Documentation/config/receive.txt)0
-rw-r--r--Documentation/config/reftable.adoc (renamed from Documentation/config/reftable.txt)0
-rw-r--r--Documentation/config/remote.adoc (renamed from Documentation/config/remote.txt)0
-rw-r--r--Documentation/config/remotes.adoc (renamed from Documentation/config/remotes.txt)0
-rw-r--r--Documentation/config/repack.adoc (renamed from Documentation/config/repack.txt)0
-rw-r--r--Documentation/config/rerere.adoc (renamed from Documentation/config/rerere.txt)0
-rw-r--r--Documentation/config/revert.adoc (renamed from Documentation/config/revert.txt)0
-rw-r--r--Documentation/config/safe.adoc (renamed from Documentation/config/safe.txt)0
-rw-r--r--Documentation/config/sendemail.adoc (renamed from Documentation/config/sendemail.txt)0
-rw-r--r--Documentation/config/sequencer.adoc (renamed from Documentation/config/sequencer.txt)0
-rw-r--r--Documentation/config/showbranch.adoc (renamed from Documentation/config/showbranch.txt)0
-rw-r--r--Documentation/config/sparse.adoc (renamed from Documentation/config/sparse.txt)0
-rw-r--r--Documentation/config/splitindex.adoc (renamed from Documentation/config/splitindex.txt)0
-rw-r--r--Documentation/config/ssh.adoc (renamed from Documentation/config/ssh.txt)0
-rw-r--r--Documentation/config/stash.adoc (renamed from Documentation/config/stash.txt)0
-rw-r--r--Documentation/config/status.adoc (renamed from Documentation/config/status.txt)0
-rw-r--r--Documentation/config/submodule.adoc (renamed from Documentation/config/submodule.txt)0
-rw-r--r--Documentation/config/tag.adoc (renamed from Documentation/config/tag.txt)0
-rw-r--r--Documentation/config/tar.adoc (renamed from Documentation/config/tar.txt)0
-rw-r--r--Documentation/config/trace2.adoc (renamed from Documentation/config/trace2.txt)2
-rw-r--r--Documentation/config/trailer.adoc136
-rw-r--r--Documentation/config/transfer.adoc (renamed from Documentation/config/transfer.txt)0
-rw-r--r--Documentation/config/uploadarchive.adoc (renamed from Documentation/config/uploadarchive.txt)0
-rw-r--r--Documentation/config/uploadpack.adoc (renamed from Documentation/config/uploadpack.txt)0
-rw-r--r--Documentation/config/url.adoc (renamed from Documentation/config/url.txt)0
-rw-r--r--Documentation/config/user.adoc (renamed from Documentation/config/user.txt)0
-rw-r--r--Documentation/config/versionsort.adoc (renamed from Documentation/config/versionsort.txt)0
-rw-r--r--Documentation/config/web.adoc (renamed from Documentation/config/web.txt)0
-rw-r--r--Documentation/config/worktree.adoc (renamed from Documentation/config/worktree.txt)0
-rw-r--r--Documentation/date-formats.adoc (renamed from Documentation/date-formats.txt)0
-rw-r--r--Documentation/diff-format.adoc (renamed from Documentation/diff-format.txt)2
-rw-r--r--Documentation/diff-generate-patch.adoc (renamed from Documentation/diff-generate-patch.txt)0
-rw-r--r--Documentation/diff-options.adoc (renamed from Documentation/diff-options.txt)0
-rw-r--r--Documentation/everyday.adoco (renamed from Documentation/everyday.txto)0
-rw-r--r--Documentation/fetch-options.adoc (renamed from Documentation/fetch-options.txt)0
-rw-r--r--Documentation/fsck-msgids.adoc (renamed from Documentation/fsck-msgids.txt)0
-rw-r--r--Documentation/git-add.adoc (renamed from Documentation/git-add.txt)4
-rw-r--r--Documentation/git-am.adoc (renamed from Documentation/git-am.txt)6
-rw-r--r--Documentation/git-annotate.adoc (renamed from Documentation/git-annotate.txt)2
-rw-r--r--Documentation/git-apply.adoc (renamed from Documentation/git-apply.txt)4
-rw-r--r--Documentation/git-archimport.adoc (renamed from Documentation/git-archimport.txt)0
-rw-r--r--Documentation/git-archive.adoc (renamed from Documentation/git-archive.txt)0
-rw-r--r--Documentation/git-bisect-lk2009.adoc (renamed from Documentation/git-bisect-lk2009.txt)0
-rw-r--r--Documentation/git-bisect.adoc (renamed from Documentation/git-bisect.txt)0
-rw-r--r--Documentation/git-blame.adoc (renamed from Documentation/git-blame.txt)6
-rw-r--r--Documentation/git-branch.adoc (renamed from Documentation/git-branch.txt)6
-rw-r--r--Documentation/git-bugreport.adoc (renamed from Documentation/git-bugreport.txt)0
-rw-r--r--Documentation/git-bundle.adoc (renamed from Documentation/git-bundle.txt)0
-rw-r--r--Documentation/git-cat-file.adoc (renamed from Documentation/git-cat-file.txt)0
-rw-r--r--Documentation/git-check-attr.adoc (renamed from Documentation/git-check-attr.txt)0
-rw-r--r--Documentation/git-check-ignore.adoc (renamed from Documentation/git-check-ignore.txt)0
-rw-r--r--Documentation/git-check-mailmap.adoc (renamed from Documentation/git-check-mailmap.txt)0
-rw-r--r--Documentation/git-check-ref-format.adoc (renamed from Documentation/git-check-ref-format.txt)0
-rw-r--r--Documentation/git-checkout-index.adoc (renamed from Documentation/git-checkout-index.txt)0
-rw-r--r--Documentation/git-checkout.adoc (renamed from Documentation/git-checkout.txt)4
-rw-r--r--Documentation/git-cherry-pick.adoc (renamed from Documentation/git-cherry-pick.txt)4
-rw-r--r--Documentation/git-cherry.adoc (renamed from Documentation/git-cherry.txt)0
-rw-r--r--Documentation/git-citool.adoc (renamed from Documentation/git-citool.txt)0
-rw-r--r--Documentation/git-clean.adoc (renamed from Documentation/git-clean.txt)4
-rw-r--r--Documentation/git-clone.adoc (renamed from Documentation/git-clone.txt)36
-rw-r--r--Documentation/git-column.adoc (renamed from Documentation/git-column.txt)4
-rw-r--r--Documentation/git-commit-graph.adoc (renamed from Documentation/git-commit-graph.txt)4
-rw-r--r--Documentation/git-commit-tree.adoc (renamed from Documentation/git-commit-tree.txt)4
-rw-r--r--Documentation/git-commit.adoc (renamed from Documentation/git-commit.txt)10
-rw-r--r--Documentation/git-config.adoc (renamed from Documentation/git-config.txt)2
-rw-r--r--Documentation/git-count-objects.adoc (renamed from Documentation/git-count-objects.txt)0
-rw-r--r--Documentation/git-credential-cache--daemon.adoc (renamed from Documentation/git-credential-cache--daemon.txt)0
-rw-r--r--Documentation/git-credential-cache.adoc (renamed from Documentation/git-credential-cache.txt)0
-rw-r--r--Documentation/git-credential-store.adoc (renamed from Documentation/git-credential-store.txt)0
-rw-r--r--Documentation/git-credential.adoc (renamed from Documentation/git-credential.txt)0
-rw-r--r--Documentation/git-cvsexportcommit.adoc (renamed from Documentation/git-cvsexportcommit.txt)0
-rw-r--r--Documentation/git-cvsimport.adoc (renamed from Documentation/git-cvsimport.txt)0
-rw-r--r--Documentation/git-cvsserver.adoc (renamed from Documentation/git-cvsserver.txt)0
-rw-r--r--Documentation/git-daemon.adoc (renamed from Documentation/git-daemon.txt)0
-rw-r--r--Documentation/git-describe.adoc (renamed from Documentation/git-describe.txt)0
-rw-r--r--Documentation/git-diagnose.adoc (renamed from Documentation/git-diagnose.txt)0
-rw-r--r--Documentation/git-diff-files.adoc (renamed from Documentation/git-diff-files.txt)4
-rw-r--r--Documentation/git-diff-index.adoc (renamed from Documentation/git-diff-index.txt)4
-rw-r--r--Documentation/git-diff-tree.adoc (renamed from Documentation/git-diff-tree.txt)8
-rw-r--r--Documentation/git-diff.adoc (renamed from Documentation/git-diff.txt)8
-rw-r--r--Documentation/git-difftool.adoc (renamed from Documentation/git-difftool.txt)4
-rw-r--r--Documentation/git-fast-export.adoc (renamed from Documentation/git-fast-export.txt)0
-rw-r--r--Documentation/git-fast-import.adoc (renamed from Documentation/git-fast-import.txt)4
-rw-r--r--Documentation/git-fetch-pack.adoc (renamed from Documentation/git-fetch-pack.txt)0
-rw-r--r--Documentation/git-fetch.adoc (renamed from Documentation/git-fetch.txt)12
-rw-r--r--Documentation/git-filter-branch.adoc (renamed from Documentation/git-filter-branch.txt)0
-rw-r--r--Documentation/git-fmt-merge-msg.adoc (renamed from Documentation/git-fmt-merge-msg.txt)2
-rw-r--r--Documentation/git-for-each-ref.adoc (renamed from Documentation/git-for-each-ref.txt)2
-rw-r--r--Documentation/git-for-each-repo.adoc (renamed from Documentation/git-for-each-repo.txt)0
-rw-r--r--Documentation/git-format-patch.adoc (renamed from Documentation/git-format-patch.txt)2
-rw-r--r--Documentation/git-fsck-objects.adoc (renamed from Documentation/git-fsck-objects.txt)0
-rw-r--r--Documentation/git-fsck.adoc (renamed from Documentation/git-fsck.txt)6
-rw-r--r--Documentation/git-fsmonitor--daemon.adoc (renamed from Documentation/git-fsmonitor--daemon.txt)4
-rw-r--r--Documentation/git-gc.adoc (renamed from Documentation/git-gc.txt)11
-rw-r--r--Documentation/git-get-tar-commit-id.adoc (renamed from Documentation/git-get-tar-commit-id.txt)0
-rw-r--r--Documentation/git-grep.adoc (renamed from Documentation/git-grep.txt)4
-rw-r--r--Documentation/git-gui.adoc (renamed from Documentation/git-gui.txt)0
-rw-r--r--Documentation/git-hash-object.adoc (renamed from Documentation/git-hash-object.txt)0
-rw-r--r--Documentation/git-help.adoc (renamed from Documentation/git-help.txt)0
-rw-r--r--Documentation/git-hook.adoc (renamed from Documentation/git-hook.txt)0
-rw-r--r--Documentation/git-http-backend.adoc (renamed from Documentation/git-http-backend.txt)0
-rw-r--r--Documentation/git-http-fetch.adoc (renamed from Documentation/git-http-fetch.txt)0
-rw-r--r--Documentation/git-http-push.adoc (renamed from Documentation/git-http-push.txt)0
-rw-r--r--Documentation/git-imap-send.adoc (renamed from Documentation/git-imap-send.txt)4
-rw-r--r--Documentation/git-index-pack.adoc (renamed from Documentation/git-index-pack.txt)2
-rw-r--r--Documentation/git-init-db.adoc (renamed from Documentation/git-init-db.txt)0
-rw-r--r--Documentation/git-init.adoc (renamed from Documentation/git-init.txt)8
-rw-r--r--Documentation/git-instaweb.adoc (renamed from Documentation/git-instaweb.txt)0
-rw-r--r--Documentation/git-interpret-trailers.adoc (renamed from Documentation/git-interpret-trailers.txt)137
-rw-r--r--Documentation/git-log.adoc (renamed from Documentation/git-log.txt)20
-rw-r--r--Documentation/git-ls-files.adoc (renamed from Documentation/git-ls-files.txt)0
-rw-r--r--Documentation/git-ls-remote.adoc (renamed from Documentation/git-ls-remote.txt)0
-rw-r--r--Documentation/git-ls-tree.adoc (renamed from Documentation/git-ls-tree.txt)0
-rw-r--r--Documentation/git-mailinfo.adoc (renamed from Documentation/git-mailinfo.txt)4
-rw-r--r--Documentation/git-mailsplit.adoc (renamed from Documentation/git-mailsplit.txt)0
-rw-r--r--Documentation/git-maintenance.adoc (renamed from Documentation/git-maintenance.txt)4
-rw-r--r--Documentation/git-merge-base.adoc (renamed from Documentation/git-merge-base.txt)0
-rw-r--r--Documentation/git-merge-file.adoc (renamed from Documentation/git-merge-file.txt)0
-rw-r--r--Documentation/git-merge-index.adoc (renamed from Documentation/git-merge-index.txt)0
-rw-r--r--Documentation/git-merge-one-file.adoc (renamed from Documentation/git-merge-one-file.txt)0
-rw-r--r--Documentation/git-merge-tree.adoc (renamed from Documentation/git-merge-tree.txt)0
-rw-r--r--Documentation/git-merge.adoc (renamed from Documentation/git-merge.txt)10
-rw-r--r--Documentation/git-mergetool--lib.adoc (renamed from Documentation/git-mergetool--lib.txt)0
-rw-r--r--Documentation/git-mergetool.adoc (renamed from Documentation/git-mergetool.txt)6
-rw-r--r--Documentation/git-mktag.adoc (renamed from Documentation/git-mktag.txt)0
-rw-r--r--Documentation/git-mktree.adoc (renamed from Documentation/git-mktree.txt)0
-rw-r--r--Documentation/git-multi-pack-index.adoc (renamed from Documentation/git-multi-pack-index.txt)0
-rw-r--r--Documentation/git-mv.adoc (renamed from Documentation/git-mv.txt)0
-rw-r--r--Documentation/git-name-rev.adoc (renamed from Documentation/git-name-rev.txt)0
-rw-r--r--Documentation/git-notes.adoc (renamed from Documentation/git-notes.txt)4
-rw-r--r--Documentation/git-p4.adoc (renamed from Documentation/git-p4.txt)0
-rw-r--r--Documentation/git-pack-objects.adoc (renamed from Documentation/git-pack-objects.txt)32
-rw-r--r--Documentation/git-pack-redundant.adoc (renamed from Documentation/git-pack-redundant.txt)0
-rw-r--r--Documentation/git-pack-refs.adoc (renamed from Documentation/git-pack-refs.txt)0
-rw-r--r--Documentation/git-patch-id.adoc (renamed from Documentation/git-patch-id.txt)0
-rw-r--r--Documentation/git-prune-packed.adoc (renamed from Documentation/git-prune-packed.txt)0
-rw-r--r--Documentation/git-prune.adoc (renamed from Documentation/git-prune.txt)0
-rw-r--r--Documentation/git-pull.adoc (renamed from Documentation/git-pull.txt)12
-rw-r--r--Documentation/git-push.adoc (renamed from Documentation/git-push.txt)8
-rw-r--r--Documentation/git-quiltimport.adoc (renamed from Documentation/git-quiltimport.txt)0
-rw-r--r--Documentation/git-range-diff.adoc (renamed from Documentation/git-range-diff.txt)0
-rw-r--r--Documentation/git-read-tree.adoc (renamed from Documentation/git-read-tree.txt)0
-rw-r--r--Documentation/git-rebase.adoc (renamed from Documentation/git-rebase.txt)10
-rw-r--r--Documentation/git-receive-pack.adoc (renamed from Documentation/git-receive-pack.txt)0
-rw-r--r--Documentation/git-reflog.adoc (renamed from Documentation/git-reflog.txt)0
-rw-r--r--Documentation/git-refs.adoc (renamed from Documentation/git-refs.txt)2
-rw-r--r--Documentation/git-remote-ext.adoc (renamed from Documentation/git-remote-ext.txt)0
-rw-r--r--Documentation/git-remote-fd.adoc (renamed from Documentation/git-remote-fd.txt)0
-rw-r--r--Documentation/git-remote-helpers.adoco (renamed from Documentation/git-remote-helpers.txto)0
-rw-r--r--Documentation/git-remote.adoc (renamed from Documentation/git-remote.txt)0
-rw-r--r--Documentation/git-repack.adoc (renamed from Documentation/git-repack.txt)9
-rw-r--r--Documentation/git-replace.adoc (renamed from Documentation/git-replace.txt)0
-rw-r--r--Documentation/git-replay.adoc (renamed from Documentation/git-replay.txt)2
-rw-r--r--Documentation/git-request-pull.adoc (renamed from Documentation/git-request-pull.txt)0
-rw-r--r--Documentation/git-rerere.adoc (renamed from Documentation/git-rerere.txt)0
-rw-r--r--Documentation/git-reset.adoc (renamed from Documentation/git-reset.txt)0
-rw-r--r--Documentation/git-restore.adoc (renamed from Documentation/git-restore.txt)0
-rw-r--r--Documentation/git-rev-list.adoc (renamed from Documentation/git-rev-list.txt)6
-rw-r--r--Documentation/git-rev-parse.adoc (renamed from Documentation/git-rev-parse.txt)2
-rw-r--r--Documentation/git-revert.adoc (renamed from Documentation/git-revert.txt)8
-rw-r--r--Documentation/git-rm.adoc (renamed from Documentation/git-rm.txt)0
-rw-r--r--Documentation/git-send-email.adoc (renamed from Documentation/git-send-email.txt)4
-rw-r--r--Documentation/git-send-pack.adoc (renamed from Documentation/git-send-pack.txt)0
-rw-r--r--Documentation/git-sh-i18n--envsubst.adoc (renamed from Documentation/git-sh-i18n--envsubst.txt)0
-rw-r--r--Documentation/git-sh-i18n.adoc (renamed from Documentation/git-sh-i18n.txt)0
-rw-r--r--Documentation/git-sh-setup.adoc (renamed from Documentation/git-sh-setup.txt)0
-rw-r--r--Documentation/git-shell.adoc (renamed from Documentation/git-shell.txt)0
-rw-r--r--Documentation/git-shortlog.adoc (renamed from Documentation/git-shortlog.txt)2
-rw-r--r--Documentation/git-show-branch.adoc (renamed from Documentation/git-show-branch.txt)4
-rw-r--r--Documentation/git-show-index.adoc (renamed from Documentation/git-show-index.txt)2
-rw-r--r--Documentation/git-show-ref.adoc (renamed from Documentation/git-show-ref.txt)0
-rw-r--r--Documentation/git-show.adoc (renamed from Documentation/git-show.txt)10
-rw-r--r--Documentation/git-sparse-checkout.adoc (renamed from Documentation/git-sparse-checkout.txt)0
-rw-r--r--Documentation/git-stage.adoc (renamed from Documentation/git-stage.txt)0
-rw-r--r--Documentation/git-stash.adoc (renamed from Documentation/git-stash.txt)4
-rw-r--r--Documentation/git-status.adoc (renamed from Documentation/git-status.txt)0
-rw-r--r--Documentation/git-stripspace.adoc (renamed from Documentation/git-stripspace.txt)0
-rw-r--r--Documentation/git-submodule.adoc (renamed from Documentation/git-submodule.txt)0
-rw-r--r--Documentation/git-svn.adoc (renamed from Documentation/git-svn.txt)0
-rw-r--r--Documentation/git-switch.adoc (renamed from Documentation/git-switch.txt)4
-rw-r--r--Documentation/git-symbolic-ref.adoc (renamed from Documentation/git-symbolic-ref.txt)0
-rw-r--r--Documentation/git-tag.adoc (renamed from Documentation/git-tag.txt)4
-rw-r--r--Documentation/git-tools.adoc (renamed from Documentation/git-tools.txt)0
-rw-r--r--Documentation/git-unpack-file.adoc (renamed from Documentation/git-unpack-file.txt)0
-rw-r--r--Documentation/git-unpack-objects.adoc (renamed from Documentation/git-unpack-objects.txt)0
-rw-r--r--Documentation/git-update-index.adoc (renamed from Documentation/git-update-index.txt)0
-rw-r--r--Documentation/git-update-ref.adoc (renamed from Documentation/git-update-ref.txt)0
-rw-r--r--Documentation/git-update-server-info.adoc (renamed from Documentation/git-update-server-info.txt)0
-rw-r--r--Documentation/git-upload-archive.adoc (renamed from Documentation/git-upload-archive.txt)0
-rw-r--r--Documentation/git-upload-pack.adoc (renamed from Documentation/git-upload-pack.txt)0
-rw-r--r--Documentation/git-var.adoc (renamed from Documentation/git-var.txt)0
-rw-r--r--Documentation/git-verify-commit.adoc (renamed from Documentation/git-verify-commit.txt)0
-rw-r--r--Documentation/git-verify-pack.adoc (renamed from Documentation/git-verify-pack.txt)0
-rw-r--r--Documentation/git-verify-tag.adoc (renamed from Documentation/git-verify-tag.txt)0
-rw-r--r--Documentation/git-version.adoc (renamed from Documentation/git-version.txt)0
-rw-r--r--Documentation/git-web--browse.adoc (renamed from Documentation/git-web--browse.txt)0
-rw-r--r--Documentation/git-whatchanged.adoc (renamed from Documentation/git-whatchanged.txt)0
-rw-r--r--Documentation/git-worktree.adoc (renamed from Documentation/git-worktree.txt)0
-rw-r--r--Documentation/git-write-tree.adoc (renamed from Documentation/git-write-tree.txt)0
-rw-r--r--Documentation/git.adoc (renamed from Documentation/git.txt)24
-rw-r--r--Documentation/gitattributes.adoc (renamed from Documentation/gitattributes.txt)0
-rw-r--r--Documentation/gitcli.adoc (renamed from Documentation/gitcli.txt)0
-rw-r--r--Documentation/gitcore-tutorial.adoc (renamed from Documentation/gitcore-tutorial.txt)0
-rw-r--r--Documentation/gitcredentials.adoc (renamed from Documentation/gitcredentials.txt)0
-rw-r--r--Documentation/gitcvs-migration.adoc (renamed from Documentation/gitcvs-migration.txt)0
-rw-r--r--Documentation/gitdiffcore.adoc (renamed from Documentation/gitdiffcore.txt)0
-rw-r--r--Documentation/giteveryday.adoc (renamed from Documentation/giteveryday.txt)0
-rw-r--r--Documentation/gitfaq.adoc (renamed from Documentation/gitfaq.txt)0
-rw-r--r--Documentation/gitformat-bundle.adoc (renamed from Documentation/gitformat-bundle.txt)0
-rw-r--r--Documentation/gitformat-chunk.adoc (renamed from Documentation/gitformat-chunk.txt)0
-rw-r--r--Documentation/gitformat-commit-graph.adoc (renamed from Documentation/gitformat-commit-graph.txt)0
-rw-r--r--Documentation/gitformat-index.adoc (renamed from Documentation/gitformat-index.txt)0
-rw-r--r--Documentation/gitformat-pack.adoc (renamed from Documentation/gitformat-pack.txt)0
-rw-r--r--Documentation/gitformat-signature.adoc (renamed from Documentation/gitformat-signature.txt)0
-rw-r--r--Documentation/gitglossary.adoc (renamed from Documentation/gitglossary.txt)2
-rw-r--r--Documentation/githooks.adoc (renamed from Documentation/githooks.txt)0
-rw-r--r--Documentation/gitignore.adoc (renamed from Documentation/gitignore.txt)0
-rw-r--r--Documentation/gitk.adoc (renamed from Documentation/gitk.txt)2
-rw-r--r--Documentation/gitmailmap.adoc (renamed from Documentation/gitmailmap.txt)0
-rw-r--r--Documentation/gitmodules.adoc (renamed from Documentation/gitmodules.txt)0
-rw-r--r--Documentation/gitnamespaces.adoc (renamed from Documentation/gitnamespaces.txt)2
-rw-r--r--Documentation/gitpacking.adoc (renamed from Documentation/gitpacking.txt)2
-rw-r--r--Documentation/gitprotocol-capabilities.adoc (renamed from Documentation/gitprotocol-capabilities.txt)0
-rw-r--r--Documentation/gitprotocol-common.adoc (renamed from Documentation/gitprotocol-common.txt)0
-rw-r--r--Documentation/gitprotocol-http.adoc (renamed from Documentation/gitprotocol-http.txt)0
-rw-r--r--Documentation/gitprotocol-pack.adoc (renamed from Documentation/gitprotocol-pack.txt)0
-rw-r--r--Documentation/gitprotocol-v2.adoc (renamed from Documentation/gitprotocol-v2.txt)0
-rw-r--r--Documentation/gitremote-helpers.adoc (renamed from Documentation/gitremote-helpers.txt)0
-rw-r--r--Documentation/gitrepository-layout.adoc (renamed from Documentation/gitrepository-layout.txt)9
-rw-r--r--Documentation/gitrevisions.adoc (renamed from Documentation/gitrevisions.txt)2
-rw-r--r--Documentation/gitsubmodules.adoc (renamed from Documentation/gitsubmodules.txt)0
-rw-r--r--Documentation/gittutorial-2.adoc (renamed from Documentation/gittutorial-2.txt)0
-rw-r--r--Documentation/gittutorial.adoc (renamed from Documentation/gittutorial.txt)0
-rw-r--r--Documentation/gitweb.adoc (renamed from Documentation/gitweb.txt)0
-rw-r--r--Documentation/gitweb.conf.adoc (renamed from Documentation/gitweb.conf.txt)0
-rw-r--r--Documentation/gitworkflows.adoc (renamed from Documentation/gitworkflows.txt)0
-rw-r--r--Documentation/glossary-content.adoc (renamed from Documentation/glossary-content.txt)0
-rw-r--r--Documentation/howto/coordinate-embargoed-releases.adoc (renamed from Documentation/howto/coordinate-embargoed-releases.txt)0
-rw-r--r--Documentation/howto/keep-canonical-history-correct.adoc (renamed from Documentation/howto/keep-canonical-history-correct.txt)0
-rw-r--r--Documentation/howto/maintain-git.adoc (renamed from Documentation/howto/maintain-git.txt)0
-rw-r--r--Documentation/howto/new-command.adoc (renamed from Documentation/howto/new-command.txt)0
-rw-r--r--Documentation/howto/rebase-from-internal-branch.adoc (renamed from Documentation/howto/rebase-from-internal-branch.txt)0
-rw-r--r--Documentation/howto/rebuild-from-update-hook.adoc (renamed from Documentation/howto/rebuild-from-update-hook.txt)0
-rw-r--r--Documentation/howto/recover-corrupted-blob-object.adoc (renamed from Documentation/howto/recover-corrupted-blob-object.txt)0
-rw-r--r--Documentation/howto/recover-corrupted-object-harder.adoc (renamed from Documentation/howto/recover-corrupted-object-harder.txt)0
-rw-r--r--Documentation/howto/revert-a-faulty-merge.adoc (renamed from Documentation/howto/revert-a-faulty-merge.txt)0
-rw-r--r--Documentation/howto/revert-branch-rebase.adoc (renamed from Documentation/howto/revert-branch-rebase.txt)0
-rw-r--r--Documentation/howto/separating-topic-branches.adoc (renamed from Documentation/howto/separating-topic-branches.txt)0
-rw-r--r--Documentation/howto/setup-git-server-over-http.adoc (renamed from Documentation/howto/setup-git-server-over-http.txt)0
-rw-r--r--Documentation/howto/update-hook-example.adoc (renamed from Documentation/howto/update-hook-example.txt)0
-rw-r--r--Documentation/howto/use-git-daemon.adoc (renamed from Documentation/howto/use-git-daemon.txt)0
-rw-r--r--Documentation/howto/using-merge-subtree.adoc (renamed from Documentation/howto/using-merge-subtree.txt)0
-rw-r--r--Documentation/howto/using-signed-tag-in-pull-request.adoc (renamed from Documentation/howto/using-signed-tag-in-pull-request.txt)0
-rw-r--r--Documentation/i18n.adoc (renamed from Documentation/i18n.txt)0
-rw-r--r--Documentation/includes/cmd-config-section-all.adoc (renamed from Documentation/includes/cmd-config-section-all.txt)0
-rw-r--r--Documentation/includes/cmd-config-section-rest.adoc (renamed from Documentation/includes/cmd-config-section-rest.txt)0
-rwxr-xr-xDocumentation/install-webdoc.sh16
-rw-r--r--Documentation/line-range-format.adoc (renamed from Documentation/line-range-format.txt)0
-rw-r--r--Documentation/line-range-options.adoc (renamed from Documentation/line-range-options.txt)2
-rwxr-xr-xDocumentation/lint-gitlink.perl4
-rwxr-xr-xDocumentation/lint-manpages.sh6
-rw-r--r--Documentation/merge-options.adoc (renamed from Documentation/merge-options.txt)2
-rw-r--r--Documentation/merge-strategies.adoc (renamed from Documentation/merge-strategies.txt)0
-rw-r--r--Documentation/mergetools/vimdiff.adoc (renamed from Documentation/mergetools/vimdiff.txt)0
-rw-r--r--Documentation/meson.build442
-rw-r--r--Documentation/object-format-disclaimer.adoc (renamed from Documentation/object-format-disclaimer.txt)0
-rw-r--r--Documentation/pretty-formats.adoc (renamed from Documentation/pretty-formats.txt)0
-rw-r--r--Documentation/pretty-options.adoc (renamed from Documentation/pretty-options.txt)0
-rw-r--r--Documentation/pull-fetch-param.adoc (renamed from Documentation/pull-fetch-param.txt)0
-rw-r--r--Documentation/ref-reachability-filters.adoc (renamed from Documentation/ref-reachability-filters.txt)0
-rw-r--r--Documentation/ref-storage-format.adoc (renamed from Documentation/ref-storage-format.txt)0
-rw-r--r--Documentation/rerere-options.adoc (renamed from Documentation/rerere-options.txt)0
-rw-r--r--Documentation/rev-list-description.adoc (renamed from Documentation/rev-list-description.txt)0
-rw-r--r--Documentation/rev-list-options.adoc (renamed from Documentation/rev-list-options.txt)2
-rw-r--r--Documentation/revisions.adoc (renamed from Documentation/revisions.txt)0
-rw-r--r--Documentation/scalar.adoc (renamed from Documentation/scalar.txt)0
-rw-r--r--Documentation/sequencer.adoc (renamed from Documentation/sequencer.txt)0
-rw-r--r--Documentation/signoff-option.adoc (renamed from Documentation/signoff-option.txt)0
-rw-r--r--Documentation/technical/.gitignore1
-rw-r--r--Documentation/technical/api-error-handling.adoc (renamed from Documentation/technical/api-error-handling.txt)0
-rw-r--r--Documentation/technical/api-index-skel.adoc (renamed from Documentation/technical/api-index-skel.txt)0
-rwxr-xr-xDocumentation/technical/api-index.sh8
-rw-r--r--Documentation/technical/api-merge.adoc (renamed from Documentation/technical/api-merge.txt)0
-rw-r--r--Documentation/technical/api-parse-options.adoc (renamed from Documentation/technical/api-parse-options.txt)0
-rw-r--r--Documentation/technical/api-path-walk.adoc (renamed from Documentation/technical/api-path-walk.txt)0
-rw-r--r--Documentation/technical/api-simple-ipc.adoc (renamed from Documentation/technical/api-simple-ipc.txt)0
-rw-r--r--Documentation/technical/api-trace2.adoc (renamed from Documentation/technical/api-trace2.txt)2
-rw-r--r--Documentation/technical/bitmap-format.adoc (renamed from Documentation/technical/bitmap-format.txt)0
-rw-r--r--Documentation/technical/build-systems.adoc (renamed from Documentation/technical/build-systems.txt)0
-rw-r--r--Documentation/technical/bundle-uri.adoc (renamed from Documentation/technical/bundle-uri.txt)0
-rw-r--r--Documentation/technical/commit-graph.adoc (renamed from Documentation/technical/commit-graph.txt)0
-rw-r--r--Documentation/technical/directory-rename-detection.adoc (renamed from Documentation/technical/directory-rename-detection.txt)0
-rw-r--r--Documentation/technical/hash-function-transition.adoc (renamed from Documentation/technical/hash-function-transition.txt)0
-rw-r--r--Documentation/technical/long-running-process-protocol.adoc (renamed from Documentation/technical/long-running-process-protocol.txt)0
-rw-r--r--Documentation/technical/multi-pack-index.adoc (renamed from Documentation/technical/multi-pack-index.txt)0
-rw-r--r--Documentation/technical/pack-heuristics.adoc (renamed from Documentation/technical/pack-heuristics.txt)0
-rw-r--r--Documentation/technical/packfile-uri.adoc (renamed from Documentation/technical/packfile-uri.txt)0
-rw-r--r--Documentation/technical/parallel-checkout.adoc (renamed from Documentation/technical/parallel-checkout.txt)0
-rw-r--r--Documentation/technical/partial-clone.adoc (renamed from Documentation/technical/partial-clone.txt)0
-rw-r--r--Documentation/technical/platform-support.adoc (renamed from Documentation/technical/platform-support.txt)0
-rw-r--r--Documentation/technical/racy-git.adoc (renamed from Documentation/technical/racy-git.txt)0
-rw-r--r--Documentation/technical/reftable.adoc (renamed from Documentation/technical/reftable.txt)0
-rw-r--r--Documentation/technical/remembering-renames.adoc (renamed from Documentation/technical/remembering-renames.txt)0
-rw-r--r--Documentation/technical/repository-version.adoc (renamed from Documentation/technical/repository-version.txt)0
-rw-r--r--Documentation/technical/rerere.adoc (renamed from Documentation/technical/rerere.txt)0
-rw-r--r--Documentation/technical/scalar.adoc (renamed from Documentation/technical/scalar.txt)0
-rw-r--r--Documentation/technical/send-pack-pipeline.adoc (renamed from Documentation/technical/send-pack-pipeline.txt)0
-rw-r--r--Documentation/technical/shallow.adoc (renamed from Documentation/technical/shallow.txt)0
-rw-r--r--Documentation/technical/sparse-checkout.adoc (renamed from Documentation/technical/sparse-checkout.txt)0
-rw-r--r--Documentation/technical/sparse-index.adoc (renamed from Documentation/technical/sparse-index.txt)0
-rw-r--r--Documentation/technical/trivial-merge.adoc (renamed from Documentation/technical/trivial-merge.txt)0
-rw-r--r--Documentation/technical/unit-tests.adoc (renamed from Documentation/technical/unit-tests.txt)0
-rw-r--r--Documentation/trace2-target-values.adoc (renamed from Documentation/trace2-target-values.txt)0
-rw-r--r--Documentation/transfer-data-leaks.adoc (renamed from Documentation/transfer-data-leaks.txt)0
-rw-r--r--Documentation/urls-remotes.adoc (renamed from Documentation/urls-remotes.txt)2
-rw-r--r--Documentation/urls.adoc (renamed from Documentation/urls.txt)0
-rw-r--r--Documentation/user-manual.adoc (renamed from Documentation/user-manual.txt)2
-rw-r--r--GIT-BUILD-OPTIONS.in1
-rwxr-xr-xGIT-VERSION-GEN50
-rw-r--r--Makefile93
l---------RelNotes2
-rw-r--r--apply.c3
-rw-r--r--archive-tar.c4
-rw-r--r--archive.c1
-rw-r--r--builtin/clone.c350
-rw-r--r--builtin/fast-import.c29
-rw-r--r--builtin/gc.c9
-rw-r--r--builtin/index-pack.c30
-rw-r--r--builtin/pack-objects.c75
-rw-r--r--builtin/patch-id.c14
-rw-r--r--builtin/push.c2
-rw-r--r--builtin/receive-pack.c20
-rw-r--r--builtin/remote.c4
-rw-r--r--builtin/repack.c14
-rw-r--r--builtin/replay.c7
-rw-r--r--builtin/unpack-objects.c13
-rw-r--r--bulk-checkin.c26
-rw-r--r--bundle.c4
-rw-r--r--bundle.h2
-rwxr-xr-xci/install-dependencies.sh10
-rwxr-xr-xci/lib.sh44
-rwxr-xr-xci/print-test-failures.sh5
-rwxr-xr-xci/run-build-and-tests.sh8
-rw-r--r--combine-diff.c80
-rw-r--r--common-exit.c26
-rw-r--r--common-init.c63
-rw-r--r--common-init.h6
-rw-r--r--common-main.c83
-rw-r--r--compat/zlib-compat.h53
-rw-r--r--compat/zlib-uncompress2.c96
-rw-r--r--config.c1
-rw-r--r--contrib/buildsystems/CMakeLists.txt1
-rw-r--r--contrib/libgit-rs/Cargo.lock77
-rw-r--r--contrib/libgit-rs/Cargo.toml17
-rw-r--r--contrib/libgit-rs/README.md13
-rw-r--r--contrib/libgit-rs/build.rs4
-rw-r--r--contrib/libgit-rs/src/config.rs106
-rw-r--r--contrib/libgit-rs/src/lib.rs1
-rw-r--r--contrib/libgit-rs/testdata/config12
-rw-r--r--contrib/libgit-rs/testdata/config22
-rw-r--r--contrib/libgit-rs/testdata/config32
-rw-r--r--contrib/libgit-sys/Cargo.lock69
-rw-r--r--contrib/libgit-sys/Cargo.toml19
-rw-r--r--contrib/libgit-sys/README.md4
-rw-r--r--contrib/libgit-sys/build.rs35
-rw-r--r--contrib/libgit-sys/public_symbol_export.c59
-rw-r--r--contrib/libgit-sys/public_symbol_export.h18
-rw-r--r--contrib/libgit-sys/src/lib.rs79
-rw-r--r--csum-file.c45
-rw-r--r--csum-file.h6
-rw-r--r--diff-lib.c36
-rw-r--r--diff.c34
-rw-r--r--diff.h20
-rw-r--r--environment.c1
-rw-r--r--fetch-pack.c4
-rwxr-xr-xgenerate-cmdlist.sh2
-rwxr-xr-xgenerate-configlist.sh2
-rwxr-xr-xgenerate-hooklist.sh2
-rw-r--r--git-compat-util.h12
-rw-r--r--git-zlib.c7
-rw-r--r--git-zlib.h2
-rw-r--r--git.c2
-rw-r--r--hash.h71
-rw-r--r--help.c48
-rw-r--r--http-push.c6
-rw-r--r--http.c6
-rw-r--r--http.h2
-rw-r--r--meson.build122
-rw-r--r--meson_options.txt10
-rw-r--r--midx-write.c4
-rw-r--r--object-file.c171
-rw-r--r--oss-fuzz/meson.build20
-rw-r--r--pack-check.c6
-rw-r--r--pack-objects.h28
-rw-r--r--pack-write.c100
-rw-r--r--pack.h30
-rw-r--r--parse-options.h9
-rw-r--r--read-cache.c26
-rw-r--r--refs.c7
-rw-r--r--refs/refs-internal.h1
-rw-r--r--refs/reftable-backend.c20
-rw-r--r--refspec.c213
-rw-r--r--refspec.h38
-rw-r--r--reftable/block.c1
-rw-r--r--reftable/system.h1
-rw-r--r--remote.c243
-rw-r--r--remote.h24
-rw-r--r--rerere.c18
-rw-r--r--scalar.c4
-rw-r--r--setup.c8
-rw-r--r--t/Makefile15
-rw-r--r--t/README4
-rw-r--r--t/helper/meson.build1
-rw-r--r--t/helper/test-hash-speed.c8
-rw-r--r--t/helper/test-hash.c10
-rw-r--r--t/helper/test-name-hash.c23
-rw-r--r--t/helper/test-sha1.c7
-rwxr-xr-xt/helper/test-sha1.sh38
-rw-r--r--t/helper/test-sha256.c2
-rw-r--r--t/helper/test-tool.c2
-rw-r--r--t/helper/test-tool.h4
-rw-r--r--t/meson.build9
-rwxr-xr-xt/perf/p5313-pack-objects.sh70
-rwxr-xr-xt/perf/p5314-name-hash.sh31
-rwxr-xr-xt/t0001-init.sh30
-rwxr-xr-xt/t0060-path-utils.sh10
-rw-r--r--t/t0450/txt-help-mismatches1
-rwxr-xr-xt/t1460-refs-migrate.sh12
-rwxr-xr-xt/t4100-apply-stat.sh13
-rwxr-xr-xt/t5300-pack-object.sh34
-rwxr-xr-xt/t5310-pack-bitmaps.sh35
-rwxr-xr-xt/t5323-pack-redundant.sh6
-rwxr-xr-xt/t5333-pseudo-merge-bitmaps.sh3
-rwxr-xr-xt/t5401-update-hooks.sh16
-rwxr-xr-xt/t5505-remote.sh6
-rwxr-xr-xt/t5510-fetch.sh20
-rwxr-xr-xt/t5515-fetch-merge-logic.sh47
-rwxr-xr-xt/t5516-fetch-push.sh14
-rwxr-xr-xt/t5621-clone-revision.sh122
-rwxr-xr-xt/t6020-bundle-misc.sh6
-rwxr-xr-xt/t6423-merge-rename-directories.sh9
-rwxr-xr-xt/t6500-gc.sh33
-rwxr-xr-xt/t7406-submodule-update.sh4
-rwxr-xr-xt/t7422-submodule-output.sh43
-rwxr-xr-xt/t7700-repack.sh16
-rwxr-xr-xt/t7701-repack-unpack-unreachable.sh16
-rwxr-xr-xt/t9003-help-autocorrect.sh17
-rw-r--r--t/test-lib-functions.sh26
-rw-r--r--t/test-lib.sh4
-rw-r--r--t/unit-tests/t-example-decorate.c74
-rw-r--r--t/unit-tests/t-strbuf.c122
-rw-r--r--t/unit-tests/t-strcmp-offset.c35
-rw-r--r--t/unit-tests/u-example-decorate.c64
-rw-r--r--t/unit-tests/u-hash.c6
-rw-r--r--t/unit-tests/u-hashmap.c (renamed from t/unit-tests/t-hashmap.c)226
-rw-r--r--t/unit-tests/u-strbuf.c119
-rw-r--r--t/unit-tests/u-strcmp-offset.c45
-rw-r--r--trace2/tr2_sid.c6
-rw-r--r--transport.c1
-rw-r--r--tree-diff.c152
-rw-r--r--unix-socket.c4
1067 files changed, 4144 insertions, 2508 deletions
diff --git a/.editorconfig b/.editorconfig
index 15d6cbeab1..a3c578a43c 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -4,7 +4,7 @@ insert_final_newline = true
# The settings for C (*.c and *.h) files are mirrored in .clang-format. Keep
# them in sync.
-[{*.{c,h,sh,perl,pl,pm,txt},config.mak.*,Makefile}]
+[{*.{c,h,sh,perl,pl,pm,txt,adoc},config.mak.*,Makefile}]
indent_style = tab
tab_width = 8
diff --git a/.gitattributes b/.gitattributes
index 158c3d45c4..43fa883a84 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -7,7 +7,7 @@
*.py text eol=lf diff=python
*.bat text eol=crlf
CODE_OF_CONDUCT.md -whitespace
-/Documentation/**/*.txt text eol=lf
+/Documentation/**/*.adoc text eol=lf
/command-list.txt text eol=lf
/GIT-VERSION-GEN text eol=lf
/mergetools/* text eol=lf
diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml
index 48341e81f4..124301dbbe 100644
--- a/.github/workflows/coverity.yml
+++ b/.github/workflows/coverity.yml
@@ -45,7 +45,7 @@ jobs:
- run: ci/install-dependencies.sh
if: contains(matrix.os, 'ubuntu') || contains(matrix.os, 'macos')
env:
- distro: ${{ matrix.os }}
+ CI_JOB_IMAGE: ${{ matrix.os }}
# The Coverity site says the tool is usually updated twice yearly, so the
# MD5 of download can be used to determine whether there's been an update.
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 900be9957a..5f756dfc2e 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -248,6 +248,58 @@ jobs:
with:
name: failed-tests-windows-vs-${{ matrix.nr }}
path: ${{env.FAILED_TEST_ARTIFACTS}}
+
+ windows-meson-build:
+ name: win+Meson build
+ needs: ci-config
+ if: needs.ci-config.outputs.enabled == 'yes'
+ runs-on: windows-latest
+ concurrency:
+ group: windows-meson-build-${{ github.ref }}
+ cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ - name: Set up dependencies
+ shell: pwsh
+ run: pip install meson ninja
+ - name: Setup
+ shell: pwsh
+ run: meson setup build -Dperl=disabled
+ - name: Compile
+ shell: pwsh
+ run: meson compile -C build
+ - name: Upload build artifacts
+ uses: actions/upload-artifact@v4
+ with:
+ name: windows-meson-artifacts
+ path: build
+ windows-meson-test:
+ name: win+Meson test
+ runs-on: windows-latest
+ needs: [ci-config, windows-meson-build]
+ strategy:
+ fail-fast: false
+ matrix:
+ nr: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
+ concurrency:
+ group: windows-meson-test-${{ matrix.nr }}-${{ github.ref }}
+ cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v5
+ - name: Set up dependencies
+ shell: pwsh
+ run: pip install meson ninja
+ - name: Download build artifacts
+ uses: actions/download-artifact@v4
+ with:
+ name: windows-meson-artifacts
+ path: build
+ - name: Test
+ shell: pwsh
+ run: meson test -C build --list | Select-Object -Skip 1 | Select-String .* | Group-Object -Property { $_.LineNumber % 10 } | Where-Object Name -EQ ${{ matrix.nr }} | ForEach-Object { meson test -C build --no-rebuild --print-errorlogs $_.Group }
+
regular:
name: ${{matrix.vector.jobname}} (${{matrix.vector.pool}})
needs: ci-config
@@ -259,20 +311,6 @@ jobs:
fail-fast: false
matrix:
vector:
- - jobname: linux-sha256
- cc: clang
- pool: ubuntu-latest
- - jobname: linux-reftable
- cc: clang
- pool: ubuntu-latest
- - jobname: linux-gcc
- cc: gcc
- cc_package: gcc-8
- pool: ubuntu-20.04
- - jobname: linux-TEST-vars
- cc: gcc
- cc_package: gcc-8
- pool: ubuntu-20.04
- jobname: osx-clang
cc: clang
pool: macos-13
@@ -285,26 +323,11 @@ jobs:
- jobname: osx-meson
cc: clang
pool: macos-13
- - jobname: linux-gcc-default
- cc: gcc
- pool: ubuntu-latest
- - jobname: linux-leaks
- cc: gcc
- pool: ubuntu-latest
- - jobname: linux-reftable-leaks
- cc: gcc
- pool: ubuntu-latest
- - jobname: linux-asan-ubsan
- cc: clang
- pool: ubuntu-latest
- - jobname: linux-meson
- cc: gcc
- pool: ubuntu-latest
env:
CC: ${{matrix.vector.cc}}
CC_PACKAGE: ${{matrix.vector.cc_package}}
jobname: ${{matrix.vector.jobname}}
- distro: ${{matrix.vector.pool}}
+ CI_JOB_IMAGE: ${{matrix.vector.pool}}
TEST_OUTPUT_DIRECTORY: ${{github.workspace}}/t
runs-on: ${{matrix.vector.pool}}
steps:
@@ -342,27 +365,48 @@ jobs:
fail-fast: false
matrix:
vector:
- - jobname: linux-musl
- image: alpine
- distro: alpine-latest
+ - jobname: linux-sha256
+ image: ubuntu:rolling
+ cc: clang
+ - jobname: linux-reftable
+ image: ubuntu:rolling
+ cc: clang
+ - jobname: linux-TEST-vars
+ image: ubuntu:20.04
+ cc: gcc
+ cc_package: gcc-8
+ - jobname: linux-breaking-changes
+ cc: gcc
+ image: ubuntu:rolling
+ - jobname: linux-leaks
+ image: ubuntu:rolling
+ cc: gcc
+ - jobname: linux-reftable-leaks
+ image: ubuntu:rolling
+ cc: gcc
+ - jobname: linux-asan-ubsan
+ image: ubuntu:rolling
+ cc: clang
+ - jobname: linux-meson
+ image: ubuntu:rolling
+ cc: gcc
+ - jobname: linux-musl-meson
+ image: alpine:latest
# Supported until 2025-04-02.
- jobname: linux32
image: i386/ubuntu:focal
- distro: ubuntu32-20.04
- jobname: pedantic
- image: fedora
- distro: fedora-latest
+ image: fedora:latest
# A RHEL 8 compatible distro. Supported until 2029-05-31.
- jobname: almalinux-8
image: almalinux:8
- distro: almalinux-8
# Supported until 2026-08-31.
- jobname: debian-11
image: debian:11
- distro: debian-11
env:
jobname: ${{matrix.vector.jobname}}
- distro: ${{matrix.vector.distro}}
+ CC: ${{matrix.vector.cc}}
+ CI_JOB_IMAGE: ${{matrix.vector.image}}
runs-on: ubuntu-latest
container: ${{matrix.vector.image}}
steps:
@@ -371,10 +415,12 @@ jobs:
run: apt -q update && apt -q -y install libc6-amd64 lib64stdc++6
- uses: actions/checkout@v4
- run: ci/install-dependencies.sh
- - run: ci/run-build-and-tests.sh
+ - run: useradd builder --create-home
+ - run: chown -R builder .
+ - run: sudo --preserve-env --set-home --user=builder ci/run-build-and-tests.sh
- name: print test failures
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
- run: ci/print-test-failures.sh
+ run: sudo --preserve-env --set-home --user=builder ci/print-test-failures.sh
- name: Upload failed tests' directories
if: failure() && env.FAILED_TEST_ARTIFACTS != ''
uses: actions/upload-artifact@v4
diff --git a/.gitignore b/.gitignore
index e82aa19df0..acdd8ce7c7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -250,3 +250,5 @@ Release/
/git.VC.db
*.dSYM
/contrib/buildsystems/out
+/contrib/libgit-rs/target
+/contrib/libgit-sys/target
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 9254e01583..3f29181708 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -36,41 +36,36 @@ test:linux:
fi
parallel:
matrix:
- - jobname: linux-old
- image: ubuntu:20.04
- CC: gcc
- jobname: linux-sha256
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: clang
- jobname: linux-reftable
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: clang
- - jobname: linux-gcc
+ - jobname: linux-breaking-changes
image: ubuntu:20.04
CC: gcc
- CC_PACKAGE: gcc-8
- jobname: linux-TEST-vars
image: ubuntu:20.04
CC: gcc
CC_PACKAGE: gcc-8
- - jobname: linux-gcc-default
- image: ubuntu:latest
- CC: gcc
- jobname: linux-leaks
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: gcc
- jobname: linux-reftable-leaks
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: gcc
- jobname: linux-asan-ubsan
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: clang
- jobname: pedantic
image: fedora:latest
- - jobname: linux-musl
+ - jobname: linux-musl-meson
image: alpine:latest
+ - jobname: linux32
+ image: i386/ubuntu:20.04
- jobname: linux-meson
- image: ubuntu:latest
+ image: ubuntu:rolling
CC: gcc
artifacts:
paths:
@@ -149,6 +144,44 @@ test:mingw64:
- git-sdk/usr/bin/bash.exe -l -c 'ci/print-test-failures.sh'
parallel: 10
+.msvc-meson:
+ tags:
+ - saas-windows-medium-amd64
+ before_script:
+ - choco install -y git meson ninja openssl
+ - Import-Module $env:ChocolateyInstall\helpers\chocolateyProfile.psm1
+ - refreshenv
+ # The certificate store for Python on Windows is broken and fails to fetch
+ # certificates, see https://bugs.python.org/issue36011. This seems to
+ # mostly be an issue with how the GitLab image is set up as it is a
+ # non-issue on GitHub Actions. Work around the issue by importing
+ # cetrificates manually.
+ - Invoke-WebRequest https://curl.haxx.se/ca/cacert.pem -OutFile cacert.pem
+ - openssl pkcs12 -export -nokeys -in cacert.pem -out certs.pfx -passout "pass:"
+ - Import-PfxCertificate -CertStoreLocation Cert:\LocalMachine\Root -FilePath certs.pfx
+
+build:msvc-meson:
+ extends: .msvc-meson
+ stage: build
+ script:
+ - meson setup build -Dperl=disabled
+ - meson compile -C build
+ artifacts:
+ paths:
+ - build
+
+test:msvc-meson:
+ extends: .msvc-meson
+ stage: test
+ when: manual
+ timeout: 6h
+ needs:
+ - job: "build:msvc-meson"
+ artifacts: true
+ script:
+ - meson test -C build --list | Select-Object -Skip 1 | Select-String .* | Group-Object -Property { $_.LineNumber % $Env:CI_NODE_TOTAL + 1 } | Where-Object Name -EQ $Env:CI_NODE_INDEX | ForEach-Object { meson test -C build --no-rebuild --print-errorlogs $_.Group }
+ parallel: 10
+
test:fuzz-smoke-tests:
image: ubuntu:latest
stage: test
@@ -183,7 +216,7 @@ check-whitespace:
# be defined in all pipelines.
script:
- |
- R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
+ R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA:-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
./ci/check-whitespace.sh "$R"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
@@ -203,7 +236,7 @@ check-style:
# be defined in all pipelines.
script:
- |
- R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
+ R=${CI_MERGE_REQUEST_TARGET_BRANCH_SHA:-${CI_MERGE_REQUEST_DIFF_BASE_SHA:?}} || exit
./ci/run-style-check.sh "$R"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
diff --git a/Documentation/.gitignore b/Documentation/.gitignore
index 9f4bb3c4bf..dd54cc768a 100644
--- a/Documentation/.gitignore
+++ b/Documentation/.gitignore
@@ -6,11 +6,11 @@
*.pdf
git.info
gitman.info
-howto-index.txt
+howto-index.adoc
doc.dep
-cmds-*.txt
-mergetools-*.txt
-SubmittingPatches.txt
+cmds-*.adoc
+mergetools-*.adoc
+SubmittingPatches.adoc
tmp-doc-diff/
tmp-meson-diff/
GIT-ASCIIDOCFLAGS
diff --git a/Documentation/BreakingChanges.txt b/Documentation/BreakingChanges.adoc
index 27acff86db..7c388e56c8 100644
--- a/Documentation/BreakingChanges.txt
+++ b/Documentation/BreakingChanges.adoc
@@ -154,6 +154,31 @@ Cf. <xmqq1rjuz6n3.fsf_-_@gitster.c.googlers.com>,
<CAKvOHKAFXQwt4D8yUCCkf_TQL79mYaJ=KAKhtpDNTvHJFuX1NA@mail.gmail.com>,
<20230323204047.GA9290@coredump.intra.peff.net>,
+* Support for storing shorthands for remote URLs in "$GIT_COMMON_DIR/branches/"
+ and "$GIT_COMMON_DIR/remotes/" has been long superseded by storing remotes in
+ the repository configuration.
++
+The mechanism has originally been introduced in f170e4b39d ([PATCH] fetch/pull:
+short-hand notation for remote repositories., 2005-07-16) and was superseded by
+6687f8fea2 ([PATCH] Use .git/remote/origin, not .git/branches/origin.,
+2005-08-20), where we switched from ".git/branches/" to ".git/remotes/". That
+commit already mentions an upcoming deprecation of the ".git/branches/"
+directory, and starting with a1d4aa7424 (Add repository-layout document.,
+2005-09-01) we have also marked this layout as deprecated. Eventually we also
+started to migrate away from ".git/remotes/" in favor of config-based remotes,
+and we have marked the directory as legacy in 3d3d282146 (Documentation:
+Grammar correction, wording fixes and cleanup, 2011-08-23)
++
+As our documentation mentions, these directories are not to be found in modern
+repositories at all and most users aren't even aware of these mechanisms. They
+have been deprecated for almost 20 years and 14 years respectively, and we are
+not aware of any active users that have complained about this deprecation.
+Furthermore, the ".git/branches/" directory is nowadays misleadingly named and
+may cause confusion as "branches" are almost exclusively used in the context of
+references.
++
+These features will be removed.
+
== Superseded features that will not be deprecated
Some features have gained newer replacements that aim to improve the design in
diff --git a/Documentation/DecisionMaking.txt b/Documentation/DecisionMaking.adoc
index b43c472ae5..b43c472ae5 100644
--- a/Documentation/DecisionMaking.txt
+++ b/Documentation/DecisionMaking.adoc
diff --git a/Documentation/Makefile b/Documentation/Makefile
index aedfe99d1d..a734c6d624 100644
--- a/Documentation/Makefile
+++ b/Documentation/Makefile
@@ -17,56 +17,56 @@ OBSOLETE_HTML =
-include GIT-EXCLUDED-PROGRAMS
MAN1_TXT += $(filter-out \
- $(patsubst %,%.txt,$(EXCLUDED_PROGRAMS)) \
- $(addsuffix .txt, $(ARTICLES) $(SP_ARTICLES)), \
- $(wildcard git-*.txt))
-MAN1_TXT += git.txt
-MAN1_TXT += gitk.txt
-MAN1_TXT += gitweb.txt
-MAN1_TXT += scalar.txt
+ $(patsubst %,%.adoc,$(EXCLUDED_PROGRAMS)) \
+ $(addsuffix .adoc, $(ARTICLES) $(SP_ARTICLES)), \
+ $(wildcard git-*.adoc))
+MAN1_TXT += git.adoc
+MAN1_TXT += gitk.adoc
+MAN1_TXT += gitweb.adoc
+MAN1_TXT += scalar.adoc
# man5 / man7 guides (note: new guides should also be added to command-list.txt)
-MAN5_TXT += gitattributes.txt
-MAN5_TXT += gitformat-bundle.txt
-MAN5_TXT += gitformat-chunk.txt
-MAN5_TXT += gitformat-commit-graph.txt
-MAN5_TXT += gitformat-index.txt
-MAN5_TXT += gitformat-pack.txt
-MAN5_TXT += gitformat-signature.txt
-MAN5_TXT += githooks.txt
-MAN5_TXT += gitignore.txt
-MAN5_TXT += gitmailmap.txt
-MAN5_TXT += gitmodules.txt
-MAN5_TXT += gitprotocol-capabilities.txt
-MAN5_TXT += gitprotocol-common.txt
-MAN5_TXT += gitprotocol-http.txt
-MAN5_TXT += gitprotocol-pack.txt
-MAN5_TXT += gitprotocol-v2.txt
-MAN5_TXT += gitrepository-layout.txt
-MAN5_TXT += gitweb.conf.txt
-
-MAN7_TXT += gitcli.txt
-MAN7_TXT += gitcore-tutorial.txt
-MAN7_TXT += gitcredentials.txt
-MAN7_TXT += gitcvs-migration.txt
-MAN7_TXT += gitdiffcore.txt
-MAN7_TXT += giteveryday.txt
-MAN7_TXT += gitfaq.txt
-MAN7_TXT += gitglossary.txt
-MAN7_TXT += gitpacking.txt
-MAN7_TXT += gitnamespaces.txt
-MAN7_TXT += gitremote-helpers.txt
-MAN7_TXT += gitrevisions.txt
-MAN7_TXT += gitsubmodules.txt
-MAN7_TXT += gittutorial-2.txt
-MAN7_TXT += gittutorial.txt
-MAN7_TXT += gitworkflows.txt
-
-HOWTO_TXT += $(wildcard howto/*.txt)
-
-DOC_DEP_TXT += $(wildcard *.txt)
-DOC_DEP_TXT += $(wildcard config/*.txt)
-DOC_DEP_TXT += $(wildcard includes/*.txt)
+MAN5_TXT += gitattributes.adoc
+MAN5_TXT += gitformat-bundle.adoc
+MAN5_TXT += gitformat-chunk.adoc
+MAN5_TXT += gitformat-commit-graph.adoc
+MAN5_TXT += gitformat-index.adoc
+MAN5_TXT += gitformat-pack.adoc
+MAN5_TXT += gitformat-signature.adoc
+MAN5_TXT += githooks.adoc
+MAN5_TXT += gitignore.adoc
+MAN5_TXT += gitmailmap.adoc
+MAN5_TXT += gitmodules.adoc
+MAN5_TXT += gitprotocol-capabilities.adoc
+MAN5_TXT += gitprotocol-common.adoc
+MAN5_TXT += gitprotocol-http.adoc
+MAN5_TXT += gitprotocol-pack.adoc
+MAN5_TXT += gitprotocol-v2.adoc
+MAN5_TXT += gitrepository-layout.adoc
+MAN5_TXT += gitweb.conf.adoc
+
+MAN7_TXT += gitcli.adoc
+MAN7_TXT += gitcore-tutorial.adoc
+MAN7_TXT += gitcredentials.adoc
+MAN7_TXT += gitcvs-migration.adoc
+MAN7_TXT += gitdiffcore.adoc
+MAN7_TXT += giteveryday.adoc
+MAN7_TXT += gitfaq.adoc
+MAN7_TXT += gitglossary.adoc
+MAN7_TXT += gitpacking.adoc
+MAN7_TXT += gitnamespaces.adoc
+MAN7_TXT += gitremote-helpers.adoc
+MAN7_TXT += gitrevisions.adoc
+MAN7_TXT += gitsubmodules.adoc
+MAN7_TXT += gittutorial-2.adoc
+MAN7_TXT += gittutorial.adoc
+MAN7_TXT += gitworkflows.adoc
+
+HOWTO_TXT += $(wildcard howto/*.adoc)
+
+DOC_DEP_TXT += $(wildcard *.adoc)
+DOC_DEP_TXT += $(wildcard config/*.adoc)
+DOC_DEP_TXT += $(wildcard includes/*.adoc)
ifdef MAN_FILTER
MAN_TXT = $(filter $(MAN_FILTER),$(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT))
@@ -75,8 +75,8 @@ MAN_TXT = $(MAN1_TXT) $(MAN5_TXT) $(MAN7_TXT)
MAN_FILTER = $(MAN_TXT)
endif
-MAN_XML = $(patsubst %.txt,%.xml,$(MAN_TXT))
-MAN_HTML = $(patsubst %.txt,%.html,$(MAN_TXT))
+MAN_XML = $(patsubst %.adoc,%.xml,$(MAN_TXT))
+MAN_HTML = $(patsubst %.adoc,%.html,$(MAN_TXT))
GIT_MAN_REF = master
OBSOLETE_HTML += everyday.html
@@ -103,7 +103,7 @@ SP_ARTICLES += howto/rebase-from-internal-branch
SP_ARTICLES += howto/keep-canonical-history-correct
SP_ARTICLES += howto/maintain-git
SP_ARTICLES += howto/coordinate-embargoed-releases
-API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt)))
+API_DOCS = $(patsubst %.adoc,%,$(filter-out technical/api-index-skel.adoc technical/api-index.adoc, $(wildcard technical/api-*.adoc)))
SP_ARTICLES += $(API_DOCS)
TECH_DOCS += DecisionMaking
@@ -136,9 +136,9 @@ ARTICLES_HTML += $(patsubst %,%.html,$(ARTICLES) $(SP_ARTICLES))
HTML_FILTER ?= $(ARTICLES_HTML) $(OBSOLETE_HTML)
DOC_HTML = $(MAN_HTML) $(filter $(HTML_FILTER),$(ARTICLES_HTML) $(OBSOLETE_HTML))
-DOC_MAN1 = $(patsubst %.txt,%.1,$(filter $(MAN_FILTER),$(MAN1_TXT)))
-DOC_MAN5 = $(patsubst %.txt,%.5,$(filter $(MAN_FILTER),$(MAN5_TXT)))
-DOC_MAN7 = $(patsubst %.txt,%.7,$(filter $(MAN_FILTER),$(MAN7_TXT)))
+DOC_MAN1 = $(patsubst %.adoc,%.1,$(filter $(MAN_FILTER),$(MAN1_TXT)))
+DOC_MAN5 = $(patsubst %.adoc,%.5,$(filter $(MAN_FILTER),$(MAN5_TXT)))
+DOC_MAN7 = $(patsubst %.adoc,%.7,$(filter $(MAN_FILTER),$(MAN7_TXT)))
prefix ?= $(HOME)
bindir ?= $(prefix)/bin
@@ -278,7 +278,7 @@ install-pdf: pdf
install-html: html
'$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir)
-mergetools_txt = mergetools-diff.txt mergetools-merge.txt
+mergetools_txt = mergetools-diff.adoc mergetools-merge.adoc
#
# Determine "include::" file references in asciidoc files.
@@ -294,18 +294,18 @@ ifneq ($(MAKECMDGOALS),clean)
-include doc.dep
endif
-cmds_txt = cmds-ancillaryinterrogators.txt \
- cmds-ancillarymanipulators.txt \
- cmds-mainporcelain.txt \
- cmds-plumbinginterrogators.txt \
- cmds-plumbingmanipulators.txt \
- cmds-synchingrepositories.txt \
- cmds-synchelpers.txt \
- cmds-guide.txt \
- cmds-developerinterfaces.txt \
- cmds-userinterfaces.txt \
- cmds-purehelpers.txt \
- cmds-foreignscminterface.txt
+cmds_txt = cmds-ancillaryinterrogators.adoc \
+ cmds-ancillarymanipulators.adoc \
+ cmds-mainporcelain.adoc \
+ cmds-plumbinginterrogators.adoc \
+ cmds-plumbingmanipulators.adoc \
+ cmds-synchingrepositories.adoc \
+ cmds-synchelpers.adoc \
+ cmds-guide.adoc \
+ cmds-developerinterfaces.adoc \
+ cmds-userinterfaces.adoc \
+ cmds-purehelpers.adoc \
+ cmds-foreignscminterface.adoc
$(cmds_txt): cmd-list.made
@@ -313,10 +313,10 @@ cmd-list.made: cmd-list.perl ../command-list.txt $(MAN1_TXT)
$(QUIET_GEN)$(PERL_PATH) ./cmd-list.perl .. . $(cmds_txt) && \
date >$@
-mergetools-%.txt: generate-mergetool-list.sh ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
-mergetools-diff.txt:
+mergetools-%.adoc: generate-mergetool-list.sh ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
+mergetools-diff.adoc:
$(QUIET_GEN)$(SHELL_PATH) ./generate-mergetool-list.sh .. diff $@
-mergetools-merge.txt:
+mergetools-merge.adoc:
$(QUIET_GEN)$(SHELL_PATH) ./generate-mergetool-list.sh .. merge $@
TRACK_ASCIIDOCFLAGS = $(subst ','\'',$(ASCIIDOC_COMMON):$(ASCIIDOC_HTML):$(ASCIIDOC_DOCBOOK))
@@ -333,9 +333,9 @@ clean:
$(RM) *.xml *.xml+ *.html *.html+ *.1 *.5 *.7
$(RM) *.texi *.texi+ *.texi++ git.info gitman.info
$(RM) *.pdf
- $(RM) howto-index.txt howto/*.html doc.dep
- $(RM) technical/*.html technical/api-index.txt
- $(RM) SubmittingPatches.txt
+ $(RM) howto-index.adoc howto/*.html doc.dep
+ $(RM) technical/*.html technical/api-index.adoc
+ $(RM) SubmittingPatches.adoc
$(RM) $(cmds_txt) $(mergetools_txt) *.made
$(RM) GIT-ASCIIDOCFLAGS
$(RM) asciidoc.conf asciidoctor-extensions.rb
@@ -344,10 +344,10 @@ clean:
docinfo.html: docinfo-html.in
$(QUIET_GEN)$(RM) $@ && cat $< >$@
-$(MAN_HTML): %.html : %.txt $(ASCIIDOC_DEPS)
+$(MAN_HTML): %.html : %.adoc $(ASCIIDOC_DEPS)
$(QUIET_ASCIIDOC)$(TXT_TO_HTML) -d manpage -o $@ $<
-$(OBSOLETE_HTML): %.html : %.txto $(ASCIIDOC_DEPS)
+$(OBSOLETE_HTML): %.html : %.adoco $(ASCIIDOC_DEPS)
$(QUIET_ASCIIDOC)$(TXT_TO_HTML) -o $@ $<
manpage-prereqs := $(wildcard manpage*.xsl)
@@ -360,22 +360,22 @@ manpage-cmd = $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $<
%.7 : %.xml $(manpage-prereqs)
$(manpage-cmd)
-%.xml : %.txt $(ASCIIDOC_DEPS)
+%.xml : %.adoc $(ASCIIDOC_DEPS)
$(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $<
-user-manual.xml: user-manual.txt $(ASCIIDOC_DEPS)
+user-manual.xml: user-manual.adoc $(ASCIIDOC_DEPS)
$(QUIET_ASCIIDOC)$(TXT_TO_XML) -d book -o $@ $<
-technical/api-index.txt: technical/api-index-skel.txt \
- technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS))
- $(QUIET_GEN)'$(SHELL_PATH_SQ)' technical/api-index.sh ./technical ./technical/api-index.txt
+technical/api-index.adoc: technical/api-index-skel.adoc \
+ technical/api-index.sh $(patsubst %,%.adoc,$(API_DOCS))
+ $(QUIET_GEN)'$(SHELL_PATH_SQ)' technical/api-index.sh ./technical ./technical/api-index.adoc
technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
-$(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.txt \
+$(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.adoc \
$(ASCIIDOC_DEPS)
- $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt
+ $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.adoc
-SubmittingPatches.txt: SubmittingPatches
+SubmittingPatches.adoc: SubmittingPatches
$(QUIET_GEN) cp $< $@
XSLT = docbook.xsl
@@ -409,19 +409,19 @@ gitman.texi: $(MAN_XML) cat-texi.perl texi.xsl
gitman.info: gitman.texi
$(QUIET_MAKEINFO)$(MAKEINFO) --no-split --no-validate $<
-$(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml
+$(patsubst %.adoc,%.texi,$(MAN_TXT)): %.texi : %.xml
$(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@
-howto-index.txt: howto/howto-index.sh $(HOWTO_TXT)
+howto-index.adoc: howto/howto-index.sh $(HOWTO_TXT)
$(QUIET_GEN)'$(SHELL_PATH_SQ)' ./howto/howto-index.sh $(sort $(HOWTO_TXT)) >$@
-$(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt $(ASCIIDOC_DEPS)
- $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt
+$(patsubst %,%.html,$(ARTICLES)) : %.html : %.adoc $(ASCIIDOC_DEPS)
+ $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.adoc
WEBDOC_DEST = /pub/software/scm/git/docs
howto/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../
-$(patsubst %.txt,%.html,$(HOWTO_TXT)): %.html : %.txt $(ASCIIDOC_DEPS)
+$(patsubst %.adoc,%.html,$(HOWTO_TXT)): %.html : %.adoc $(ASCIIDOC_DEPS)
$(QUIET_ASCIIDOC) \
sed -e '1,/^$$/d' $< | \
$(TXT_TO_HTML) - >$@
@@ -452,9 +452,9 @@ print-man1:
@for i in $(MAN1_TXT); do echo $$i; done
## Lint: gitlink
-LINT_DOCS_GITLINK = $(patsubst %.txt,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
+LINT_DOCS_GITLINK = $(patsubst %.adoc,.build/lint-docs/gitlink/%.ok,$(HOWTO_TXT) $(DOC_DEP_TXT))
$(LINT_DOCS_GITLINK): lint-gitlink.perl
-$(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
+$(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.adoc
$(call mkdir_p_parent_template)
$(QUIET_LINT_GITLINK)$(PERL_PATH) lint-gitlink.perl \
$< \
@@ -466,17 +466,17 @@ $(LINT_DOCS_GITLINK): .build/lint-docs/gitlink/%.ok: %.txt
lint-docs-gitlink: $(LINT_DOCS_GITLINK)
## Lint: man-end-blurb
-LINT_DOCS_MAN_END_BLURB = $(patsubst %.txt,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT))
+LINT_DOCS_MAN_END_BLURB = $(patsubst %.adoc,.build/lint-docs/man-end-blurb/%.ok,$(MAN_TXT))
$(LINT_DOCS_MAN_END_BLURB): lint-man-end-blurb.perl
-$(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.txt
+$(LINT_DOCS_MAN_END_BLURB): .build/lint-docs/man-end-blurb/%.ok: %.adoc
$(call mkdir_p_parent_template)
$(QUIET_LINT_MANEND)$(PERL_PATH) lint-man-end-blurb.perl $< >$@
.PHONY: lint-docs-man-end-blurb
## Lint: man-section-order
-LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.txt,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT))
+LINT_DOCS_MAN_SECTION_ORDER = $(patsubst %.adoc,.build/lint-docs/man-section-order/%.ok,$(MAN_TXT))
$(LINT_DOCS_MAN_SECTION_ORDER): lint-man-section-order.perl
-$(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.txt
+$(LINT_DOCS_MAN_SECTION_ORDER): .build/lint-docs/man-section-order/%.ok: %.adoc
$(call mkdir_p_parent_template)
$(QUIET_LINT_MANSEC)$(PERL_PATH) lint-man-section-order.perl $< >$@
.PHONY: lint-docs-man-section-order
@@ -485,10 +485,10 @@ lint-docs-man-section-order: $(LINT_DOCS_MAN_SECTION_ORDER)
.PHONY: lint-docs-fsck-msgids
LINT_DOCS_FSCK_MSGIDS = .build/lint-docs/fsck-msgids.ok
$(LINT_DOCS_FSCK_MSGIDS): lint-fsck-msgids.perl
-$(LINT_DOCS_FSCK_MSGIDS): ../fsck.h fsck-msgids.txt
+$(LINT_DOCS_FSCK_MSGIDS): ../fsck.h fsck-msgids.adoc
$(call mkdir_p_parent_template)
$(QUIET_GEN)$(PERL_PATH) lint-fsck-msgids.perl \
- ../fsck.h fsck-msgids.txt $@
+ ../fsck.h fsck-msgids.adoc $@
lint-docs-fsck-msgids: $(LINT_DOCS_FSCK_MSGIDS)
@@ -501,11 +501,11 @@ lint-docs-meson:
@mkdir -p tmp-meson-diff && \
awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \
grep -v -e '#' -e '^$$' | \
- sort >tmp-meson-diff/meson.txt && \
- ls git*.txt scalar.txt | grep -v -e git-bisect-lk2009.txt -e git-tools.txt >tmp-meson-diff/actual.txt && \
- if ! cmp tmp-meson-diff/meson.txt tmp-meson-diff/actual.txt; then \
+ sort >tmp-meson-diff/meson.adoc && \
+ ls git*.adoc scalar.adoc | grep -v -e git-bisect-lk2009.adoc -e git-tools.adoc >tmp-meson-diff/actual.adoc && \
+ if ! cmp tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; then \
echo "Meson man pages differ from actual man pages:"; \
- diff -u tmp-meson-diff/meson.txt tmp-meson-diff/actual.txt; \
+ diff -u tmp-meson-diff/meson.adoc tmp-meson-diff/actual.adoc; \
exit 1; \
fi
diff --git a/Documentation/MyFirstContribution.txt b/Documentation/MyFirstContribution.adoc
index e41654c00a..e41654c00a 100644
--- a/Documentation/MyFirstContribution.txt
+++ b/Documentation/MyFirstContribution.adoc
diff --git a/Documentation/MyFirstObjectWalk.txt b/Documentation/MyFirstObjectWalk.adoc
index dec8afe5b1..dec8afe5b1 100644
--- a/Documentation/MyFirstObjectWalk.txt
+++ b/Documentation/MyFirstObjectWalk.adoc
diff --git a/Documentation/RelNotes/1.5.0.1.txt b/Documentation/RelNotes/1.5.0.1.adoc
index fea3f9935b..fea3f9935b 100644
--- a/Documentation/RelNotes/1.5.0.1.txt
+++ b/Documentation/RelNotes/1.5.0.1.adoc
diff --git a/Documentation/RelNotes/1.5.0.2.txt b/Documentation/RelNotes/1.5.0.2.adoc
index b061e50ff0..b061e50ff0 100644
--- a/Documentation/RelNotes/1.5.0.2.txt
+++ b/Documentation/RelNotes/1.5.0.2.adoc
diff --git a/Documentation/RelNotes/1.5.0.3.txt b/Documentation/RelNotes/1.5.0.3.adoc
index cd500f96bf..cd500f96bf 100644
--- a/Documentation/RelNotes/1.5.0.3.txt
+++ b/Documentation/RelNotes/1.5.0.3.adoc
diff --git a/Documentation/RelNotes/1.5.0.4.txt b/Documentation/RelNotes/1.5.0.4.adoc
index feefa5dfd4..feefa5dfd4 100644
--- a/Documentation/RelNotes/1.5.0.4.txt
+++ b/Documentation/RelNotes/1.5.0.4.adoc
diff --git a/Documentation/RelNotes/1.5.0.5.txt b/Documentation/RelNotes/1.5.0.5.adoc
index eeec3d73d0..eeec3d73d0 100644
--- a/Documentation/RelNotes/1.5.0.5.txt
+++ b/Documentation/RelNotes/1.5.0.5.adoc
diff --git a/Documentation/RelNotes/1.5.0.6.txt b/Documentation/RelNotes/1.5.0.6.adoc
index c02015ad5f..c02015ad5f 100644
--- a/Documentation/RelNotes/1.5.0.6.txt
+++ b/Documentation/RelNotes/1.5.0.6.adoc
diff --git a/Documentation/RelNotes/1.5.0.7.txt b/Documentation/RelNotes/1.5.0.7.adoc
index 670ad32b85..670ad32b85 100644
--- a/Documentation/RelNotes/1.5.0.7.txt
+++ b/Documentation/RelNotes/1.5.0.7.adoc
diff --git a/Documentation/RelNotes/1.5.0.txt b/Documentation/RelNotes/1.5.0.adoc
index d6d42f3183..d6d42f3183 100644
--- a/Documentation/RelNotes/1.5.0.txt
+++ b/Documentation/RelNotes/1.5.0.adoc
diff --git a/Documentation/RelNotes/1.5.1.1.txt b/Documentation/RelNotes/1.5.1.1.adoc
index 91471213bd..91471213bd 100644
--- a/Documentation/RelNotes/1.5.1.1.txt
+++ b/Documentation/RelNotes/1.5.1.1.adoc
diff --git a/Documentation/RelNotes/1.5.1.2.txt b/Documentation/RelNotes/1.5.1.2.adoc
index d88456306c..d88456306c 100644
--- a/Documentation/RelNotes/1.5.1.2.txt
+++ b/Documentation/RelNotes/1.5.1.2.adoc
diff --git a/Documentation/RelNotes/1.5.1.3.txt b/Documentation/RelNotes/1.5.1.3.adoc
index 876408b65a..876408b65a 100644
--- a/Documentation/RelNotes/1.5.1.3.txt
+++ b/Documentation/RelNotes/1.5.1.3.adoc
diff --git a/Documentation/RelNotes/1.5.1.4.txt b/Documentation/RelNotes/1.5.1.4.adoc
index df2f66ccb5..df2f66ccb5 100644
--- a/Documentation/RelNotes/1.5.1.4.txt
+++ b/Documentation/RelNotes/1.5.1.4.adoc
diff --git a/Documentation/RelNotes/1.5.1.5.txt b/Documentation/RelNotes/1.5.1.5.adoc
index b0ab8eb371..b0ab8eb371 100644
--- a/Documentation/RelNotes/1.5.1.5.txt
+++ b/Documentation/RelNotes/1.5.1.5.adoc
diff --git a/Documentation/RelNotes/1.5.1.6.txt b/Documentation/RelNotes/1.5.1.6.adoc
index 55f3ac13e3..55f3ac13e3 100644
--- a/Documentation/RelNotes/1.5.1.6.txt
+++ b/Documentation/RelNotes/1.5.1.6.adoc
diff --git a/Documentation/RelNotes/1.5.1.txt b/Documentation/RelNotes/1.5.1.adoc
index daed367270..daed367270 100644
--- a/Documentation/RelNotes/1.5.1.txt
+++ b/Documentation/RelNotes/1.5.1.adoc
diff --git a/Documentation/RelNotes/1.5.2.1.txt b/Documentation/RelNotes/1.5.2.1.adoc
index d41984df0b..d41984df0b 100644
--- a/Documentation/RelNotes/1.5.2.1.txt
+++ b/Documentation/RelNotes/1.5.2.1.adoc
diff --git a/Documentation/RelNotes/1.5.2.2.txt b/Documentation/RelNotes/1.5.2.2.adoc
index 7bfa341750..7bfa341750 100644
--- a/Documentation/RelNotes/1.5.2.2.txt
+++ b/Documentation/RelNotes/1.5.2.2.adoc
diff --git a/Documentation/RelNotes/1.5.2.3.txt b/Documentation/RelNotes/1.5.2.3.adoc
index addb22955b..addb22955b 100644
--- a/Documentation/RelNotes/1.5.2.3.txt
+++ b/Documentation/RelNotes/1.5.2.3.adoc
diff --git a/Documentation/RelNotes/1.5.2.4.txt b/Documentation/RelNotes/1.5.2.4.adoc
index 75cff475f6..75cff475f6 100644
--- a/Documentation/RelNotes/1.5.2.4.txt
+++ b/Documentation/RelNotes/1.5.2.4.adoc
diff --git a/Documentation/RelNotes/1.5.2.5.txt b/Documentation/RelNotes/1.5.2.5.adoc
index e8281c72a0..e8281c72a0 100644
--- a/Documentation/RelNotes/1.5.2.5.txt
+++ b/Documentation/RelNotes/1.5.2.5.adoc
diff --git a/Documentation/RelNotes/1.5.2.txt b/Documentation/RelNotes/1.5.2.adoc
index e8328d090a..e8328d090a 100644
--- a/Documentation/RelNotes/1.5.2.txt
+++ b/Documentation/RelNotes/1.5.2.adoc
diff --git a/Documentation/RelNotes/1.5.3.1.txt b/Documentation/RelNotes/1.5.3.1.adoc
index 7ff546c743..7ff546c743 100644
--- a/Documentation/RelNotes/1.5.3.1.txt
+++ b/Documentation/RelNotes/1.5.3.1.adoc
diff --git a/Documentation/RelNotes/1.5.3.2.txt b/Documentation/RelNotes/1.5.3.2.adoc
index 4bbde3cab4..4bbde3cab4 100644
--- a/Documentation/RelNotes/1.5.3.2.txt
+++ b/Documentation/RelNotes/1.5.3.2.adoc
diff --git a/Documentation/RelNotes/1.5.3.3.txt b/Documentation/RelNotes/1.5.3.3.adoc
index d213846951..d213846951 100644
--- a/Documentation/RelNotes/1.5.3.3.txt
+++ b/Documentation/RelNotes/1.5.3.3.adoc
diff --git a/Documentation/RelNotes/1.5.3.4.txt b/Documentation/RelNotes/1.5.3.4.adoc
index b04b3a45a5..b04b3a45a5 100644
--- a/Documentation/RelNotes/1.5.3.4.txt
+++ b/Documentation/RelNotes/1.5.3.4.adoc
diff --git a/Documentation/RelNotes/1.5.3.5.txt b/Documentation/RelNotes/1.5.3.5.adoc
index 7ff1d5d0d1..7ff1d5d0d1 100644
--- a/Documentation/RelNotes/1.5.3.5.txt
+++ b/Documentation/RelNotes/1.5.3.5.adoc
diff --git a/Documentation/RelNotes/1.5.3.6.txt b/Documentation/RelNotes/1.5.3.6.adoc
index 069a2b2cf9..069a2b2cf9 100644
--- a/Documentation/RelNotes/1.5.3.6.txt
+++ b/Documentation/RelNotes/1.5.3.6.adoc
diff --git a/Documentation/RelNotes/1.5.3.7.txt b/Documentation/RelNotes/1.5.3.7.adoc
index 2f690616c8..2f690616c8 100644
--- a/Documentation/RelNotes/1.5.3.7.txt
+++ b/Documentation/RelNotes/1.5.3.7.adoc
diff --git a/Documentation/RelNotes/1.5.3.8.txt b/Documentation/RelNotes/1.5.3.8.adoc
index 0e3ff58a46..0e3ff58a46 100644
--- a/Documentation/RelNotes/1.5.3.8.txt
+++ b/Documentation/RelNotes/1.5.3.8.adoc
diff --git a/Documentation/RelNotes/1.5.3.txt b/Documentation/RelNotes/1.5.3.adoc
index 0668d3c0ca..0668d3c0ca 100644
--- a/Documentation/RelNotes/1.5.3.txt
+++ b/Documentation/RelNotes/1.5.3.adoc
diff --git a/Documentation/RelNotes/1.5.4.1.txt b/Documentation/RelNotes/1.5.4.1.adoc
index d4e44b8b09..d4e44b8b09 100644
--- a/Documentation/RelNotes/1.5.4.1.txt
+++ b/Documentation/RelNotes/1.5.4.1.adoc
diff --git a/Documentation/RelNotes/1.5.4.2.txt b/Documentation/RelNotes/1.5.4.2.adoc
index 21d0df59fb..21d0df59fb 100644
--- a/Documentation/RelNotes/1.5.4.2.txt
+++ b/Documentation/RelNotes/1.5.4.2.adoc
diff --git a/Documentation/RelNotes/1.5.4.3.txt b/Documentation/RelNotes/1.5.4.3.adoc
index b0fc67fb2a..b0fc67fb2a 100644
--- a/Documentation/RelNotes/1.5.4.3.txt
+++ b/Documentation/RelNotes/1.5.4.3.adoc
diff --git a/Documentation/RelNotes/1.5.4.4.txt b/Documentation/RelNotes/1.5.4.4.adoc
index 323c1a88c7..323c1a88c7 100644
--- a/Documentation/RelNotes/1.5.4.4.txt
+++ b/Documentation/RelNotes/1.5.4.4.adoc
diff --git a/Documentation/RelNotes/1.5.4.5.txt b/Documentation/RelNotes/1.5.4.5.adoc
index bbd130e36d..bbd130e36d 100644
--- a/Documentation/RelNotes/1.5.4.5.txt
+++ b/Documentation/RelNotes/1.5.4.5.adoc
diff --git a/Documentation/RelNotes/1.5.4.6.txt b/Documentation/RelNotes/1.5.4.6.adoc
index 3e3c3e55a3..3e3c3e55a3 100644
--- a/Documentation/RelNotes/1.5.4.6.txt
+++ b/Documentation/RelNotes/1.5.4.6.adoc
diff --git a/Documentation/RelNotes/1.5.4.7.txt b/Documentation/RelNotes/1.5.4.7.adoc
index 9065a0e273..9065a0e273 100644
--- a/Documentation/RelNotes/1.5.4.7.txt
+++ b/Documentation/RelNotes/1.5.4.7.adoc
diff --git a/Documentation/RelNotes/1.5.4.txt b/Documentation/RelNotes/1.5.4.adoc
index f1323b6174..f1323b6174 100644
--- a/Documentation/RelNotes/1.5.4.txt
+++ b/Documentation/RelNotes/1.5.4.adoc
diff --git a/Documentation/RelNotes/1.5.5.1.txt b/Documentation/RelNotes/1.5.5.1.adoc
index 7de419708f..7de419708f 100644
--- a/Documentation/RelNotes/1.5.5.1.txt
+++ b/Documentation/RelNotes/1.5.5.1.adoc
diff --git a/Documentation/RelNotes/1.5.5.2.txt b/Documentation/RelNotes/1.5.5.2.adoc
index 391a7b02ea..391a7b02ea 100644
--- a/Documentation/RelNotes/1.5.5.2.txt
+++ b/Documentation/RelNotes/1.5.5.2.adoc
diff --git a/Documentation/RelNotes/1.5.5.3.txt b/Documentation/RelNotes/1.5.5.3.adoc
index f22f98b734..f22f98b734 100644
--- a/Documentation/RelNotes/1.5.5.3.txt
+++ b/Documentation/RelNotes/1.5.5.3.adoc
diff --git a/Documentation/RelNotes/1.5.5.4.txt b/Documentation/RelNotes/1.5.5.4.adoc
index 2d0279ecce..2d0279ecce 100644
--- a/Documentation/RelNotes/1.5.5.4.txt
+++ b/Documentation/RelNotes/1.5.5.4.adoc
diff --git a/Documentation/RelNotes/1.5.5.5.txt b/Documentation/RelNotes/1.5.5.5.adoc
index 30fa3615c7..30fa3615c7 100644
--- a/Documentation/RelNotes/1.5.5.5.txt
+++ b/Documentation/RelNotes/1.5.5.5.adoc
diff --git a/Documentation/RelNotes/1.5.5.6.txt b/Documentation/RelNotes/1.5.5.6.adoc
index d5e85cb70e..d5e85cb70e 100644
--- a/Documentation/RelNotes/1.5.5.6.txt
+++ b/Documentation/RelNotes/1.5.5.6.adoc
diff --git a/Documentation/RelNotes/1.5.5.txt b/Documentation/RelNotes/1.5.5.adoc
index 2932212488..2932212488 100644
--- a/Documentation/RelNotes/1.5.5.txt
+++ b/Documentation/RelNotes/1.5.5.adoc
diff --git a/Documentation/RelNotes/1.5.6.1.txt b/Documentation/RelNotes/1.5.6.1.adoc
index 4864b16445..4864b16445 100644
--- a/Documentation/RelNotes/1.5.6.1.txt
+++ b/Documentation/RelNotes/1.5.6.1.adoc
diff --git a/Documentation/RelNotes/1.5.6.2.txt b/Documentation/RelNotes/1.5.6.2.adoc
index 5902a85a78..5902a85a78 100644
--- a/Documentation/RelNotes/1.5.6.2.txt
+++ b/Documentation/RelNotes/1.5.6.2.adoc
diff --git a/Documentation/RelNotes/1.5.6.3.txt b/Documentation/RelNotes/1.5.6.3.adoc
index f61dd3504a..f61dd3504a 100644
--- a/Documentation/RelNotes/1.5.6.3.txt
+++ b/Documentation/RelNotes/1.5.6.3.adoc
diff --git a/Documentation/RelNotes/1.5.6.4.txt b/Documentation/RelNotes/1.5.6.4.adoc
index d8968f1ecb..d8968f1ecb 100644
--- a/Documentation/RelNotes/1.5.6.4.txt
+++ b/Documentation/RelNotes/1.5.6.4.adoc
diff --git a/Documentation/RelNotes/1.5.6.5.txt b/Documentation/RelNotes/1.5.6.5.adoc
index 47ca172462..47ca172462 100644
--- a/Documentation/RelNotes/1.5.6.5.txt
+++ b/Documentation/RelNotes/1.5.6.5.adoc
diff --git a/Documentation/RelNotes/1.5.6.6.txt b/Documentation/RelNotes/1.5.6.6.adoc
index 79da23db5a..79da23db5a 100644
--- a/Documentation/RelNotes/1.5.6.6.txt
+++ b/Documentation/RelNotes/1.5.6.6.adoc
diff --git a/Documentation/RelNotes/1.5.6.txt b/Documentation/RelNotes/1.5.6.adoc
index e143d8d61b..e143d8d61b 100644
--- a/Documentation/RelNotes/1.5.6.txt
+++ b/Documentation/RelNotes/1.5.6.adoc
diff --git a/Documentation/RelNotes/1.6.0.1.txt b/Documentation/RelNotes/1.6.0.1.adoc
index 49d7a1cafa..49d7a1cafa 100644
--- a/Documentation/RelNotes/1.6.0.1.txt
+++ b/Documentation/RelNotes/1.6.0.1.adoc
diff --git a/Documentation/RelNotes/1.6.0.2.txt b/Documentation/RelNotes/1.6.0.2.adoc
index 7d8fb85e1b..7d8fb85e1b 100644
--- a/Documentation/RelNotes/1.6.0.2.txt
+++ b/Documentation/RelNotes/1.6.0.2.adoc
diff --git a/Documentation/RelNotes/1.6.0.3.txt b/Documentation/RelNotes/1.6.0.3.adoc
index ad36c0f0b7..ad36c0f0b7 100644
--- a/Documentation/RelNotes/1.6.0.3.txt
+++ b/Documentation/RelNotes/1.6.0.3.adoc
diff --git a/Documentation/RelNotes/1.6.0.4.txt b/Documentation/RelNotes/1.6.0.4.adoc
index d522661d31..d522661d31 100644
--- a/Documentation/RelNotes/1.6.0.4.txt
+++ b/Documentation/RelNotes/1.6.0.4.adoc
diff --git a/Documentation/RelNotes/1.6.0.5.txt b/Documentation/RelNotes/1.6.0.5.adoc
index a08bb96738..a08bb96738 100644
--- a/Documentation/RelNotes/1.6.0.5.txt
+++ b/Documentation/RelNotes/1.6.0.5.adoc
diff --git a/Documentation/RelNotes/1.6.0.6.txt b/Documentation/RelNotes/1.6.0.6.adoc
index 64ece1ffd5..64ece1ffd5 100644
--- a/Documentation/RelNotes/1.6.0.6.txt
+++ b/Documentation/RelNotes/1.6.0.6.adoc
diff --git a/Documentation/RelNotes/1.6.0.txt b/Documentation/RelNotes/1.6.0.adoc
index de7ef166b6..de7ef166b6 100644
--- a/Documentation/RelNotes/1.6.0.txt
+++ b/Documentation/RelNotes/1.6.0.adoc
diff --git a/Documentation/RelNotes/1.6.1.1.txt b/Documentation/RelNotes/1.6.1.1.adoc
index 8c594ba02f..8c594ba02f 100644
--- a/Documentation/RelNotes/1.6.1.1.txt
+++ b/Documentation/RelNotes/1.6.1.1.adoc
diff --git a/Documentation/RelNotes/1.6.1.2.txt b/Documentation/RelNotes/1.6.1.2.adoc
index be37cbb858..be37cbb858 100644
--- a/Documentation/RelNotes/1.6.1.2.txt
+++ b/Documentation/RelNotes/1.6.1.2.adoc
diff --git a/Documentation/RelNotes/1.6.1.3.txt b/Documentation/RelNotes/1.6.1.3.adoc
index cd08d8174e..cd08d8174e 100644
--- a/Documentation/RelNotes/1.6.1.3.txt
+++ b/Documentation/RelNotes/1.6.1.3.adoc
diff --git a/Documentation/RelNotes/1.6.1.4.txt b/Documentation/RelNotes/1.6.1.4.adoc
index ccbad794c0..ccbad794c0 100644
--- a/Documentation/RelNotes/1.6.1.4.txt
+++ b/Documentation/RelNotes/1.6.1.4.adoc
diff --git a/Documentation/RelNotes/1.6.1.txt b/Documentation/RelNotes/1.6.1.adoc
index 7b152a6fdc..7b152a6fdc 100644
--- a/Documentation/RelNotes/1.6.1.txt
+++ b/Documentation/RelNotes/1.6.1.adoc
diff --git a/Documentation/RelNotes/1.6.2.1.txt b/Documentation/RelNotes/1.6.2.1.adoc
index dfa36416af..dfa36416af 100644
--- a/Documentation/RelNotes/1.6.2.1.txt
+++ b/Documentation/RelNotes/1.6.2.1.adoc
diff --git a/Documentation/RelNotes/1.6.2.2.txt b/Documentation/RelNotes/1.6.2.2.adoc
index fafa9986b0..fafa9986b0 100644
--- a/Documentation/RelNotes/1.6.2.2.txt
+++ b/Documentation/RelNotes/1.6.2.2.adoc
diff --git a/Documentation/RelNotes/1.6.2.3.txt b/Documentation/RelNotes/1.6.2.3.adoc
index 4d3c1ac91c..4d3c1ac91c 100644
--- a/Documentation/RelNotes/1.6.2.3.txt
+++ b/Documentation/RelNotes/1.6.2.3.adoc
diff --git a/Documentation/RelNotes/1.6.2.4.txt b/Documentation/RelNotes/1.6.2.4.adoc
index f4bf1d0986..f4bf1d0986 100644
--- a/Documentation/RelNotes/1.6.2.4.txt
+++ b/Documentation/RelNotes/1.6.2.4.adoc
diff --git a/Documentation/RelNotes/1.6.2.5.txt b/Documentation/RelNotes/1.6.2.5.adoc
index b23f9e95d1..b23f9e95d1 100644
--- a/Documentation/RelNotes/1.6.2.5.txt
+++ b/Documentation/RelNotes/1.6.2.5.adoc
diff --git a/Documentation/RelNotes/1.6.2.txt b/Documentation/RelNotes/1.6.2.adoc
index 166d73c60f..166d73c60f 100644
--- a/Documentation/RelNotes/1.6.2.txt
+++ b/Documentation/RelNotes/1.6.2.adoc
diff --git a/Documentation/RelNotes/1.6.3.1.txt b/Documentation/RelNotes/1.6.3.1.adoc
index 2400b72ef7..2400b72ef7 100644
--- a/Documentation/RelNotes/1.6.3.1.txt
+++ b/Documentation/RelNotes/1.6.3.1.adoc
diff --git a/Documentation/RelNotes/1.6.3.2.txt b/Documentation/RelNotes/1.6.3.2.adoc
index b2f3f0293c..b2f3f0293c 100644
--- a/Documentation/RelNotes/1.6.3.2.txt
+++ b/Documentation/RelNotes/1.6.3.2.adoc
diff --git a/Documentation/RelNotes/1.6.3.3.txt b/Documentation/RelNotes/1.6.3.3.adoc
index 1c28398bb6..1c28398bb6 100644
--- a/Documentation/RelNotes/1.6.3.3.txt
+++ b/Documentation/RelNotes/1.6.3.3.adoc
diff --git a/Documentation/RelNotes/1.6.3.4.txt b/Documentation/RelNotes/1.6.3.4.adoc
index cad461bc76..cad461bc76 100644
--- a/Documentation/RelNotes/1.6.3.4.txt
+++ b/Documentation/RelNotes/1.6.3.4.adoc
diff --git a/Documentation/RelNotes/1.6.3.txt b/Documentation/RelNotes/1.6.3.adoc
index bbf177fc3c..bbf177fc3c 100644
--- a/Documentation/RelNotes/1.6.3.txt
+++ b/Documentation/RelNotes/1.6.3.adoc
diff --git a/Documentation/RelNotes/1.6.4.1.txt b/Documentation/RelNotes/1.6.4.1.adoc
index e439e45b96..e439e45b96 100644
--- a/Documentation/RelNotes/1.6.4.1.txt
+++ b/Documentation/RelNotes/1.6.4.1.adoc
diff --git a/Documentation/RelNotes/1.6.4.2.txt b/Documentation/RelNotes/1.6.4.2.adoc
index c11ec0115c..c11ec0115c 100644
--- a/Documentation/RelNotes/1.6.4.2.txt
+++ b/Documentation/RelNotes/1.6.4.2.adoc
diff --git a/Documentation/RelNotes/1.6.4.3.txt b/Documentation/RelNotes/1.6.4.3.adoc
index 5643e6537d..5643e6537d 100644
--- a/Documentation/RelNotes/1.6.4.3.txt
+++ b/Documentation/RelNotes/1.6.4.3.adoc
diff --git a/Documentation/RelNotes/1.6.4.4.txt b/Documentation/RelNotes/1.6.4.4.adoc
index 0ead45fc72..0ead45fc72 100644
--- a/Documentation/RelNotes/1.6.4.4.txt
+++ b/Documentation/RelNotes/1.6.4.4.adoc
diff --git a/Documentation/RelNotes/1.6.4.5.txt b/Documentation/RelNotes/1.6.4.5.adoc
index eb6307dcbb..eb6307dcbb 100644
--- a/Documentation/RelNotes/1.6.4.5.txt
+++ b/Documentation/RelNotes/1.6.4.5.adoc
diff --git a/Documentation/RelNotes/1.6.4.txt b/Documentation/RelNotes/1.6.4.adoc
index 0fccfb0bf0..0fccfb0bf0 100644
--- a/Documentation/RelNotes/1.6.4.txt
+++ b/Documentation/RelNotes/1.6.4.adoc
diff --git a/Documentation/RelNotes/1.6.5.1.txt b/Documentation/RelNotes/1.6.5.1.adoc
index 309ba181b2..309ba181b2 100644
--- a/Documentation/RelNotes/1.6.5.1.txt
+++ b/Documentation/RelNotes/1.6.5.1.adoc
diff --git a/Documentation/RelNotes/1.6.5.2.txt b/Documentation/RelNotes/1.6.5.2.adoc
index aa7ccce3a2..aa7ccce3a2 100644
--- a/Documentation/RelNotes/1.6.5.2.txt
+++ b/Documentation/RelNotes/1.6.5.2.adoc
diff --git a/Documentation/RelNotes/1.6.5.3.txt b/Documentation/RelNotes/1.6.5.3.adoc
index b2fad1b22e..b2fad1b22e 100644
--- a/Documentation/RelNotes/1.6.5.3.txt
+++ b/Documentation/RelNotes/1.6.5.3.adoc
diff --git a/Documentation/RelNotes/1.6.5.4.txt b/Documentation/RelNotes/1.6.5.4.adoc
index 344333de66..344333de66 100644
--- a/Documentation/RelNotes/1.6.5.4.txt
+++ b/Documentation/RelNotes/1.6.5.4.adoc
diff --git a/Documentation/RelNotes/1.6.5.5.txt b/Documentation/RelNotes/1.6.5.5.adoc
index ecfc57d875..ecfc57d875 100644
--- a/Documentation/RelNotes/1.6.5.5.txt
+++ b/Documentation/RelNotes/1.6.5.5.adoc
diff --git a/Documentation/RelNotes/1.6.5.6.txt b/Documentation/RelNotes/1.6.5.6.adoc
index a9eaf76f62..a9eaf76f62 100644
--- a/Documentation/RelNotes/1.6.5.6.txt
+++ b/Documentation/RelNotes/1.6.5.6.adoc
diff --git a/Documentation/RelNotes/1.6.5.7.txt b/Documentation/RelNotes/1.6.5.7.adoc
index dc5302c21c..dc5302c21c 100644
--- a/Documentation/RelNotes/1.6.5.7.txt
+++ b/Documentation/RelNotes/1.6.5.7.adoc
diff --git a/Documentation/RelNotes/1.6.5.8.txt b/Documentation/RelNotes/1.6.5.8.adoc
index 8b24bebb96..8b24bebb96 100644
--- a/Documentation/RelNotes/1.6.5.8.txt
+++ b/Documentation/RelNotes/1.6.5.8.adoc
diff --git a/Documentation/RelNotes/1.6.5.9.txt b/Documentation/RelNotes/1.6.5.9.adoc
index bb469dd71e..bb469dd71e 100644
--- a/Documentation/RelNotes/1.6.5.9.txt
+++ b/Documentation/RelNotes/1.6.5.9.adoc
diff --git a/Documentation/RelNotes/1.6.5.txt b/Documentation/RelNotes/1.6.5.adoc
index 79cb1b2b6d..79cb1b2b6d 100644
--- a/Documentation/RelNotes/1.6.5.txt
+++ b/Documentation/RelNotes/1.6.5.adoc
diff --git a/Documentation/RelNotes/1.6.6.1.txt b/Documentation/RelNotes/1.6.6.1.adoc
index f1d0a4ae2d..f1d0a4ae2d 100644
--- a/Documentation/RelNotes/1.6.6.1.txt
+++ b/Documentation/RelNotes/1.6.6.1.adoc
diff --git a/Documentation/RelNotes/1.6.6.2.txt b/Documentation/RelNotes/1.6.6.2.adoc
index 4eaddc0106..4eaddc0106 100644
--- a/Documentation/RelNotes/1.6.6.2.txt
+++ b/Documentation/RelNotes/1.6.6.2.adoc
diff --git a/Documentation/RelNotes/1.6.6.3.txt b/Documentation/RelNotes/1.6.6.3.adoc
index 11483acaec..11483acaec 100644
--- a/Documentation/RelNotes/1.6.6.3.txt
+++ b/Documentation/RelNotes/1.6.6.3.adoc
diff --git a/Documentation/RelNotes/1.6.6.txt b/Documentation/RelNotes/1.6.6.adoc
index 88b86a827e..88b86a827e 100644
--- a/Documentation/RelNotes/1.6.6.txt
+++ b/Documentation/RelNotes/1.6.6.adoc
diff --git a/Documentation/RelNotes/1.7.0.1.txt b/Documentation/RelNotes/1.7.0.1.adoc
index 8ff5bcada8..8ff5bcada8 100644
--- a/Documentation/RelNotes/1.7.0.1.txt
+++ b/Documentation/RelNotes/1.7.0.1.adoc
diff --git a/Documentation/RelNotes/1.7.0.2.txt b/Documentation/RelNotes/1.7.0.2.adoc
index 73ed2b5278..73ed2b5278 100644
--- a/Documentation/RelNotes/1.7.0.2.txt
+++ b/Documentation/RelNotes/1.7.0.2.adoc
diff --git a/Documentation/RelNotes/1.7.0.3.txt b/Documentation/RelNotes/1.7.0.3.adoc
index 3b355737c0..3b355737c0 100644
--- a/Documentation/RelNotes/1.7.0.3.txt
+++ b/Documentation/RelNotes/1.7.0.3.adoc
diff --git a/Documentation/RelNotes/1.7.0.4.txt b/Documentation/RelNotes/1.7.0.4.adoc
index cf7f60e60d..cf7f60e60d 100644
--- a/Documentation/RelNotes/1.7.0.4.txt
+++ b/Documentation/RelNotes/1.7.0.4.adoc
diff --git a/Documentation/RelNotes/1.7.0.5.txt b/Documentation/RelNotes/1.7.0.5.adoc
index 3149c91b7b..3149c91b7b 100644
--- a/Documentation/RelNotes/1.7.0.5.txt
+++ b/Documentation/RelNotes/1.7.0.5.adoc
diff --git a/Documentation/RelNotes/1.7.0.6.txt b/Documentation/RelNotes/1.7.0.6.adoc
index b2852b67d0..b2852b67d0 100644
--- a/Documentation/RelNotes/1.7.0.6.txt
+++ b/Documentation/RelNotes/1.7.0.6.adoc
diff --git a/Documentation/RelNotes/1.7.0.7.txt b/Documentation/RelNotes/1.7.0.7.adoc
index d0cb7ca7e2..d0cb7ca7e2 100644
--- a/Documentation/RelNotes/1.7.0.7.txt
+++ b/Documentation/RelNotes/1.7.0.7.adoc
diff --git a/Documentation/RelNotes/1.7.0.8.txt b/Documentation/RelNotes/1.7.0.8.adoc
index 7f05b48e17..7f05b48e17 100644
--- a/Documentation/RelNotes/1.7.0.8.txt
+++ b/Documentation/RelNotes/1.7.0.8.adoc
diff --git a/Documentation/RelNotes/1.7.0.9.txt b/Documentation/RelNotes/1.7.0.9.adoc
index bfb3166387..bfb3166387 100644
--- a/Documentation/RelNotes/1.7.0.9.txt
+++ b/Documentation/RelNotes/1.7.0.9.adoc
diff --git a/Documentation/RelNotes/1.7.0.txt b/Documentation/RelNotes/1.7.0.adoc
index 0bb8c0b2a2..0bb8c0b2a2 100644
--- a/Documentation/RelNotes/1.7.0.txt
+++ b/Documentation/RelNotes/1.7.0.adoc
diff --git a/Documentation/RelNotes/1.7.1.1.txt b/Documentation/RelNotes/1.7.1.1.adoc
index 3f6b3148a3..3f6b3148a3 100644
--- a/Documentation/RelNotes/1.7.1.1.txt
+++ b/Documentation/RelNotes/1.7.1.1.adoc
diff --git a/Documentation/RelNotes/1.7.1.2.txt b/Documentation/RelNotes/1.7.1.2.adoc
index 61ba14e262..61ba14e262 100644
--- a/Documentation/RelNotes/1.7.1.2.txt
+++ b/Documentation/RelNotes/1.7.1.2.adoc
diff --git a/Documentation/RelNotes/1.7.1.3.txt b/Documentation/RelNotes/1.7.1.3.adoc
index 5b18518449..5b18518449 100644
--- a/Documentation/RelNotes/1.7.1.3.txt
+++ b/Documentation/RelNotes/1.7.1.3.adoc
diff --git a/Documentation/RelNotes/1.7.1.4.txt b/Documentation/RelNotes/1.7.1.4.adoc
index 7c734b4f7b..7c734b4f7b 100644
--- a/Documentation/RelNotes/1.7.1.4.txt
+++ b/Documentation/RelNotes/1.7.1.4.adoc
diff --git a/Documentation/RelNotes/1.7.1.txt b/Documentation/RelNotes/1.7.1.adoc
index 9d89fedb36..9d89fedb36 100644
--- a/Documentation/RelNotes/1.7.1.txt
+++ b/Documentation/RelNotes/1.7.1.adoc
diff --git a/Documentation/RelNotes/1.7.10.1.txt b/Documentation/RelNotes/1.7.10.1.adoc
index 71a86cb7c6..71a86cb7c6 100644
--- a/Documentation/RelNotes/1.7.10.1.txt
+++ b/Documentation/RelNotes/1.7.10.1.adoc
diff --git a/Documentation/RelNotes/1.7.10.2.txt b/Documentation/RelNotes/1.7.10.2.adoc
index 7a7e9d6fd1..7a7e9d6fd1 100644
--- a/Documentation/RelNotes/1.7.10.2.txt
+++ b/Documentation/RelNotes/1.7.10.2.adoc
diff --git a/Documentation/RelNotes/1.7.10.3.txt b/Documentation/RelNotes/1.7.10.3.adoc
index 703fbf1d60..703fbf1d60 100644
--- a/Documentation/RelNotes/1.7.10.3.txt
+++ b/Documentation/RelNotes/1.7.10.3.adoc
diff --git a/Documentation/RelNotes/1.7.10.4.txt b/Documentation/RelNotes/1.7.10.4.adoc
index 57597f2bf3..57597f2bf3 100644
--- a/Documentation/RelNotes/1.7.10.4.txt
+++ b/Documentation/RelNotes/1.7.10.4.adoc
diff --git a/Documentation/RelNotes/1.7.10.5.txt b/Documentation/RelNotes/1.7.10.5.adoc
index 4db1770e38..4db1770e38 100644
--- a/Documentation/RelNotes/1.7.10.5.txt
+++ b/Documentation/RelNotes/1.7.10.5.adoc
diff --git a/Documentation/RelNotes/1.7.10.txt b/Documentation/RelNotes/1.7.10.adoc
index 58100bf04e..58100bf04e 100644
--- a/Documentation/RelNotes/1.7.10.txt
+++ b/Documentation/RelNotes/1.7.10.adoc
diff --git a/Documentation/RelNotes/1.7.11.1.txt b/Documentation/RelNotes/1.7.11.1.adoc
index 577eccaacd..577eccaacd 100644
--- a/Documentation/RelNotes/1.7.11.1.txt
+++ b/Documentation/RelNotes/1.7.11.1.adoc
diff --git a/Documentation/RelNotes/1.7.11.2.txt b/Documentation/RelNotes/1.7.11.2.adoc
index f0cfd02d6f..f0cfd02d6f 100644
--- a/Documentation/RelNotes/1.7.11.2.txt
+++ b/Documentation/RelNotes/1.7.11.2.adoc
diff --git a/Documentation/RelNotes/1.7.11.3.txt b/Documentation/RelNotes/1.7.11.3.adoc
index 64494f89d9..64494f89d9 100644
--- a/Documentation/RelNotes/1.7.11.3.txt
+++ b/Documentation/RelNotes/1.7.11.3.adoc
diff --git a/Documentation/RelNotes/1.7.11.4.txt b/Documentation/RelNotes/1.7.11.4.adoc
index 3a640c2d4d..3a640c2d4d 100644
--- a/Documentation/RelNotes/1.7.11.4.txt
+++ b/Documentation/RelNotes/1.7.11.4.adoc
diff --git a/Documentation/RelNotes/1.7.11.5.txt b/Documentation/RelNotes/1.7.11.5.adoc
index 0a2ed855c5..0a2ed855c5 100644
--- a/Documentation/RelNotes/1.7.11.5.txt
+++ b/Documentation/RelNotes/1.7.11.5.adoc
diff --git a/Documentation/RelNotes/1.7.11.6.txt b/Documentation/RelNotes/1.7.11.6.adoc
index ba7d3c3966..ba7d3c3966 100644
--- a/Documentation/RelNotes/1.7.11.6.txt
+++ b/Documentation/RelNotes/1.7.11.6.adoc
diff --git a/Documentation/RelNotes/1.7.11.7.txt b/Documentation/RelNotes/1.7.11.7.adoc
index e743a2a8e4..e743a2a8e4 100644
--- a/Documentation/RelNotes/1.7.11.7.txt
+++ b/Documentation/RelNotes/1.7.11.7.adoc
diff --git a/Documentation/RelNotes/1.7.11.txt b/Documentation/RelNotes/1.7.11.adoc
index 15b954ca4b..15b954ca4b 100644
--- a/Documentation/RelNotes/1.7.11.txt
+++ b/Documentation/RelNotes/1.7.11.adoc
diff --git a/Documentation/RelNotes/1.7.12.1.txt b/Documentation/RelNotes/1.7.12.1.adoc
index b8f04af19f..b8f04af19f 100644
--- a/Documentation/RelNotes/1.7.12.1.txt
+++ b/Documentation/RelNotes/1.7.12.1.adoc
diff --git a/Documentation/RelNotes/1.7.12.2.txt b/Documentation/RelNotes/1.7.12.2.adoc
index 69255745e6..69255745e6 100644
--- a/Documentation/RelNotes/1.7.12.2.txt
+++ b/Documentation/RelNotes/1.7.12.2.adoc
diff --git a/Documentation/RelNotes/1.7.12.3.txt b/Documentation/RelNotes/1.7.12.3.adoc
index 4b822976b8..4b822976b8 100644
--- a/Documentation/RelNotes/1.7.12.3.txt
+++ b/Documentation/RelNotes/1.7.12.3.adoc
diff --git a/Documentation/RelNotes/1.7.12.4.txt b/Documentation/RelNotes/1.7.12.4.adoc
index c6da3cc939..c6da3cc939 100644
--- a/Documentation/RelNotes/1.7.12.4.txt
+++ b/Documentation/RelNotes/1.7.12.4.adoc
diff --git a/Documentation/RelNotes/1.7.12.txt b/Documentation/RelNotes/1.7.12.adoc
index 010d8c7de4..010d8c7de4 100644
--- a/Documentation/RelNotes/1.7.12.txt
+++ b/Documentation/RelNotes/1.7.12.adoc
diff --git a/Documentation/RelNotes/1.7.2.1.txt b/Documentation/RelNotes/1.7.2.1.adoc
index 1103c47a4f..1103c47a4f 100644
--- a/Documentation/RelNotes/1.7.2.1.txt
+++ b/Documentation/RelNotes/1.7.2.1.adoc
diff --git a/Documentation/RelNotes/1.7.2.2.txt b/Documentation/RelNotes/1.7.2.2.adoc
index 71eb6a8b0a..71eb6a8b0a 100644
--- a/Documentation/RelNotes/1.7.2.2.txt
+++ b/Documentation/RelNotes/1.7.2.2.adoc
diff --git a/Documentation/RelNotes/1.7.2.3.txt b/Documentation/RelNotes/1.7.2.3.adoc
index 610960cfe1..610960cfe1 100644
--- a/Documentation/RelNotes/1.7.2.3.txt
+++ b/Documentation/RelNotes/1.7.2.3.adoc
diff --git a/Documentation/RelNotes/1.7.2.4.txt b/Documentation/RelNotes/1.7.2.4.adoc
index f7950a4c04..f7950a4c04 100644
--- a/Documentation/RelNotes/1.7.2.4.txt
+++ b/Documentation/RelNotes/1.7.2.4.adoc
diff --git a/Documentation/RelNotes/1.7.2.5.txt b/Documentation/RelNotes/1.7.2.5.adoc
index bf976c40db..bf976c40db 100644
--- a/Documentation/RelNotes/1.7.2.5.txt
+++ b/Documentation/RelNotes/1.7.2.5.adoc
diff --git a/Documentation/RelNotes/1.7.2.txt b/Documentation/RelNotes/1.7.2.adoc
index 15cf01178c..15cf01178c 100644
--- a/Documentation/RelNotes/1.7.2.txt
+++ b/Documentation/RelNotes/1.7.2.adoc
diff --git a/Documentation/RelNotes/1.7.3.1.txt b/Documentation/RelNotes/1.7.3.1.adoc
index 002c93b961..002c93b961 100644
--- a/Documentation/RelNotes/1.7.3.1.txt
+++ b/Documentation/RelNotes/1.7.3.1.adoc
diff --git a/Documentation/RelNotes/1.7.3.2.txt b/Documentation/RelNotes/1.7.3.2.adoc
index 5c93b85af4..5c93b85af4 100644
--- a/Documentation/RelNotes/1.7.3.2.txt
+++ b/Documentation/RelNotes/1.7.3.2.adoc
diff --git a/Documentation/RelNotes/1.7.3.3.txt b/Documentation/RelNotes/1.7.3.3.adoc
index 9b2b2448df..9b2b2448df 100644
--- a/Documentation/RelNotes/1.7.3.3.txt
+++ b/Documentation/RelNotes/1.7.3.3.adoc
diff --git a/Documentation/RelNotes/1.7.3.4.txt b/Documentation/RelNotes/1.7.3.4.adoc
index e57f7c176d..e57f7c176d 100644
--- a/Documentation/RelNotes/1.7.3.4.txt
+++ b/Documentation/RelNotes/1.7.3.4.adoc
diff --git a/Documentation/RelNotes/1.7.3.5.txt b/Documentation/RelNotes/1.7.3.5.adoc
index 40f3ba5795..40f3ba5795 100644
--- a/Documentation/RelNotes/1.7.3.5.txt
+++ b/Documentation/RelNotes/1.7.3.5.adoc
diff --git a/Documentation/RelNotes/1.7.3.txt b/Documentation/RelNotes/1.7.3.adoc
index 309c33181f..309c33181f 100644
--- a/Documentation/RelNotes/1.7.3.txt
+++ b/Documentation/RelNotes/1.7.3.adoc
diff --git a/Documentation/RelNotes/1.7.4.1.txt b/Documentation/RelNotes/1.7.4.1.adoc
index 79923a6d2f..79923a6d2f 100644
--- a/Documentation/RelNotes/1.7.4.1.txt
+++ b/Documentation/RelNotes/1.7.4.1.adoc
diff --git a/Documentation/RelNotes/1.7.4.2.txt b/Documentation/RelNotes/1.7.4.2.adoc
index ef4ce1fcd3..ef4ce1fcd3 100644
--- a/Documentation/RelNotes/1.7.4.2.txt
+++ b/Documentation/RelNotes/1.7.4.2.adoc
diff --git a/Documentation/RelNotes/1.7.4.3.txt b/Documentation/RelNotes/1.7.4.3.adoc
index 02a3d5bdf6..02a3d5bdf6 100644
--- a/Documentation/RelNotes/1.7.4.3.txt
+++ b/Documentation/RelNotes/1.7.4.3.adoc
diff --git a/Documentation/RelNotes/1.7.4.4.txt b/Documentation/RelNotes/1.7.4.4.adoc
index ff06e04a58..ff06e04a58 100644
--- a/Documentation/RelNotes/1.7.4.4.txt
+++ b/Documentation/RelNotes/1.7.4.4.adoc
diff --git a/Documentation/RelNotes/1.7.4.5.txt b/Documentation/RelNotes/1.7.4.5.adoc
index b7a0eeb22f..b7a0eeb22f 100644
--- a/Documentation/RelNotes/1.7.4.5.txt
+++ b/Documentation/RelNotes/1.7.4.5.adoc
diff --git a/Documentation/RelNotes/1.7.4.txt b/Documentation/RelNotes/1.7.4.adoc
index d5bca731b5..d5bca731b5 100644
--- a/Documentation/RelNotes/1.7.4.txt
+++ b/Documentation/RelNotes/1.7.4.adoc
diff --git a/Documentation/RelNotes/1.7.5.1.txt b/Documentation/RelNotes/1.7.5.1.adoc
index c6ebd76d19..c6ebd76d19 100644
--- a/Documentation/RelNotes/1.7.5.1.txt
+++ b/Documentation/RelNotes/1.7.5.1.adoc
diff --git a/Documentation/RelNotes/1.7.5.2.txt b/Documentation/RelNotes/1.7.5.2.adoc
index 951eb7cb08..951eb7cb08 100644
--- a/Documentation/RelNotes/1.7.5.2.txt
+++ b/Documentation/RelNotes/1.7.5.2.adoc
diff --git a/Documentation/RelNotes/1.7.5.3.txt b/Documentation/RelNotes/1.7.5.3.adoc
index 1d24edcf2f..1d24edcf2f 100644
--- a/Documentation/RelNotes/1.7.5.3.txt
+++ b/Documentation/RelNotes/1.7.5.3.adoc
diff --git a/Documentation/RelNotes/1.7.5.4.txt b/Documentation/RelNotes/1.7.5.4.adoc
index 7796df3fe4..7796df3fe4 100644
--- a/Documentation/RelNotes/1.7.5.4.txt
+++ b/Documentation/RelNotes/1.7.5.4.adoc
diff --git a/Documentation/RelNotes/1.7.5.txt b/Documentation/RelNotes/1.7.5.adoc
index 987919c321..987919c321 100644
--- a/Documentation/RelNotes/1.7.5.txt
+++ b/Documentation/RelNotes/1.7.5.adoc
diff --git a/Documentation/RelNotes/1.7.6.1.txt b/Documentation/RelNotes/1.7.6.1.adoc
index 42e46ab17f..42e46ab17f 100644
--- a/Documentation/RelNotes/1.7.6.1.txt
+++ b/Documentation/RelNotes/1.7.6.1.adoc
diff --git a/Documentation/RelNotes/1.7.6.2.txt b/Documentation/RelNotes/1.7.6.2.adoc
index 67ae414965..67ae414965 100644
--- a/Documentation/RelNotes/1.7.6.2.txt
+++ b/Documentation/RelNotes/1.7.6.2.adoc
diff --git a/Documentation/RelNotes/1.7.6.3.txt b/Documentation/RelNotes/1.7.6.3.adoc
index 95971831b9..95971831b9 100644
--- a/Documentation/RelNotes/1.7.6.3.txt
+++ b/Documentation/RelNotes/1.7.6.3.adoc
diff --git a/Documentation/RelNotes/1.7.6.4.txt b/Documentation/RelNotes/1.7.6.4.adoc
index e19acac2da..e19acac2da 100644
--- a/Documentation/RelNotes/1.7.6.4.txt
+++ b/Documentation/RelNotes/1.7.6.4.adoc
diff --git a/Documentation/RelNotes/1.7.6.5.txt b/Documentation/RelNotes/1.7.6.5.adoc
index 6713132a9e..6713132a9e 100644
--- a/Documentation/RelNotes/1.7.6.5.txt
+++ b/Documentation/RelNotes/1.7.6.5.adoc
diff --git a/Documentation/RelNotes/1.7.6.6.txt b/Documentation/RelNotes/1.7.6.6.adoc
index 5343e00400..5343e00400 100644
--- a/Documentation/RelNotes/1.7.6.6.txt
+++ b/Documentation/RelNotes/1.7.6.6.adoc
diff --git a/Documentation/RelNotes/1.7.6.txt b/Documentation/RelNotes/1.7.6.adoc
index 9ec498ea39..9ec498ea39 100644
--- a/Documentation/RelNotes/1.7.6.txt
+++ b/Documentation/RelNotes/1.7.6.adoc
diff --git a/Documentation/RelNotes/1.7.7.1.txt b/Documentation/RelNotes/1.7.7.1.adoc
index ac9b838e25..ac9b838e25 100644
--- a/Documentation/RelNotes/1.7.7.1.txt
+++ b/Documentation/RelNotes/1.7.7.1.adoc
diff --git a/Documentation/RelNotes/1.7.7.2.txt b/Documentation/RelNotes/1.7.7.2.adoc
index e6bbef2f01..e6bbef2f01 100644
--- a/Documentation/RelNotes/1.7.7.2.txt
+++ b/Documentation/RelNotes/1.7.7.2.adoc
diff --git a/Documentation/RelNotes/1.7.7.3.txt b/Documentation/RelNotes/1.7.7.3.adoc
index 09301f0957..09301f0957 100644
--- a/Documentation/RelNotes/1.7.7.3.txt
+++ b/Documentation/RelNotes/1.7.7.3.adoc
diff --git a/Documentation/RelNotes/1.7.7.4.txt b/Documentation/RelNotes/1.7.7.4.adoc
index e5234485e7..e5234485e7 100644
--- a/Documentation/RelNotes/1.7.7.4.txt
+++ b/Documentation/RelNotes/1.7.7.4.adoc
diff --git a/Documentation/RelNotes/1.7.7.5.txt b/Documentation/RelNotes/1.7.7.5.adoc
index 7b0931987b..7b0931987b 100644
--- a/Documentation/RelNotes/1.7.7.5.txt
+++ b/Documentation/RelNotes/1.7.7.5.adoc
diff --git a/Documentation/RelNotes/1.7.7.6.txt b/Documentation/RelNotes/1.7.7.6.adoc
index 8df606d452..8df606d452 100644
--- a/Documentation/RelNotes/1.7.7.6.txt
+++ b/Documentation/RelNotes/1.7.7.6.adoc
diff --git a/Documentation/RelNotes/1.7.7.7.txt b/Documentation/RelNotes/1.7.7.7.adoc
index e79118d063..e79118d063 100644
--- a/Documentation/RelNotes/1.7.7.7.txt
+++ b/Documentation/RelNotes/1.7.7.7.adoc
diff --git a/Documentation/RelNotes/1.7.7.txt b/Documentation/RelNotes/1.7.7.adoc
index 6eff128c80..6eff128c80 100644
--- a/Documentation/RelNotes/1.7.7.txt
+++ b/Documentation/RelNotes/1.7.7.adoc
diff --git a/Documentation/RelNotes/1.7.8.1.txt b/Documentation/RelNotes/1.7.8.1.adoc
index 33dc948b94..33dc948b94 100644
--- a/Documentation/RelNotes/1.7.8.1.txt
+++ b/Documentation/RelNotes/1.7.8.1.adoc
diff --git a/Documentation/RelNotes/1.7.8.2.txt b/Documentation/RelNotes/1.7.8.2.adoc
index b9c66aa1b7..b9c66aa1b7 100644
--- a/Documentation/RelNotes/1.7.8.2.txt
+++ b/Documentation/RelNotes/1.7.8.2.adoc
diff --git a/Documentation/RelNotes/1.7.8.3.txt b/Documentation/RelNotes/1.7.8.3.adoc
index a92714c14b..a92714c14b 100644
--- a/Documentation/RelNotes/1.7.8.3.txt
+++ b/Documentation/RelNotes/1.7.8.3.adoc
diff --git a/Documentation/RelNotes/1.7.8.4.txt b/Documentation/RelNotes/1.7.8.4.adoc
index 9bebdbf13d..9bebdbf13d 100644
--- a/Documentation/RelNotes/1.7.8.4.txt
+++ b/Documentation/RelNotes/1.7.8.4.adoc
diff --git a/Documentation/RelNotes/1.7.8.5.txt b/Documentation/RelNotes/1.7.8.5.adoc
index 011fd2a428..011fd2a428 100644
--- a/Documentation/RelNotes/1.7.8.5.txt
+++ b/Documentation/RelNotes/1.7.8.5.adoc
diff --git a/Documentation/RelNotes/1.7.8.6.txt b/Documentation/RelNotes/1.7.8.6.adoc
index d9bf2b741a..d9bf2b741a 100644
--- a/Documentation/RelNotes/1.7.8.6.txt
+++ b/Documentation/RelNotes/1.7.8.6.adoc
diff --git a/Documentation/RelNotes/1.7.8.txt b/Documentation/RelNotes/1.7.8.adoc
index 249311361e..249311361e 100644
--- a/Documentation/RelNotes/1.7.8.txt
+++ b/Documentation/RelNotes/1.7.8.adoc
diff --git a/Documentation/RelNotes/1.7.9.1.txt b/Documentation/RelNotes/1.7.9.1.adoc
index 6957183dbb..6957183dbb 100644
--- a/Documentation/RelNotes/1.7.9.1.txt
+++ b/Documentation/RelNotes/1.7.9.1.adoc
diff --git a/Documentation/RelNotes/1.7.9.2.txt b/Documentation/RelNotes/1.7.9.2.adoc
index e500da75dd..e500da75dd 100644
--- a/Documentation/RelNotes/1.7.9.2.txt
+++ b/Documentation/RelNotes/1.7.9.2.adoc
diff --git a/Documentation/RelNotes/1.7.9.3.txt b/Documentation/RelNotes/1.7.9.3.adoc
index 91c65012f9..91c65012f9 100644
--- a/Documentation/RelNotes/1.7.9.3.txt
+++ b/Documentation/RelNotes/1.7.9.3.adoc
diff --git a/Documentation/RelNotes/1.7.9.4.txt b/Documentation/RelNotes/1.7.9.4.adoc
index e5217a1889..e5217a1889 100644
--- a/Documentation/RelNotes/1.7.9.4.txt
+++ b/Documentation/RelNotes/1.7.9.4.adoc
diff --git a/Documentation/RelNotes/1.7.9.5.txt b/Documentation/RelNotes/1.7.9.5.adoc
index 95cc2bbf2c..95cc2bbf2c 100644
--- a/Documentation/RelNotes/1.7.9.5.txt
+++ b/Documentation/RelNotes/1.7.9.5.adoc
diff --git a/Documentation/RelNotes/1.7.9.6.txt b/Documentation/RelNotes/1.7.9.6.adoc
index 74bf8825e2..74bf8825e2 100644
--- a/Documentation/RelNotes/1.7.9.6.txt
+++ b/Documentation/RelNotes/1.7.9.6.adoc
diff --git a/Documentation/RelNotes/1.7.9.7.txt b/Documentation/RelNotes/1.7.9.7.adoc
index 59667d0f2a..59667d0f2a 100644
--- a/Documentation/RelNotes/1.7.9.7.txt
+++ b/Documentation/RelNotes/1.7.9.7.adoc
diff --git a/Documentation/RelNotes/1.7.9.txt b/Documentation/RelNotes/1.7.9.adoc
index 95320aad5d..95320aad5d 100644
--- a/Documentation/RelNotes/1.7.9.txt
+++ b/Documentation/RelNotes/1.7.9.adoc
diff --git a/Documentation/RelNotes/1.8.0.1.txt b/Documentation/RelNotes/1.8.0.1.adoc
index 1f372fa0b5..1f372fa0b5 100644
--- a/Documentation/RelNotes/1.8.0.1.txt
+++ b/Documentation/RelNotes/1.8.0.1.adoc
diff --git a/Documentation/RelNotes/1.8.0.2.txt b/Documentation/RelNotes/1.8.0.2.adoc
index 8497e051de..8497e051de 100644
--- a/Documentation/RelNotes/1.8.0.2.txt
+++ b/Documentation/RelNotes/1.8.0.2.adoc
diff --git a/Documentation/RelNotes/1.8.0.3.txt b/Documentation/RelNotes/1.8.0.3.adoc
index 92b1e4b363..92b1e4b363 100644
--- a/Documentation/RelNotes/1.8.0.3.txt
+++ b/Documentation/RelNotes/1.8.0.3.adoc
diff --git a/Documentation/RelNotes/1.8.0.txt b/Documentation/RelNotes/1.8.0.adoc
index 63d6e4afa4..63d6e4afa4 100644
--- a/Documentation/RelNotes/1.8.0.txt
+++ b/Documentation/RelNotes/1.8.0.adoc
diff --git a/Documentation/RelNotes/1.8.1.1.txt b/Documentation/RelNotes/1.8.1.1.adoc
index 6cde07ba29..6cde07ba29 100644
--- a/Documentation/RelNotes/1.8.1.1.txt
+++ b/Documentation/RelNotes/1.8.1.1.adoc
diff --git a/Documentation/RelNotes/1.8.1.2.txt b/Documentation/RelNotes/1.8.1.2.adoc
index 5ab7b18906..5ab7b18906 100644
--- a/Documentation/RelNotes/1.8.1.2.txt
+++ b/Documentation/RelNotes/1.8.1.2.adoc
diff --git a/Documentation/RelNotes/1.8.1.3.txt b/Documentation/RelNotes/1.8.1.3.adoc
index 681cb35c0a..681cb35c0a 100644
--- a/Documentation/RelNotes/1.8.1.3.txt
+++ b/Documentation/RelNotes/1.8.1.3.adoc
diff --git a/Documentation/RelNotes/1.8.1.4.txt b/Documentation/RelNotes/1.8.1.4.adoc
index 22af1d1643..22af1d1643 100644
--- a/Documentation/RelNotes/1.8.1.4.txt
+++ b/Documentation/RelNotes/1.8.1.4.adoc
diff --git a/Documentation/RelNotes/1.8.1.5.txt b/Documentation/RelNotes/1.8.1.5.adoc
index efa68aef22..efa68aef22 100644
--- a/Documentation/RelNotes/1.8.1.5.txt
+++ b/Documentation/RelNotes/1.8.1.5.adoc
diff --git a/Documentation/RelNotes/1.8.1.6.txt b/Documentation/RelNotes/1.8.1.6.adoc
index c15cf2e805..c15cf2e805 100644
--- a/Documentation/RelNotes/1.8.1.6.txt
+++ b/Documentation/RelNotes/1.8.1.6.adoc
diff --git a/Documentation/RelNotes/1.8.1.txt b/Documentation/RelNotes/1.8.1.adoc
index d6f9555923..d6f9555923 100644
--- a/Documentation/RelNotes/1.8.1.txt
+++ b/Documentation/RelNotes/1.8.1.adoc
diff --git a/Documentation/RelNotes/1.8.2.1.txt b/Documentation/RelNotes/1.8.2.1.adoc
index 769a6fc06c..769a6fc06c 100644
--- a/Documentation/RelNotes/1.8.2.1.txt
+++ b/Documentation/RelNotes/1.8.2.1.adoc
diff --git a/Documentation/RelNotes/1.8.2.2.txt b/Documentation/RelNotes/1.8.2.2.adoc
index 708df1ae19..708df1ae19 100644
--- a/Documentation/RelNotes/1.8.2.2.txt
+++ b/Documentation/RelNotes/1.8.2.2.adoc
diff --git a/Documentation/RelNotes/1.8.2.3.txt b/Documentation/RelNotes/1.8.2.3.adoc
index 613948251a..613948251a 100644
--- a/Documentation/RelNotes/1.8.2.3.txt
+++ b/Documentation/RelNotes/1.8.2.3.adoc
diff --git a/Documentation/RelNotes/1.8.2.txt b/Documentation/RelNotes/1.8.2.adoc
index fc606ae116..fc606ae116 100644
--- a/Documentation/RelNotes/1.8.2.txt
+++ b/Documentation/RelNotes/1.8.2.adoc
diff --git a/Documentation/RelNotes/1.8.3.1.txt b/Documentation/RelNotes/1.8.3.1.adoc
index 986637b755..986637b755 100644
--- a/Documentation/RelNotes/1.8.3.1.txt
+++ b/Documentation/RelNotes/1.8.3.1.adoc
diff --git a/Documentation/RelNotes/1.8.3.2.txt b/Documentation/RelNotes/1.8.3.2.adoc
index 26ae142c3d..26ae142c3d 100644
--- a/Documentation/RelNotes/1.8.3.2.txt
+++ b/Documentation/RelNotes/1.8.3.2.adoc
diff --git a/Documentation/RelNotes/1.8.3.3.txt b/Documentation/RelNotes/1.8.3.3.adoc
index 9ba4f4da0f..9ba4f4da0f 100644
--- a/Documentation/RelNotes/1.8.3.3.txt
+++ b/Documentation/RelNotes/1.8.3.3.adoc
diff --git a/Documentation/RelNotes/1.8.3.4.txt b/Documentation/RelNotes/1.8.3.4.adoc
index 56f106e262..56f106e262 100644
--- a/Documentation/RelNotes/1.8.3.4.txt
+++ b/Documentation/RelNotes/1.8.3.4.adoc
diff --git a/Documentation/RelNotes/1.8.3.txt b/Documentation/RelNotes/1.8.3.adoc
index ead568e7f1..ead568e7f1 100644
--- a/Documentation/RelNotes/1.8.3.txt
+++ b/Documentation/RelNotes/1.8.3.adoc
diff --git a/Documentation/RelNotes/1.8.4.1.txt b/Documentation/RelNotes/1.8.4.1.adoc
index c257beb114..c257beb114 100644
--- a/Documentation/RelNotes/1.8.4.1.txt
+++ b/Documentation/RelNotes/1.8.4.1.adoc
diff --git a/Documentation/RelNotes/1.8.4.2.txt b/Documentation/RelNotes/1.8.4.2.adoc
index bf6fb1a023..bf6fb1a023 100644
--- a/Documentation/RelNotes/1.8.4.2.txt
+++ b/Documentation/RelNotes/1.8.4.2.adoc
diff --git a/Documentation/RelNotes/1.8.4.3.txt b/Documentation/RelNotes/1.8.4.3.adoc
index 267a1b34b4..267a1b34b4 100644
--- a/Documentation/RelNotes/1.8.4.3.txt
+++ b/Documentation/RelNotes/1.8.4.3.adoc
diff --git a/Documentation/RelNotes/1.8.4.4.txt b/Documentation/RelNotes/1.8.4.4.adoc
index a7c1ce15c0..a7c1ce15c0 100644
--- a/Documentation/RelNotes/1.8.4.4.txt
+++ b/Documentation/RelNotes/1.8.4.4.adoc
diff --git a/Documentation/RelNotes/1.8.4.5.txt b/Documentation/RelNotes/1.8.4.5.adoc
index 215bd1a7a2..215bd1a7a2 100644
--- a/Documentation/RelNotes/1.8.4.5.txt
+++ b/Documentation/RelNotes/1.8.4.5.adoc
diff --git a/Documentation/RelNotes/1.8.4.txt b/Documentation/RelNotes/1.8.4.adoc
index 2e7529928b..2e7529928b 100644
--- a/Documentation/RelNotes/1.8.4.txt
+++ b/Documentation/RelNotes/1.8.4.adoc
diff --git a/Documentation/RelNotes/1.8.5.1.txt b/Documentation/RelNotes/1.8.5.1.adoc
index 7236aaf232..7236aaf232 100644
--- a/Documentation/RelNotes/1.8.5.1.txt
+++ b/Documentation/RelNotes/1.8.5.1.adoc
diff --git a/Documentation/RelNotes/1.8.5.2.txt b/Documentation/RelNotes/1.8.5.2.adoc
index 3ac4984f10..3ac4984f10 100644
--- a/Documentation/RelNotes/1.8.5.2.txt
+++ b/Documentation/RelNotes/1.8.5.2.adoc
diff --git a/Documentation/RelNotes/1.8.5.3.txt b/Documentation/RelNotes/1.8.5.3.adoc
index 3de2dd0f19..3de2dd0f19 100644
--- a/Documentation/RelNotes/1.8.5.3.txt
+++ b/Documentation/RelNotes/1.8.5.3.adoc
diff --git a/Documentation/RelNotes/1.8.5.4.txt b/Documentation/RelNotes/1.8.5.4.adoc
index d18c40389e..d18c40389e 100644
--- a/Documentation/RelNotes/1.8.5.4.txt
+++ b/Documentation/RelNotes/1.8.5.4.adoc
diff --git a/Documentation/RelNotes/1.8.5.5.txt b/Documentation/RelNotes/1.8.5.5.adoc
index 9191ce948f..9191ce948f 100644
--- a/Documentation/RelNotes/1.8.5.5.txt
+++ b/Documentation/RelNotes/1.8.5.5.adoc
diff --git a/Documentation/RelNotes/1.8.5.6.txt b/Documentation/RelNotes/1.8.5.6.adoc
index 92ff92b1e6..92ff92b1e6 100644
--- a/Documentation/RelNotes/1.8.5.6.txt
+++ b/Documentation/RelNotes/1.8.5.6.adoc
diff --git a/Documentation/RelNotes/1.8.5.txt b/Documentation/RelNotes/1.8.5.adoc
index 602df0cac2..602df0cac2 100644
--- a/Documentation/RelNotes/1.8.5.txt
+++ b/Documentation/RelNotes/1.8.5.adoc
diff --git a/Documentation/RelNotes/1.9.0.txt b/Documentation/RelNotes/1.9.0.adoc
index 4e4b88aa5c..4e4b88aa5c 100644
--- a/Documentation/RelNotes/1.9.0.txt
+++ b/Documentation/RelNotes/1.9.0.adoc
diff --git a/Documentation/RelNotes/1.9.1.txt b/Documentation/RelNotes/1.9.1.adoc
index 5b0602053c..5b0602053c 100644
--- a/Documentation/RelNotes/1.9.1.txt
+++ b/Documentation/RelNotes/1.9.1.adoc
diff --git a/Documentation/RelNotes/1.9.2.txt b/Documentation/RelNotes/1.9.2.adoc
index 47a34ca964..47a34ca964 100644
--- a/Documentation/RelNotes/1.9.2.txt
+++ b/Documentation/RelNotes/1.9.2.adoc
diff --git a/Documentation/RelNotes/1.9.3.txt b/Documentation/RelNotes/1.9.3.adoc
index 17b05ca7b5..17b05ca7b5 100644
--- a/Documentation/RelNotes/1.9.3.txt
+++ b/Documentation/RelNotes/1.9.3.adoc
diff --git a/Documentation/RelNotes/1.9.4.txt b/Documentation/RelNotes/1.9.4.adoc
index e1d1835436..e1d1835436 100644
--- a/Documentation/RelNotes/1.9.4.txt
+++ b/Documentation/RelNotes/1.9.4.adoc
diff --git a/Documentation/RelNotes/1.9.5.txt b/Documentation/RelNotes/1.9.5.adoc
index 8d6ac0cf53..8d6ac0cf53 100644
--- a/Documentation/RelNotes/1.9.5.txt
+++ b/Documentation/RelNotes/1.9.5.adoc
diff --git a/Documentation/RelNotes/2.0.0.txt b/Documentation/RelNotes/2.0.0.adoc
index 2617372a0c..2617372a0c 100644
--- a/Documentation/RelNotes/2.0.0.txt
+++ b/Documentation/RelNotes/2.0.0.adoc
diff --git a/Documentation/RelNotes/2.0.1.txt b/Documentation/RelNotes/2.0.1.adoc
index ce5579db3e..ce5579db3e 100644
--- a/Documentation/RelNotes/2.0.1.txt
+++ b/Documentation/RelNotes/2.0.1.adoc
diff --git a/Documentation/RelNotes/2.0.2.txt b/Documentation/RelNotes/2.0.2.adoc
index 8e8321b2ef..8e8321b2ef 100644
--- a/Documentation/RelNotes/2.0.2.txt
+++ b/Documentation/RelNotes/2.0.2.adoc
diff --git a/Documentation/RelNotes/2.0.3.txt b/Documentation/RelNotes/2.0.3.adoc
index 4047b46bbe..4047b46bbe 100644
--- a/Documentation/RelNotes/2.0.3.txt
+++ b/Documentation/RelNotes/2.0.3.adoc
diff --git a/Documentation/RelNotes/2.0.4.txt b/Documentation/RelNotes/2.0.4.adoc
index 7e340921a2..7e340921a2 100644
--- a/Documentation/RelNotes/2.0.4.txt
+++ b/Documentation/RelNotes/2.0.4.adoc
diff --git a/Documentation/RelNotes/2.0.5.txt b/Documentation/RelNotes/2.0.5.adoc
index 3a16f697e8..3a16f697e8 100644
--- a/Documentation/RelNotes/2.0.5.txt
+++ b/Documentation/RelNotes/2.0.5.adoc
diff --git a/Documentation/RelNotes/2.1.0.txt b/Documentation/RelNotes/2.1.0.adoc
index ae4753728e..ae4753728e 100644
--- a/Documentation/RelNotes/2.1.0.txt
+++ b/Documentation/RelNotes/2.1.0.adoc
diff --git a/Documentation/RelNotes/2.1.1.txt b/Documentation/RelNotes/2.1.1.adoc
index 830fc3cc6d..830fc3cc6d 100644
--- a/Documentation/RelNotes/2.1.1.txt
+++ b/Documentation/RelNotes/2.1.1.adoc
diff --git a/Documentation/RelNotes/2.1.2.txt b/Documentation/RelNotes/2.1.2.adoc
index abc3b8928a..abc3b8928a 100644
--- a/Documentation/RelNotes/2.1.2.txt
+++ b/Documentation/RelNotes/2.1.2.adoc
diff --git a/Documentation/RelNotes/2.1.3.txt b/Documentation/RelNotes/2.1.3.adoc
index 0dfb17c4fc..0dfb17c4fc 100644
--- a/Documentation/RelNotes/2.1.3.txt
+++ b/Documentation/RelNotes/2.1.3.adoc
diff --git a/Documentation/RelNotes/2.1.4.txt b/Documentation/RelNotes/2.1.4.adoc
index d16e5f041f..d16e5f041f 100644
--- a/Documentation/RelNotes/2.1.4.txt
+++ b/Documentation/RelNotes/2.1.4.adoc
diff --git a/Documentation/RelNotes/2.10.0.txt b/Documentation/RelNotes/2.10.0.adoc
index 3792b7d03d..3792b7d03d 100644
--- a/Documentation/RelNotes/2.10.0.txt
+++ b/Documentation/RelNotes/2.10.0.adoc
diff --git a/Documentation/RelNotes/2.10.1.txt b/Documentation/RelNotes/2.10.1.adoc
index 70462f7f7e..70462f7f7e 100644
--- a/Documentation/RelNotes/2.10.1.txt
+++ b/Documentation/RelNotes/2.10.1.adoc
diff --git a/Documentation/RelNotes/2.10.2.txt b/Documentation/RelNotes/2.10.2.adoc
index abbd331508..abbd331508 100644
--- a/Documentation/RelNotes/2.10.2.txt
+++ b/Documentation/RelNotes/2.10.2.adoc
diff --git a/Documentation/RelNotes/2.10.3.txt b/Documentation/RelNotes/2.10.3.adoc
index ad6a01bf83..ad6a01bf83 100644
--- a/Documentation/RelNotes/2.10.3.txt
+++ b/Documentation/RelNotes/2.10.3.adoc
diff --git a/Documentation/RelNotes/2.10.4.txt b/Documentation/RelNotes/2.10.4.adoc
index ee8142ad24..ee8142ad24 100644
--- a/Documentation/RelNotes/2.10.4.txt
+++ b/Documentation/RelNotes/2.10.4.adoc
diff --git a/Documentation/RelNotes/2.10.5.txt b/Documentation/RelNotes/2.10.5.adoc
index a498fd6fdc..a498fd6fdc 100644
--- a/Documentation/RelNotes/2.10.5.txt
+++ b/Documentation/RelNotes/2.10.5.adoc
diff --git a/Documentation/RelNotes/2.11.0.txt b/Documentation/RelNotes/2.11.0.adoc
index b7b7dd361e..b7b7dd361e 100644
--- a/Documentation/RelNotes/2.11.0.txt
+++ b/Documentation/RelNotes/2.11.0.adoc
diff --git a/Documentation/RelNotes/2.11.1.txt b/Documentation/RelNotes/2.11.1.adoc
index 7d35cf186d..7d35cf186d 100644
--- a/Documentation/RelNotes/2.11.1.txt
+++ b/Documentation/RelNotes/2.11.1.adoc
diff --git a/Documentation/RelNotes/2.11.2.txt b/Documentation/RelNotes/2.11.2.adoc
index 7428851168..7428851168 100644
--- a/Documentation/RelNotes/2.11.2.txt
+++ b/Documentation/RelNotes/2.11.2.adoc
diff --git a/Documentation/RelNotes/2.11.3.txt b/Documentation/RelNotes/2.11.3.adoc
index 4e3b78d0e8..4e3b78d0e8 100644
--- a/Documentation/RelNotes/2.11.3.txt
+++ b/Documentation/RelNotes/2.11.3.adoc
diff --git a/Documentation/RelNotes/2.11.4.txt b/Documentation/RelNotes/2.11.4.adoc
index ad4da8eb09..ad4da8eb09 100644
--- a/Documentation/RelNotes/2.11.4.txt
+++ b/Documentation/RelNotes/2.11.4.adoc
diff --git a/Documentation/RelNotes/2.12.0.txt b/Documentation/RelNotes/2.12.0.adoc
index d2f6a83614..d2f6a83614 100644
--- a/Documentation/RelNotes/2.12.0.txt
+++ b/Documentation/RelNotes/2.12.0.adoc
diff --git a/Documentation/RelNotes/2.12.1.txt b/Documentation/RelNotes/2.12.1.adoc
index a74f7db747..a74f7db747 100644
--- a/Documentation/RelNotes/2.12.1.txt
+++ b/Documentation/RelNotes/2.12.1.adoc
diff --git a/Documentation/RelNotes/2.12.2.txt b/Documentation/RelNotes/2.12.2.adoc
index 441939709c..441939709c 100644
--- a/Documentation/RelNotes/2.12.2.txt
+++ b/Documentation/RelNotes/2.12.2.adoc
diff --git a/Documentation/RelNotes/2.12.3.txt b/Documentation/RelNotes/2.12.3.adoc
index ebca846d5d..ebca846d5d 100644
--- a/Documentation/RelNotes/2.12.3.txt
+++ b/Documentation/RelNotes/2.12.3.adoc
diff --git a/Documentation/RelNotes/2.12.4.txt b/Documentation/RelNotes/2.12.4.adoc
index 3f56938221..3f56938221 100644
--- a/Documentation/RelNotes/2.12.4.txt
+++ b/Documentation/RelNotes/2.12.4.adoc
diff --git a/Documentation/RelNotes/2.12.5.txt b/Documentation/RelNotes/2.12.5.adoc
index 8fa73cfce7..8fa73cfce7 100644
--- a/Documentation/RelNotes/2.12.5.txt
+++ b/Documentation/RelNotes/2.12.5.adoc
diff --git a/Documentation/RelNotes/2.13.0.txt b/Documentation/RelNotes/2.13.0.adoc
index 2a47b4cb0c..2a47b4cb0c 100644
--- a/Documentation/RelNotes/2.13.0.txt
+++ b/Documentation/RelNotes/2.13.0.adoc
diff --git a/Documentation/RelNotes/2.13.1.txt b/Documentation/RelNotes/2.13.1.adoc
index ed7cd976d9..ed7cd976d9 100644
--- a/Documentation/RelNotes/2.13.1.txt
+++ b/Documentation/RelNotes/2.13.1.adoc
diff --git a/Documentation/RelNotes/2.13.2.txt b/Documentation/RelNotes/2.13.2.adoc
index 8c2b20071e..8c2b20071e 100644
--- a/Documentation/RelNotes/2.13.2.txt
+++ b/Documentation/RelNotes/2.13.2.adoc
diff --git a/Documentation/RelNotes/2.13.3.txt b/Documentation/RelNotes/2.13.3.adoc
index 384e4de265..384e4de265 100644
--- a/Documentation/RelNotes/2.13.3.txt
+++ b/Documentation/RelNotes/2.13.3.adoc
diff --git a/Documentation/RelNotes/2.13.4.txt b/Documentation/RelNotes/2.13.4.adoc
index 9a9f8f9599..9a9f8f9599 100644
--- a/Documentation/RelNotes/2.13.4.txt
+++ b/Documentation/RelNotes/2.13.4.adoc
diff --git a/Documentation/RelNotes/2.13.5.txt b/Documentation/RelNotes/2.13.5.adoc
index 6949fcda78..6949fcda78 100644
--- a/Documentation/RelNotes/2.13.5.txt
+++ b/Documentation/RelNotes/2.13.5.adoc
diff --git a/Documentation/RelNotes/2.13.6.txt b/Documentation/RelNotes/2.13.6.adoc
index afcae9c808..afcae9c808 100644
--- a/Documentation/RelNotes/2.13.6.txt
+++ b/Documentation/RelNotes/2.13.6.adoc
diff --git a/Documentation/RelNotes/2.13.7.txt b/Documentation/RelNotes/2.13.7.adoc
index 09fc01406c..09fc01406c 100644
--- a/Documentation/RelNotes/2.13.7.txt
+++ b/Documentation/RelNotes/2.13.7.adoc
diff --git a/Documentation/RelNotes/2.14.0.txt b/Documentation/RelNotes/2.14.0.adoc
index 2711a2529d..2711a2529d 100644
--- a/Documentation/RelNotes/2.14.0.txt
+++ b/Documentation/RelNotes/2.14.0.adoc
diff --git a/Documentation/RelNotes/2.14.1.txt b/Documentation/RelNotes/2.14.1.adoc
index 9403340f7f..9403340f7f 100644
--- a/Documentation/RelNotes/2.14.1.txt
+++ b/Documentation/RelNotes/2.14.1.adoc
diff --git a/Documentation/RelNotes/2.14.2.txt b/Documentation/RelNotes/2.14.2.adoc
index bec9186ade..bec9186ade 100644
--- a/Documentation/RelNotes/2.14.2.txt
+++ b/Documentation/RelNotes/2.14.2.adoc
diff --git a/Documentation/RelNotes/2.14.3.txt b/Documentation/RelNotes/2.14.3.adoc
index 977c9e857c..977c9e857c 100644
--- a/Documentation/RelNotes/2.14.3.txt
+++ b/Documentation/RelNotes/2.14.3.adoc
diff --git a/Documentation/RelNotes/2.14.4.txt b/Documentation/RelNotes/2.14.4.adoc
index 97755a89d9..97755a89d9 100644
--- a/Documentation/RelNotes/2.14.4.txt
+++ b/Documentation/RelNotes/2.14.4.adoc
diff --git a/Documentation/RelNotes/2.14.5.txt b/Documentation/RelNotes/2.14.5.adoc
index 130645fb29..130645fb29 100644
--- a/Documentation/RelNotes/2.14.5.txt
+++ b/Documentation/RelNotes/2.14.5.adoc
diff --git a/Documentation/RelNotes/2.14.6.txt b/Documentation/RelNotes/2.14.6.adoc
index 72b7af6799..72b7af6799 100644
--- a/Documentation/RelNotes/2.14.6.txt
+++ b/Documentation/RelNotes/2.14.6.adoc
diff --git a/Documentation/RelNotes/2.15.0.txt b/Documentation/RelNotes/2.15.0.adoc
index cdd761bcc2..cdd761bcc2 100644
--- a/Documentation/RelNotes/2.15.0.txt
+++ b/Documentation/RelNotes/2.15.0.adoc
diff --git a/Documentation/RelNotes/2.15.1.txt b/Documentation/RelNotes/2.15.1.adoc
index ec06704e63..ec06704e63 100644
--- a/Documentation/RelNotes/2.15.1.txt
+++ b/Documentation/RelNotes/2.15.1.adoc
diff --git a/Documentation/RelNotes/2.15.2.txt b/Documentation/RelNotes/2.15.2.adoc
index b480e56b68..b480e56b68 100644
--- a/Documentation/RelNotes/2.15.2.txt
+++ b/Documentation/RelNotes/2.15.2.adoc
diff --git a/Documentation/RelNotes/2.15.3.txt b/Documentation/RelNotes/2.15.3.adoc
index fd2e6f8df7..fd2e6f8df7 100644
--- a/Documentation/RelNotes/2.15.3.txt
+++ b/Documentation/RelNotes/2.15.3.adoc
diff --git a/Documentation/RelNotes/2.15.4.txt b/Documentation/RelNotes/2.15.4.adoc
index dc241cba34..dc241cba34 100644
--- a/Documentation/RelNotes/2.15.4.txt
+++ b/Documentation/RelNotes/2.15.4.adoc
diff --git a/Documentation/RelNotes/2.16.0.txt b/Documentation/RelNotes/2.16.0.adoc
index b474781ed8..b474781ed8 100644
--- a/Documentation/RelNotes/2.16.0.txt
+++ b/Documentation/RelNotes/2.16.0.adoc
diff --git a/Documentation/RelNotes/2.16.1.txt b/Documentation/RelNotes/2.16.1.adoc
index 66e64361fd..66e64361fd 100644
--- a/Documentation/RelNotes/2.16.1.txt
+++ b/Documentation/RelNotes/2.16.1.adoc
diff --git a/Documentation/RelNotes/2.16.2.txt b/Documentation/RelNotes/2.16.2.adoc
index a216466d3d..a216466d3d 100644
--- a/Documentation/RelNotes/2.16.2.txt
+++ b/Documentation/RelNotes/2.16.2.adoc
diff --git a/Documentation/RelNotes/2.16.3.txt b/Documentation/RelNotes/2.16.3.adoc
index f0121a8f2d..f0121a8f2d 100644
--- a/Documentation/RelNotes/2.16.3.txt
+++ b/Documentation/RelNotes/2.16.3.adoc
diff --git a/Documentation/RelNotes/2.16.4.txt b/Documentation/RelNotes/2.16.4.adoc
index 6be538ba30..6be538ba30 100644
--- a/Documentation/RelNotes/2.16.4.txt
+++ b/Documentation/RelNotes/2.16.4.adoc
diff --git a/Documentation/RelNotes/2.16.5.txt b/Documentation/RelNotes/2.16.5.adoc
index cb8ee02a9a..cb8ee02a9a 100644
--- a/Documentation/RelNotes/2.16.5.txt
+++ b/Documentation/RelNotes/2.16.5.adoc
diff --git a/Documentation/RelNotes/2.16.6.txt b/Documentation/RelNotes/2.16.6.adoc
index 438306e60b..438306e60b 100644
--- a/Documentation/RelNotes/2.16.6.txt
+++ b/Documentation/RelNotes/2.16.6.adoc
diff --git a/Documentation/RelNotes/2.17.0.txt b/Documentation/RelNotes/2.17.0.adoc
index 8b17c26033..8b17c26033 100644
--- a/Documentation/RelNotes/2.17.0.txt
+++ b/Documentation/RelNotes/2.17.0.adoc
diff --git a/Documentation/RelNotes/2.17.1.txt b/Documentation/RelNotes/2.17.1.adoc
index e01384fe8e..e01384fe8e 100644
--- a/Documentation/RelNotes/2.17.1.txt
+++ b/Documentation/RelNotes/2.17.1.adoc
diff --git a/Documentation/RelNotes/2.17.2.txt b/Documentation/RelNotes/2.17.2.adoc
index ef021be870..ef021be870 100644
--- a/Documentation/RelNotes/2.17.2.txt
+++ b/Documentation/RelNotes/2.17.2.adoc
diff --git a/Documentation/RelNotes/2.17.3.txt b/Documentation/RelNotes/2.17.3.adoc
index 5a46c94271..5a46c94271 100644
--- a/Documentation/RelNotes/2.17.3.txt
+++ b/Documentation/RelNotes/2.17.3.adoc
diff --git a/Documentation/RelNotes/2.17.4.txt b/Documentation/RelNotes/2.17.4.adoc
index 7d794ca01a..7d794ca01a 100644
--- a/Documentation/RelNotes/2.17.4.txt
+++ b/Documentation/RelNotes/2.17.4.adoc
diff --git a/Documentation/RelNotes/2.17.5.txt b/Documentation/RelNotes/2.17.5.adoc
index 2abb821a73..2abb821a73 100644
--- a/Documentation/RelNotes/2.17.5.txt
+++ b/Documentation/RelNotes/2.17.5.adoc
diff --git a/Documentation/RelNotes/2.17.6.txt b/Documentation/RelNotes/2.17.6.adoc
index 2f181e8064..2f181e8064 100644
--- a/Documentation/RelNotes/2.17.6.txt
+++ b/Documentation/RelNotes/2.17.6.adoc
diff --git a/Documentation/RelNotes/2.18.0.txt b/Documentation/RelNotes/2.18.0.adoc
index 6c8a0e97c1..6c8a0e97c1 100644
--- a/Documentation/RelNotes/2.18.0.txt
+++ b/Documentation/RelNotes/2.18.0.adoc
diff --git a/Documentation/RelNotes/2.18.1.txt b/Documentation/RelNotes/2.18.1.adoc
index 2098cdd776..2098cdd776 100644
--- a/Documentation/RelNotes/2.18.1.txt
+++ b/Documentation/RelNotes/2.18.1.adoc
diff --git a/Documentation/RelNotes/2.18.2.txt b/Documentation/RelNotes/2.18.2.adoc
index 98b168aade..98b168aade 100644
--- a/Documentation/RelNotes/2.18.2.txt
+++ b/Documentation/RelNotes/2.18.2.adoc
diff --git a/Documentation/RelNotes/2.18.3.txt b/Documentation/RelNotes/2.18.3.adoc
index 25143f0cec..25143f0cec 100644
--- a/Documentation/RelNotes/2.18.3.txt
+++ b/Documentation/RelNotes/2.18.3.adoc
diff --git a/Documentation/RelNotes/2.18.4.txt b/Documentation/RelNotes/2.18.4.adoc
index e8ef858a00..e8ef858a00 100644
--- a/Documentation/RelNotes/2.18.4.txt
+++ b/Documentation/RelNotes/2.18.4.adoc
diff --git a/Documentation/RelNotes/2.18.5.txt b/Documentation/RelNotes/2.18.5.adoc
index dfb1de4ceb..dfb1de4ceb 100644
--- a/Documentation/RelNotes/2.18.5.txt
+++ b/Documentation/RelNotes/2.18.5.adoc
diff --git a/Documentation/RelNotes/2.19.0.txt b/Documentation/RelNotes/2.19.0.adoc
index 891c79b9cb..891c79b9cb 100644
--- a/Documentation/RelNotes/2.19.0.txt
+++ b/Documentation/RelNotes/2.19.0.adoc
diff --git a/Documentation/RelNotes/2.19.1.txt b/Documentation/RelNotes/2.19.1.adoc
index da7672674e..da7672674e 100644
--- a/Documentation/RelNotes/2.19.1.txt
+++ b/Documentation/RelNotes/2.19.1.adoc
diff --git a/Documentation/RelNotes/2.19.2.txt b/Documentation/RelNotes/2.19.2.adoc
index 759e6ca957..759e6ca957 100644
--- a/Documentation/RelNotes/2.19.2.txt
+++ b/Documentation/RelNotes/2.19.2.adoc
diff --git a/Documentation/RelNotes/2.19.3.txt b/Documentation/RelNotes/2.19.3.adoc
index 92d7f89de6..92d7f89de6 100644
--- a/Documentation/RelNotes/2.19.3.txt
+++ b/Documentation/RelNotes/2.19.3.adoc
diff --git a/Documentation/RelNotes/2.19.4.txt b/Documentation/RelNotes/2.19.4.adoc
index 35d0ae561b..35d0ae561b 100644
--- a/Documentation/RelNotes/2.19.4.txt
+++ b/Documentation/RelNotes/2.19.4.adoc
diff --git a/Documentation/RelNotes/2.19.5.txt b/Documentation/RelNotes/2.19.5.adoc
index 18a4dcbfd6..18a4dcbfd6 100644
--- a/Documentation/RelNotes/2.19.5.txt
+++ b/Documentation/RelNotes/2.19.5.adoc
diff --git a/Documentation/RelNotes/2.19.6.txt b/Documentation/RelNotes/2.19.6.adoc
index bcca6cd258..bcca6cd258 100644
--- a/Documentation/RelNotes/2.19.6.txt
+++ b/Documentation/RelNotes/2.19.6.adoc
diff --git a/Documentation/RelNotes/2.2.0.txt b/Documentation/RelNotes/2.2.0.adoc
index e98ecbcff6..e98ecbcff6 100644
--- a/Documentation/RelNotes/2.2.0.txt
+++ b/Documentation/RelNotes/2.2.0.adoc
diff --git a/Documentation/RelNotes/2.2.1.txt b/Documentation/RelNotes/2.2.1.adoc
index d5a3cd9e73..d5a3cd9e73 100644
--- a/Documentation/RelNotes/2.2.1.txt
+++ b/Documentation/RelNotes/2.2.1.adoc
diff --git a/Documentation/RelNotes/2.2.2.txt b/Documentation/RelNotes/2.2.2.adoc
index b19a35d94f..b19a35d94f 100644
--- a/Documentation/RelNotes/2.2.2.txt
+++ b/Documentation/RelNotes/2.2.2.adoc
diff --git a/Documentation/RelNotes/2.2.3.txt b/Documentation/RelNotes/2.2.3.adoc
index 5bfffa4106..5bfffa4106 100644
--- a/Documentation/RelNotes/2.2.3.txt
+++ b/Documentation/RelNotes/2.2.3.adoc
diff --git a/Documentation/RelNotes/2.20.0.txt b/Documentation/RelNotes/2.20.0.adoc
index 3dd7e6e1fc..3dd7e6e1fc 100644
--- a/Documentation/RelNotes/2.20.0.txt
+++ b/Documentation/RelNotes/2.20.0.adoc
diff --git a/Documentation/RelNotes/2.20.1.txt b/Documentation/RelNotes/2.20.1.adoc
index dcba888dba..dcba888dba 100644
--- a/Documentation/RelNotes/2.20.1.txt
+++ b/Documentation/RelNotes/2.20.1.adoc
diff --git a/Documentation/RelNotes/2.20.2.txt b/Documentation/RelNotes/2.20.2.adoc
index 8e680cb9fb..8e680cb9fb 100644
--- a/Documentation/RelNotes/2.20.2.txt
+++ b/Documentation/RelNotes/2.20.2.adoc
diff --git a/Documentation/RelNotes/2.20.3.txt b/Documentation/RelNotes/2.20.3.adoc
index f6eccd103b..f6eccd103b 100644
--- a/Documentation/RelNotes/2.20.3.txt
+++ b/Documentation/RelNotes/2.20.3.adoc
diff --git a/Documentation/RelNotes/2.20.4.txt b/Documentation/RelNotes/2.20.4.adoc
index 5a9e24e470..5a9e24e470 100644
--- a/Documentation/RelNotes/2.20.4.txt
+++ b/Documentation/RelNotes/2.20.4.adoc
diff --git a/Documentation/RelNotes/2.20.5.txt b/Documentation/RelNotes/2.20.5.adoc
index 1dfb784ded..1dfb784ded 100644
--- a/Documentation/RelNotes/2.20.5.txt
+++ b/Documentation/RelNotes/2.20.5.adoc
diff --git a/Documentation/RelNotes/2.21.0.txt b/Documentation/RelNotes/2.21.0.adoc
index 7a49deddf3..7a49deddf3 100644
--- a/Documentation/RelNotes/2.21.0.txt
+++ b/Documentation/RelNotes/2.21.0.adoc
diff --git a/Documentation/RelNotes/2.21.1.txt b/Documentation/RelNotes/2.21.1.adoc
index b7594151e4..b7594151e4 100644
--- a/Documentation/RelNotes/2.21.1.txt
+++ b/Documentation/RelNotes/2.21.1.adoc
diff --git a/Documentation/RelNotes/2.21.2.txt b/Documentation/RelNotes/2.21.2.adoc
index a0fb83bb53..a0fb83bb53 100644
--- a/Documentation/RelNotes/2.21.2.txt
+++ b/Documentation/RelNotes/2.21.2.adoc
diff --git a/Documentation/RelNotes/2.21.3.txt b/Documentation/RelNotes/2.21.3.adoc
index 2ca0aa5c62..2ca0aa5c62 100644
--- a/Documentation/RelNotes/2.21.3.txt
+++ b/Documentation/RelNotes/2.21.3.adoc
diff --git a/Documentation/RelNotes/2.21.4.txt b/Documentation/RelNotes/2.21.4.adoc
index 0089dd6702..0089dd6702 100644
--- a/Documentation/RelNotes/2.21.4.txt
+++ b/Documentation/RelNotes/2.21.4.adoc
diff --git a/Documentation/RelNotes/2.22.0.txt b/Documentation/RelNotes/2.22.0.adoc
index 91e6ae9887..91e6ae9887 100644
--- a/Documentation/RelNotes/2.22.0.txt
+++ b/Documentation/RelNotes/2.22.0.adoc
diff --git a/Documentation/RelNotes/2.22.1.txt b/Documentation/RelNotes/2.22.1.adoc
index 432762f270..432762f270 100644
--- a/Documentation/RelNotes/2.22.1.txt
+++ b/Documentation/RelNotes/2.22.1.adoc
diff --git a/Documentation/RelNotes/2.22.2.txt b/Documentation/RelNotes/2.22.2.adoc
index 940a23f0d9..940a23f0d9 100644
--- a/Documentation/RelNotes/2.22.2.txt
+++ b/Documentation/RelNotes/2.22.2.adoc
diff --git a/Documentation/RelNotes/2.22.3.txt b/Documentation/RelNotes/2.22.3.adoc
index 57296f6d17..57296f6d17 100644
--- a/Documentation/RelNotes/2.22.3.txt
+++ b/Documentation/RelNotes/2.22.3.adoc
diff --git a/Documentation/RelNotes/2.22.4.txt b/Documentation/RelNotes/2.22.4.adoc
index 8b5f3e3f37..8b5f3e3f37 100644
--- a/Documentation/RelNotes/2.22.4.txt
+++ b/Documentation/RelNotes/2.22.4.adoc
diff --git a/Documentation/RelNotes/2.22.5.txt b/Documentation/RelNotes/2.22.5.adoc
index 6b280d9321..6b280d9321 100644
--- a/Documentation/RelNotes/2.22.5.txt
+++ b/Documentation/RelNotes/2.22.5.adoc
diff --git a/Documentation/RelNotes/2.23.0.txt b/Documentation/RelNotes/2.23.0.adoc
index e3c4e78265..e3c4e78265 100644
--- a/Documentation/RelNotes/2.23.0.txt
+++ b/Documentation/RelNotes/2.23.0.adoc
diff --git a/Documentation/RelNotes/2.23.1.txt b/Documentation/RelNotes/2.23.1.adoc
index 2083b492ce..2083b492ce 100644
--- a/Documentation/RelNotes/2.23.1.txt
+++ b/Documentation/RelNotes/2.23.1.adoc
diff --git a/Documentation/RelNotes/2.23.2.txt b/Documentation/RelNotes/2.23.2.adoc
index b697cbe0e3..b697cbe0e3 100644
--- a/Documentation/RelNotes/2.23.2.txt
+++ b/Documentation/RelNotes/2.23.2.adoc
diff --git a/Documentation/RelNotes/2.23.3.txt b/Documentation/RelNotes/2.23.3.adoc
index 2e35490137..2e35490137 100644
--- a/Documentation/RelNotes/2.23.3.txt
+++ b/Documentation/RelNotes/2.23.3.adoc
diff --git a/Documentation/RelNotes/2.23.4.txt b/Documentation/RelNotes/2.23.4.adoc
index 6e5424d0da..6e5424d0da 100644
--- a/Documentation/RelNotes/2.23.4.txt
+++ b/Documentation/RelNotes/2.23.4.adoc
diff --git a/Documentation/RelNotes/2.24.0.txt b/Documentation/RelNotes/2.24.0.adoc
index bde154124c..bde154124c 100644
--- a/Documentation/RelNotes/2.24.0.txt
+++ b/Documentation/RelNotes/2.24.0.adoc
diff --git a/Documentation/RelNotes/2.24.1.txt b/Documentation/RelNotes/2.24.1.adoc
index 18104850fe..18104850fe 100644
--- a/Documentation/RelNotes/2.24.1.txt
+++ b/Documentation/RelNotes/2.24.1.adoc
diff --git a/Documentation/RelNotes/2.24.2.txt b/Documentation/RelNotes/2.24.2.adoc
index 0049f65503..0049f65503 100644
--- a/Documentation/RelNotes/2.24.2.txt
+++ b/Documentation/RelNotes/2.24.2.adoc
diff --git a/Documentation/RelNotes/2.24.3.txt b/Documentation/RelNotes/2.24.3.adoc
index 5302e0f73b..5302e0f73b 100644
--- a/Documentation/RelNotes/2.24.3.txt
+++ b/Documentation/RelNotes/2.24.3.adoc
diff --git a/Documentation/RelNotes/2.24.4.txt b/Documentation/RelNotes/2.24.4.adoc
index 4e216eec2a..4e216eec2a 100644
--- a/Documentation/RelNotes/2.24.4.txt
+++ b/Documentation/RelNotes/2.24.4.adoc
diff --git a/Documentation/RelNotes/2.25.0.txt b/Documentation/RelNotes/2.25.0.adoc
index 91ceb34927..91ceb34927 100644
--- a/Documentation/RelNotes/2.25.0.txt
+++ b/Documentation/RelNotes/2.25.0.adoc
diff --git a/Documentation/RelNotes/2.25.1.txt b/Documentation/RelNotes/2.25.1.adoc
index cd869b02bb..cd869b02bb 100644
--- a/Documentation/RelNotes/2.25.1.txt
+++ b/Documentation/RelNotes/2.25.1.adoc
diff --git a/Documentation/RelNotes/2.25.2.txt b/Documentation/RelNotes/2.25.2.adoc
index 303c53a17f..303c53a17f 100644
--- a/Documentation/RelNotes/2.25.2.txt
+++ b/Documentation/RelNotes/2.25.2.adoc
diff --git a/Documentation/RelNotes/2.25.3.txt b/Documentation/RelNotes/2.25.3.adoc
index 15f7f21f10..15f7f21f10 100644
--- a/Documentation/RelNotes/2.25.3.txt
+++ b/Documentation/RelNotes/2.25.3.adoc
diff --git a/Documentation/RelNotes/2.25.4.txt b/Documentation/RelNotes/2.25.4.adoc
index 0dbb5daeec..0dbb5daeec 100644
--- a/Documentation/RelNotes/2.25.4.txt
+++ b/Documentation/RelNotes/2.25.4.adoc
diff --git a/Documentation/RelNotes/2.25.5.txt b/Documentation/RelNotes/2.25.5.adoc
index fcb9566b15..fcb9566b15 100644
--- a/Documentation/RelNotes/2.25.5.txt
+++ b/Documentation/RelNotes/2.25.5.adoc
diff --git a/Documentation/RelNotes/2.26.0.txt b/Documentation/RelNotes/2.26.0.adoc
index 3a7a734c26..3a7a734c26 100644
--- a/Documentation/RelNotes/2.26.0.txt
+++ b/Documentation/RelNotes/2.26.0.adoc
diff --git a/Documentation/RelNotes/2.26.1.txt b/Documentation/RelNotes/2.26.1.adoc
index 1b4ecb3fdc..1b4ecb3fdc 100644
--- a/Documentation/RelNotes/2.26.1.txt
+++ b/Documentation/RelNotes/2.26.1.adoc
diff --git a/Documentation/RelNotes/2.26.2.txt b/Documentation/RelNotes/2.26.2.adoc
index d434d0c695..d434d0c695 100644
--- a/Documentation/RelNotes/2.26.2.txt
+++ b/Documentation/RelNotes/2.26.2.adoc
diff --git a/Documentation/RelNotes/2.26.3.txt b/Documentation/RelNotes/2.26.3.adoc
index 4111c38f0a..4111c38f0a 100644
--- a/Documentation/RelNotes/2.26.3.txt
+++ b/Documentation/RelNotes/2.26.3.adoc
diff --git a/Documentation/RelNotes/2.27.0.txt b/Documentation/RelNotes/2.27.0.adoc
index 15518d06c1..15518d06c1 100644
--- a/Documentation/RelNotes/2.27.0.txt
+++ b/Documentation/RelNotes/2.27.0.adoc
diff --git a/Documentation/RelNotes/2.27.1.txt b/Documentation/RelNotes/2.27.1.adoc
index a1e08a9f72..a1e08a9f72 100644
--- a/Documentation/RelNotes/2.27.1.txt
+++ b/Documentation/RelNotes/2.27.1.adoc
diff --git a/Documentation/RelNotes/2.28.0.txt b/Documentation/RelNotes/2.28.0.adoc
index 6baf781380..6baf781380 100644
--- a/Documentation/RelNotes/2.28.0.txt
+++ b/Documentation/RelNotes/2.28.0.adoc
diff --git a/Documentation/RelNotes/2.28.1.txt b/Documentation/RelNotes/2.28.1.adoc
index 8484c8297c..8484c8297c 100644
--- a/Documentation/RelNotes/2.28.1.txt
+++ b/Documentation/RelNotes/2.28.1.adoc
diff --git a/Documentation/RelNotes/2.29.0.txt b/Documentation/RelNotes/2.29.0.adoc
index 1f41302ebb..1f41302ebb 100644
--- a/Documentation/RelNotes/2.29.0.txt
+++ b/Documentation/RelNotes/2.29.0.adoc
diff --git a/Documentation/RelNotes/2.29.1.txt b/Documentation/RelNotes/2.29.1.adoc
index 295ee2135f..295ee2135f 100644
--- a/Documentation/RelNotes/2.29.1.txt
+++ b/Documentation/RelNotes/2.29.1.adoc
diff --git a/Documentation/RelNotes/2.29.2.txt b/Documentation/RelNotes/2.29.2.adoc
index 632b5b580a..632b5b580a 100644
--- a/Documentation/RelNotes/2.29.2.txt
+++ b/Documentation/RelNotes/2.29.2.adoc
diff --git a/Documentation/RelNotes/2.29.3.txt b/Documentation/RelNotes/2.29.3.adoc
index e10eedb35a..e10eedb35a 100644
--- a/Documentation/RelNotes/2.29.3.txt
+++ b/Documentation/RelNotes/2.29.3.adoc
diff --git a/Documentation/RelNotes/2.3.0.txt b/Documentation/RelNotes/2.3.0.adoc
index e3c639c840..e3c639c840 100644
--- a/Documentation/RelNotes/2.3.0.txt
+++ b/Documentation/RelNotes/2.3.0.adoc
diff --git a/Documentation/RelNotes/2.3.1.txt b/Documentation/RelNotes/2.3.1.adoc
index cf96186288..cf96186288 100644
--- a/Documentation/RelNotes/2.3.1.txt
+++ b/Documentation/RelNotes/2.3.1.adoc
diff --git a/Documentation/RelNotes/2.3.10.txt b/Documentation/RelNotes/2.3.10.adoc
index 20c2d2cacc..20c2d2cacc 100644
--- a/Documentation/RelNotes/2.3.10.txt
+++ b/Documentation/RelNotes/2.3.10.adoc
diff --git a/Documentation/RelNotes/2.3.2.txt b/Documentation/RelNotes/2.3.2.adoc
index 93462e45c2..93462e45c2 100644
--- a/Documentation/RelNotes/2.3.2.txt
+++ b/Documentation/RelNotes/2.3.2.adoc
diff --git a/Documentation/RelNotes/2.3.3.txt b/Documentation/RelNotes/2.3.3.adoc
index 850dc68ede..850dc68ede 100644
--- a/Documentation/RelNotes/2.3.3.txt
+++ b/Documentation/RelNotes/2.3.3.adoc
diff --git a/Documentation/RelNotes/2.3.4.txt b/Documentation/RelNotes/2.3.4.adoc
index 094c7b853b..094c7b853b 100644
--- a/Documentation/RelNotes/2.3.4.txt
+++ b/Documentation/RelNotes/2.3.4.adoc
diff --git a/Documentation/RelNotes/2.3.5.txt b/Documentation/RelNotes/2.3.5.adoc
index 5b309db689..5b309db689 100644
--- a/Documentation/RelNotes/2.3.5.txt
+++ b/Documentation/RelNotes/2.3.5.adoc
diff --git a/Documentation/RelNotes/2.3.6.txt b/Documentation/RelNotes/2.3.6.adoc
index 432f770ef3..432f770ef3 100644
--- a/Documentation/RelNotes/2.3.6.txt
+++ b/Documentation/RelNotes/2.3.6.adoc
diff --git a/Documentation/RelNotes/2.3.7.txt b/Documentation/RelNotes/2.3.7.adoc
index 5769184081..5769184081 100644
--- a/Documentation/RelNotes/2.3.7.txt
+++ b/Documentation/RelNotes/2.3.7.adoc
diff --git a/Documentation/RelNotes/2.3.8.txt b/Documentation/RelNotes/2.3.8.adoc
index 0b67268a96..0b67268a96 100644
--- a/Documentation/RelNotes/2.3.8.txt
+++ b/Documentation/RelNotes/2.3.8.adoc
diff --git a/Documentation/RelNotes/2.3.9.txt b/Documentation/RelNotes/2.3.9.adoc
index 1a2ad3235a..1a2ad3235a 100644
--- a/Documentation/RelNotes/2.3.9.txt
+++ b/Documentation/RelNotes/2.3.9.adoc
diff --git a/Documentation/RelNotes/2.30.0.txt b/Documentation/RelNotes/2.30.0.adoc
index c2f1dc7b06..c2f1dc7b06 100644
--- a/Documentation/RelNotes/2.30.0.txt
+++ b/Documentation/RelNotes/2.30.0.adoc
diff --git a/Documentation/RelNotes/2.30.1.txt b/Documentation/RelNotes/2.30.1.adoc
index 249ef1492f..249ef1492f 100644
--- a/Documentation/RelNotes/2.30.1.txt
+++ b/Documentation/RelNotes/2.30.1.adoc
diff --git a/Documentation/RelNotes/2.30.2.txt b/Documentation/RelNotes/2.30.2.adoc
index bada398501..bada398501 100644
--- a/Documentation/RelNotes/2.30.2.txt
+++ b/Documentation/RelNotes/2.30.2.adoc
diff --git a/Documentation/RelNotes/2.30.3.txt b/Documentation/RelNotes/2.30.3.adoc
index 31b2a4daa6..31b2a4daa6 100644
--- a/Documentation/RelNotes/2.30.3.txt
+++ b/Documentation/RelNotes/2.30.3.adoc
diff --git a/Documentation/RelNotes/2.30.4.txt b/Documentation/RelNotes/2.30.4.adoc
index 4eedb74b16..4eedb74b16 100644
--- a/Documentation/RelNotes/2.30.4.txt
+++ b/Documentation/RelNotes/2.30.4.adoc
diff --git a/Documentation/RelNotes/2.30.5.txt b/Documentation/RelNotes/2.30.5.adoc
index 5191cab3ae..5191cab3ae 100644
--- a/Documentation/RelNotes/2.30.5.txt
+++ b/Documentation/RelNotes/2.30.5.adoc
diff --git a/Documentation/RelNotes/2.30.6.txt b/Documentation/RelNotes/2.30.6.adoc
index d649071b79..d649071b79 100644
--- a/Documentation/RelNotes/2.30.6.txt
+++ b/Documentation/RelNotes/2.30.6.adoc
diff --git a/Documentation/RelNotes/2.30.7.txt b/Documentation/RelNotes/2.30.7.adoc
index 285beed232..285beed232 100644
--- a/Documentation/RelNotes/2.30.7.txt
+++ b/Documentation/RelNotes/2.30.7.adoc
diff --git a/Documentation/RelNotes/2.30.8.txt b/Documentation/RelNotes/2.30.8.adoc
index 5ed3efbd6a..5ed3efbd6a 100644
--- a/Documentation/RelNotes/2.30.8.txt
+++ b/Documentation/RelNotes/2.30.8.adoc
diff --git a/Documentation/RelNotes/2.30.9.txt b/Documentation/RelNotes/2.30.9.adoc
index 708d626ce6..708d626ce6 100644
--- a/Documentation/RelNotes/2.30.9.txt
+++ b/Documentation/RelNotes/2.30.9.adoc
diff --git a/Documentation/RelNotes/2.31.0.txt b/Documentation/RelNotes/2.31.0.adoc
index cf0c7d8d40..cf0c7d8d40 100644
--- a/Documentation/RelNotes/2.31.0.txt
+++ b/Documentation/RelNotes/2.31.0.adoc
diff --git a/Documentation/RelNotes/2.31.1.txt b/Documentation/RelNotes/2.31.1.adoc
index f9b06b8e1b..f9b06b8e1b 100644
--- a/Documentation/RelNotes/2.31.1.txt
+++ b/Documentation/RelNotes/2.31.1.adoc
diff --git a/Documentation/RelNotes/2.31.2.txt b/Documentation/RelNotes/2.31.2.adoc
index aa13a5b022..aa13a5b022 100644
--- a/Documentation/RelNotes/2.31.2.txt
+++ b/Documentation/RelNotes/2.31.2.adoc
diff --git a/Documentation/RelNotes/2.31.3.txt b/Documentation/RelNotes/2.31.3.adoc
index ca143abad0..ca143abad0 100644
--- a/Documentation/RelNotes/2.31.3.txt
+++ b/Documentation/RelNotes/2.31.3.adoc
diff --git a/Documentation/RelNotes/2.31.4.txt b/Documentation/RelNotes/2.31.4.adoc
index 97a91fd07a..97a91fd07a 100644
--- a/Documentation/RelNotes/2.31.4.txt
+++ b/Documentation/RelNotes/2.31.4.adoc
diff --git a/Documentation/RelNotes/2.31.5.txt b/Documentation/RelNotes/2.31.5.adoc
index 0d87e6e03f..0d87e6e03f 100644
--- a/Documentation/RelNotes/2.31.5.txt
+++ b/Documentation/RelNotes/2.31.5.adoc
diff --git a/Documentation/RelNotes/2.31.6.txt b/Documentation/RelNotes/2.31.6.adoc
index 425a51875a..425a51875a 100644
--- a/Documentation/RelNotes/2.31.6.txt
+++ b/Documentation/RelNotes/2.31.6.adoc
diff --git a/Documentation/RelNotes/2.31.7.txt b/Documentation/RelNotes/2.31.7.adoc
index dd44d5bc62..dd44d5bc62 100644
--- a/Documentation/RelNotes/2.31.7.txt
+++ b/Documentation/RelNotes/2.31.7.adoc
diff --git a/Documentation/RelNotes/2.31.8.txt b/Documentation/RelNotes/2.31.8.adoc
index 0aa3080780..0aa3080780 100644
--- a/Documentation/RelNotes/2.31.8.txt
+++ b/Documentation/RelNotes/2.31.8.adoc
diff --git a/Documentation/RelNotes/2.32.0.txt b/Documentation/RelNotes/2.32.0.adoc
index 87d56fa1aa..87d56fa1aa 100644
--- a/Documentation/RelNotes/2.32.0.txt
+++ b/Documentation/RelNotes/2.32.0.adoc
diff --git a/Documentation/RelNotes/2.32.1.txt b/Documentation/RelNotes/2.32.1.adoc
index 7dcca13b92..7dcca13b92 100644
--- a/Documentation/RelNotes/2.32.1.txt
+++ b/Documentation/RelNotes/2.32.1.adoc
diff --git a/Documentation/RelNotes/2.32.2.txt b/Documentation/RelNotes/2.32.2.adoc
index cf49695f2f..cf49695f2f 100644
--- a/Documentation/RelNotes/2.32.2.txt
+++ b/Documentation/RelNotes/2.32.2.adoc
diff --git a/Documentation/RelNotes/2.32.3.txt b/Documentation/RelNotes/2.32.3.adoc
index 583fabe684..583fabe684 100644
--- a/Documentation/RelNotes/2.32.3.txt
+++ b/Documentation/RelNotes/2.32.3.adoc
diff --git a/Documentation/RelNotes/2.32.4.txt b/Documentation/RelNotes/2.32.4.adoc
index 76c67b209e..76c67b209e 100644
--- a/Documentation/RelNotes/2.32.4.txt
+++ b/Documentation/RelNotes/2.32.4.adoc
diff --git a/Documentation/RelNotes/2.32.5.txt b/Documentation/RelNotes/2.32.5.adoc
index a8cad1a05b..a8cad1a05b 100644
--- a/Documentation/RelNotes/2.32.5.txt
+++ b/Documentation/RelNotes/2.32.5.adoc
diff --git a/Documentation/RelNotes/2.32.6.txt b/Documentation/RelNotes/2.32.6.adoc
index fd659612e3..fd659612e3 100644
--- a/Documentation/RelNotes/2.32.6.txt
+++ b/Documentation/RelNotes/2.32.6.adoc
diff --git a/Documentation/RelNotes/2.32.7.txt b/Documentation/RelNotes/2.32.7.adoc
index 7bb35388b5..7bb35388b5 100644
--- a/Documentation/RelNotes/2.32.7.txt
+++ b/Documentation/RelNotes/2.32.7.adoc
diff --git a/Documentation/RelNotes/2.33.0.txt b/Documentation/RelNotes/2.33.0.adoc
index 893c18bfdd..893c18bfdd 100644
--- a/Documentation/RelNotes/2.33.0.txt
+++ b/Documentation/RelNotes/2.33.0.adoc
diff --git a/Documentation/RelNotes/2.33.1.txt b/Documentation/RelNotes/2.33.1.adoc
index b71738e654..b71738e654 100644
--- a/Documentation/RelNotes/2.33.1.txt
+++ b/Documentation/RelNotes/2.33.1.adoc
diff --git a/Documentation/RelNotes/2.33.2.txt b/Documentation/RelNotes/2.33.2.adoc
index e504489d61..e504489d61 100644
--- a/Documentation/RelNotes/2.33.2.txt
+++ b/Documentation/RelNotes/2.33.2.adoc
diff --git a/Documentation/RelNotes/2.33.3.txt b/Documentation/RelNotes/2.33.3.adoc
index e2bada12a1..e2bada12a1 100644
--- a/Documentation/RelNotes/2.33.3.txt
+++ b/Documentation/RelNotes/2.33.3.adoc
diff --git a/Documentation/RelNotes/2.33.4.txt b/Documentation/RelNotes/2.33.4.adoc
index a145cc25de..a145cc25de 100644
--- a/Documentation/RelNotes/2.33.4.txt
+++ b/Documentation/RelNotes/2.33.4.adoc
diff --git a/Documentation/RelNotes/2.33.5.txt b/Documentation/RelNotes/2.33.5.adoc
index a63652602b..a63652602b 100644
--- a/Documentation/RelNotes/2.33.5.txt
+++ b/Documentation/RelNotes/2.33.5.adoc
diff --git a/Documentation/RelNotes/2.33.6.txt b/Documentation/RelNotes/2.33.6.adoc
index b63e4e6256..b63e4e6256 100644
--- a/Documentation/RelNotes/2.33.6.txt
+++ b/Documentation/RelNotes/2.33.6.adoc
diff --git a/Documentation/RelNotes/2.33.7.txt b/Documentation/RelNotes/2.33.7.adoc
index 078a837cb4..078a837cb4 100644
--- a/Documentation/RelNotes/2.33.7.txt
+++ b/Documentation/RelNotes/2.33.7.adoc
diff --git a/Documentation/RelNotes/2.33.8.txt b/Documentation/RelNotes/2.33.8.adoc
index d8cf4c7f3a..d8cf4c7f3a 100644
--- a/Documentation/RelNotes/2.33.8.txt
+++ b/Documentation/RelNotes/2.33.8.adoc
diff --git a/Documentation/RelNotes/2.34.0.txt b/Documentation/RelNotes/2.34.0.adoc
index 75d4fdfde7..75d4fdfde7 100644
--- a/Documentation/RelNotes/2.34.0.txt
+++ b/Documentation/RelNotes/2.34.0.adoc
diff --git a/Documentation/RelNotes/2.34.1.txt b/Documentation/RelNotes/2.34.1.adoc
index ad404e9aa0..ad404e9aa0 100644
--- a/Documentation/RelNotes/2.34.1.txt
+++ b/Documentation/RelNotes/2.34.1.adoc
diff --git a/Documentation/RelNotes/2.34.2.txt b/Documentation/RelNotes/2.34.2.adoc
index 0c32cd844b..0c32cd844b 100644
--- a/Documentation/RelNotes/2.34.2.txt
+++ b/Documentation/RelNotes/2.34.2.adoc
diff --git a/Documentation/RelNotes/2.34.3.txt b/Documentation/RelNotes/2.34.3.adoc
index 10f6171ace..10f6171ace 100644
--- a/Documentation/RelNotes/2.34.3.txt
+++ b/Documentation/RelNotes/2.34.3.adoc
diff --git a/Documentation/RelNotes/2.34.4.txt b/Documentation/RelNotes/2.34.4.adoc
index 2a6b223403..2a6b223403 100644
--- a/Documentation/RelNotes/2.34.4.txt
+++ b/Documentation/RelNotes/2.34.4.adoc
diff --git a/Documentation/RelNotes/2.34.5.txt b/Documentation/RelNotes/2.34.5.adoc
index 0e8999204d..0e8999204d 100644
--- a/Documentation/RelNotes/2.34.5.txt
+++ b/Documentation/RelNotes/2.34.5.adoc
diff --git a/Documentation/RelNotes/2.34.6.txt b/Documentation/RelNotes/2.34.6.adoc
index b32080dba8..b32080dba8 100644
--- a/Documentation/RelNotes/2.34.6.txt
+++ b/Documentation/RelNotes/2.34.6.adoc
diff --git a/Documentation/RelNotes/2.34.7.txt b/Documentation/RelNotes/2.34.7.adoc
index 88898adacc..88898adacc 100644
--- a/Documentation/RelNotes/2.34.7.txt
+++ b/Documentation/RelNotes/2.34.7.adoc
diff --git a/Documentation/RelNotes/2.34.8.txt b/Documentation/RelNotes/2.34.8.adoc
index 2b5bd7d9a3..2b5bd7d9a3 100644
--- a/Documentation/RelNotes/2.34.8.txt
+++ b/Documentation/RelNotes/2.34.8.adoc
diff --git a/Documentation/RelNotes/2.35.0.txt b/Documentation/RelNotes/2.35.0.adoc
index d69b50d180..d69b50d180 100644
--- a/Documentation/RelNotes/2.35.0.txt
+++ b/Documentation/RelNotes/2.35.0.adoc
diff --git a/Documentation/RelNotes/2.35.1.txt b/Documentation/RelNotes/2.35.1.adoc
index 726ba250ef..726ba250ef 100644
--- a/Documentation/RelNotes/2.35.1.txt
+++ b/Documentation/RelNotes/2.35.1.adoc
diff --git a/Documentation/RelNotes/2.35.2.txt b/Documentation/RelNotes/2.35.2.adoc
index 290bfa9ea4..290bfa9ea4 100644
--- a/Documentation/RelNotes/2.35.2.txt
+++ b/Documentation/RelNotes/2.35.2.adoc
diff --git a/Documentation/RelNotes/2.35.3.txt b/Documentation/RelNotes/2.35.3.adoc
index 5458ba3441..5458ba3441 100644
--- a/Documentation/RelNotes/2.35.3.txt
+++ b/Documentation/RelNotes/2.35.3.adoc
diff --git a/Documentation/RelNotes/2.35.4.txt b/Documentation/RelNotes/2.35.4.adoc
index 47abd5ad45..47abd5ad45 100644
--- a/Documentation/RelNotes/2.35.4.txt
+++ b/Documentation/RelNotes/2.35.4.adoc
diff --git a/Documentation/RelNotes/2.35.5.txt b/Documentation/RelNotes/2.35.5.adoc
index e19cc48b33..e19cc48b33 100644
--- a/Documentation/RelNotes/2.35.5.txt
+++ b/Documentation/RelNotes/2.35.5.adoc
diff --git a/Documentation/RelNotes/2.35.6.txt b/Documentation/RelNotes/2.35.6.adoc
index e7ca57bb41..e7ca57bb41 100644
--- a/Documentation/RelNotes/2.35.6.txt
+++ b/Documentation/RelNotes/2.35.6.adoc
diff --git a/Documentation/RelNotes/2.35.7.txt b/Documentation/RelNotes/2.35.7.adoc
index 42baabfc3b..42baabfc3b 100644
--- a/Documentation/RelNotes/2.35.7.txt
+++ b/Documentation/RelNotes/2.35.7.adoc
diff --git a/Documentation/RelNotes/2.35.8.txt b/Documentation/RelNotes/2.35.8.adoc
index 3c9c094c2b..3c9c094c2b 100644
--- a/Documentation/RelNotes/2.35.8.txt
+++ b/Documentation/RelNotes/2.35.8.adoc
diff --git a/Documentation/RelNotes/2.36.0.txt b/Documentation/RelNotes/2.36.0.adoc
index e477fba12d..e477fba12d 100644
--- a/Documentation/RelNotes/2.36.0.txt
+++ b/Documentation/RelNotes/2.36.0.adoc
diff --git a/Documentation/RelNotes/2.36.1.txt b/Documentation/RelNotes/2.36.1.adoc
index a9617095db..a9617095db 100644
--- a/Documentation/RelNotes/2.36.1.txt
+++ b/Documentation/RelNotes/2.36.1.adoc
diff --git a/Documentation/RelNotes/2.36.2.txt b/Documentation/RelNotes/2.36.2.adoc
index 958f5b4102..958f5b4102 100644
--- a/Documentation/RelNotes/2.36.2.txt
+++ b/Documentation/RelNotes/2.36.2.adoc
diff --git a/Documentation/RelNotes/2.36.3.txt b/Documentation/RelNotes/2.36.3.adoc
index 56db77b5bd..56db77b5bd 100644
--- a/Documentation/RelNotes/2.36.3.txt
+++ b/Documentation/RelNotes/2.36.3.adoc
diff --git a/Documentation/RelNotes/2.36.4.txt b/Documentation/RelNotes/2.36.4.adoc
index 58fb93a35f..58fb93a35f 100644
--- a/Documentation/RelNotes/2.36.4.txt
+++ b/Documentation/RelNotes/2.36.4.adoc
diff --git a/Documentation/RelNotes/2.36.5.txt b/Documentation/RelNotes/2.36.5.adoc
index 8a098c7916..8a098c7916 100644
--- a/Documentation/RelNotes/2.36.5.txt
+++ b/Documentation/RelNotes/2.36.5.adoc
diff --git a/Documentation/RelNotes/2.36.6.txt b/Documentation/RelNotes/2.36.6.adoc
index e1edebcc43..e1edebcc43 100644
--- a/Documentation/RelNotes/2.36.6.txt
+++ b/Documentation/RelNotes/2.36.6.adoc
diff --git a/Documentation/RelNotes/2.37.0.txt b/Documentation/RelNotes/2.37.0.adoc
index 99dc7e32f8..99dc7e32f8 100644
--- a/Documentation/RelNotes/2.37.0.txt
+++ b/Documentation/RelNotes/2.37.0.adoc
diff --git a/Documentation/RelNotes/2.37.1.txt b/Documentation/RelNotes/2.37.1.adoc
index 84609327d1..84609327d1 100644
--- a/Documentation/RelNotes/2.37.1.txt
+++ b/Documentation/RelNotes/2.37.1.adoc
diff --git a/Documentation/RelNotes/2.37.2.txt b/Documentation/RelNotes/2.37.2.adoc
index d82b29e014..d82b29e014 100644
--- a/Documentation/RelNotes/2.37.2.txt
+++ b/Documentation/RelNotes/2.37.2.adoc
diff --git a/Documentation/RelNotes/2.37.3.txt b/Documentation/RelNotes/2.37.3.adoc
index d66689e598..d66689e598 100644
--- a/Documentation/RelNotes/2.37.3.txt
+++ b/Documentation/RelNotes/2.37.3.adoc
diff --git a/Documentation/RelNotes/2.37.4.txt b/Documentation/RelNotes/2.37.4.adoc
index e42a5c1620..e42a5c1620 100644
--- a/Documentation/RelNotes/2.37.4.txt
+++ b/Documentation/RelNotes/2.37.4.adoc
diff --git a/Documentation/RelNotes/2.37.5.txt b/Documentation/RelNotes/2.37.5.adoc
index faa1447292..faa1447292 100644
--- a/Documentation/RelNotes/2.37.5.txt
+++ b/Documentation/RelNotes/2.37.5.adoc
diff --git a/Documentation/RelNotes/2.37.6.txt b/Documentation/RelNotes/2.37.6.adoc
index 51dc149711..51dc149711 100644
--- a/Documentation/RelNotes/2.37.6.txt
+++ b/Documentation/RelNotes/2.37.6.adoc
diff --git a/Documentation/RelNotes/2.37.7.txt b/Documentation/RelNotes/2.37.7.adoc
index 4b8165f4b5..4b8165f4b5 100644
--- a/Documentation/RelNotes/2.37.7.txt
+++ b/Documentation/RelNotes/2.37.7.adoc
diff --git a/Documentation/RelNotes/2.38.0.txt b/Documentation/RelNotes/2.38.0.adoc
index 870581fc57..870581fc57 100644
--- a/Documentation/RelNotes/2.38.0.txt
+++ b/Documentation/RelNotes/2.38.0.adoc
diff --git a/Documentation/RelNotes/2.38.1.txt b/Documentation/RelNotes/2.38.1.adoc
index b2b5854aac..b2b5854aac 100644
--- a/Documentation/RelNotes/2.38.1.txt
+++ b/Documentation/RelNotes/2.38.1.adoc
diff --git a/Documentation/RelNotes/2.38.2.txt b/Documentation/RelNotes/2.38.2.adoc
index 92acb62bbb..92acb62bbb 100644
--- a/Documentation/RelNotes/2.38.2.txt
+++ b/Documentation/RelNotes/2.38.2.adoc
diff --git a/Documentation/RelNotes/2.38.3.txt b/Documentation/RelNotes/2.38.3.adoc
index 4a46bb4300..4a46bb4300 100644
--- a/Documentation/RelNotes/2.38.3.txt
+++ b/Documentation/RelNotes/2.38.3.adoc
diff --git a/Documentation/RelNotes/2.38.4.txt b/Documentation/RelNotes/2.38.4.adoc
index fdfde22022..fdfde22022 100644
--- a/Documentation/RelNotes/2.38.4.txt
+++ b/Documentation/RelNotes/2.38.4.adoc
diff --git a/Documentation/RelNotes/2.38.5.txt b/Documentation/RelNotes/2.38.5.adoc
index 2d1f3b1249..2d1f3b1249 100644
--- a/Documentation/RelNotes/2.38.5.txt
+++ b/Documentation/RelNotes/2.38.5.adoc
diff --git a/Documentation/RelNotes/2.39.0.txt b/Documentation/RelNotes/2.39.0.adoc
index 9bf00ece53..9bf00ece53 100644
--- a/Documentation/RelNotes/2.39.0.txt
+++ b/Documentation/RelNotes/2.39.0.adoc
diff --git a/Documentation/RelNotes/2.39.1.txt b/Documentation/RelNotes/2.39.1.adoc
index 60c86f4122..60c86f4122 100644
--- a/Documentation/RelNotes/2.39.1.txt
+++ b/Documentation/RelNotes/2.39.1.adoc
diff --git a/Documentation/RelNotes/2.39.2.txt b/Documentation/RelNotes/2.39.2.adoc
index ebb9900bc5..ebb9900bc5 100644
--- a/Documentation/RelNotes/2.39.2.txt
+++ b/Documentation/RelNotes/2.39.2.adoc
diff --git a/Documentation/RelNotes/2.39.3.txt b/Documentation/RelNotes/2.39.3.adoc
index 66351b65c2..66351b65c2 100644
--- a/Documentation/RelNotes/2.39.3.txt
+++ b/Documentation/RelNotes/2.39.3.adoc
diff --git a/Documentation/RelNotes/2.39.4.txt b/Documentation/RelNotes/2.39.4.adoc
index 7f54521fea..7f54521fea 100644
--- a/Documentation/RelNotes/2.39.4.txt
+++ b/Documentation/RelNotes/2.39.4.adoc
diff --git a/Documentation/RelNotes/2.39.5.txt b/Documentation/RelNotes/2.39.5.adoc
index 97c0185de4..97c0185de4 100644
--- a/Documentation/RelNotes/2.39.5.txt
+++ b/Documentation/RelNotes/2.39.5.adoc
diff --git a/Documentation/RelNotes/2.4.0.txt b/Documentation/RelNotes/2.4.0.adoc
index cde64be535..cde64be535 100644
--- a/Documentation/RelNotes/2.4.0.txt
+++ b/Documentation/RelNotes/2.4.0.adoc
diff --git a/Documentation/RelNotes/2.4.1.txt b/Documentation/RelNotes/2.4.1.adoc
index a65a6c5829..a65a6c5829 100644
--- a/Documentation/RelNotes/2.4.1.txt
+++ b/Documentation/RelNotes/2.4.1.adoc
diff --git a/Documentation/RelNotes/2.4.10.txt b/Documentation/RelNotes/2.4.10.adoc
index 702d8d4e22..702d8d4e22 100644
--- a/Documentation/RelNotes/2.4.10.txt
+++ b/Documentation/RelNotes/2.4.10.adoc
diff --git a/Documentation/RelNotes/2.4.11.txt b/Documentation/RelNotes/2.4.11.adoc
index 723360295c..723360295c 100644
--- a/Documentation/RelNotes/2.4.11.txt
+++ b/Documentation/RelNotes/2.4.11.adoc
diff --git a/Documentation/RelNotes/2.4.12.txt b/Documentation/RelNotes/2.4.12.adoc
index 7d15f94725..7d15f94725 100644
--- a/Documentation/RelNotes/2.4.12.txt
+++ b/Documentation/RelNotes/2.4.12.adoc
diff --git a/Documentation/RelNotes/2.4.2.txt b/Documentation/RelNotes/2.4.2.adoc
index 250cdc423c..250cdc423c 100644
--- a/Documentation/RelNotes/2.4.2.txt
+++ b/Documentation/RelNotes/2.4.2.adoc
diff --git a/Documentation/RelNotes/2.4.3.txt b/Documentation/RelNotes/2.4.3.adoc
index 422e930aa2..422e930aa2 100644
--- a/Documentation/RelNotes/2.4.3.txt
+++ b/Documentation/RelNotes/2.4.3.adoc
diff --git a/Documentation/RelNotes/2.4.4.txt b/Documentation/RelNotes/2.4.4.adoc
index f1ccd001be..f1ccd001be 100644
--- a/Documentation/RelNotes/2.4.4.txt
+++ b/Documentation/RelNotes/2.4.4.adoc
diff --git a/Documentation/RelNotes/2.4.5.txt b/Documentation/RelNotes/2.4.5.adoc
index 568297ccb7..568297ccb7 100644
--- a/Documentation/RelNotes/2.4.5.txt
+++ b/Documentation/RelNotes/2.4.5.adoc
diff --git a/Documentation/RelNotes/2.4.6.txt b/Documentation/RelNotes/2.4.6.adoc
index b53f353939..b53f353939 100644
--- a/Documentation/RelNotes/2.4.6.txt
+++ b/Documentation/RelNotes/2.4.6.adoc
diff --git a/Documentation/RelNotes/2.4.7.txt b/Documentation/RelNotes/2.4.7.adoc
index b3ac412b82..b3ac412b82 100644
--- a/Documentation/RelNotes/2.4.7.txt
+++ b/Documentation/RelNotes/2.4.7.adoc
diff --git a/Documentation/RelNotes/2.4.8.txt b/Documentation/RelNotes/2.4.8.adoc
index ad946b2673..ad946b2673 100644
--- a/Documentation/RelNotes/2.4.8.txt
+++ b/Documentation/RelNotes/2.4.8.adoc
diff --git a/Documentation/RelNotes/2.4.9.txt b/Documentation/RelNotes/2.4.9.adoc
index 09af9ddbc7..09af9ddbc7 100644
--- a/Documentation/RelNotes/2.4.9.txt
+++ b/Documentation/RelNotes/2.4.9.adoc
diff --git a/Documentation/RelNotes/2.40.0.txt b/Documentation/RelNotes/2.40.0.adoc
index 3ea445bf20..3ea445bf20 100644
--- a/Documentation/RelNotes/2.40.0.txt
+++ b/Documentation/RelNotes/2.40.0.adoc
diff --git a/Documentation/RelNotes/2.40.1.txt b/Documentation/RelNotes/2.40.1.adoc
index e72f6b1b25..e72f6b1b25 100644
--- a/Documentation/RelNotes/2.40.1.txt
+++ b/Documentation/RelNotes/2.40.1.adoc
diff --git a/Documentation/RelNotes/2.40.2.txt b/Documentation/RelNotes/2.40.2.adoc
index 646a2cc3eb..646a2cc3eb 100644
--- a/Documentation/RelNotes/2.40.2.txt
+++ b/Documentation/RelNotes/2.40.2.adoc
diff --git a/Documentation/RelNotes/2.40.3.txt b/Documentation/RelNotes/2.40.3.adoc
index 6ca088ec86..6ca088ec86 100644
--- a/Documentation/RelNotes/2.40.3.txt
+++ b/Documentation/RelNotes/2.40.3.adoc
diff --git a/Documentation/RelNotes/2.40.4.txt b/Documentation/RelNotes/2.40.4.adoc
index 0ff29f3cfc..0ff29f3cfc 100644
--- a/Documentation/RelNotes/2.40.4.txt
+++ b/Documentation/RelNotes/2.40.4.adoc
diff --git a/Documentation/RelNotes/2.41.0.txt b/Documentation/RelNotes/2.41.0.adoc
index 8a9e17016e..8a9e17016e 100644
--- a/Documentation/RelNotes/2.41.0.txt
+++ b/Documentation/RelNotes/2.41.0.adoc
diff --git a/Documentation/RelNotes/2.41.1.txt b/Documentation/RelNotes/2.41.1.adoc
index 9fb4c218b2..9fb4c218b2 100644
--- a/Documentation/RelNotes/2.41.1.txt
+++ b/Documentation/RelNotes/2.41.1.adoc
diff --git a/Documentation/RelNotes/2.41.2.txt b/Documentation/RelNotes/2.41.2.adoc
index f94afde8c2..f94afde8c2 100644
--- a/Documentation/RelNotes/2.41.2.txt
+++ b/Documentation/RelNotes/2.41.2.adoc
diff --git a/Documentation/RelNotes/2.41.3.txt b/Documentation/RelNotes/2.41.3.adoc
index b5aba88790..b5aba88790 100644
--- a/Documentation/RelNotes/2.41.3.txt
+++ b/Documentation/RelNotes/2.41.3.adoc
diff --git a/Documentation/RelNotes/2.42.0.txt b/Documentation/RelNotes/2.42.0.adoc
index 0f1897ad5f..0f1897ad5f 100644
--- a/Documentation/RelNotes/2.42.0.txt
+++ b/Documentation/RelNotes/2.42.0.adoc
diff --git a/Documentation/RelNotes/2.42.1.txt b/Documentation/RelNotes/2.42.1.adoc
index 3d391b7dcd..3d391b7dcd 100644
--- a/Documentation/RelNotes/2.42.1.txt
+++ b/Documentation/RelNotes/2.42.1.adoc
diff --git a/Documentation/RelNotes/2.42.2.txt b/Documentation/RelNotes/2.42.2.adoc
index dbf761a01d..dbf761a01d 100644
--- a/Documentation/RelNotes/2.42.2.txt
+++ b/Documentation/RelNotes/2.42.2.adoc
diff --git a/Documentation/RelNotes/2.42.3.txt b/Documentation/RelNotes/2.42.3.adoc
index bfe3ba5629..bfe3ba5629 100644
--- a/Documentation/RelNotes/2.42.3.txt
+++ b/Documentation/RelNotes/2.42.3.adoc
diff --git a/Documentation/RelNotes/2.42.4.txt b/Documentation/RelNotes/2.42.4.adoc
index 3129d76e75..3129d76e75 100644
--- a/Documentation/RelNotes/2.42.4.txt
+++ b/Documentation/RelNotes/2.42.4.adoc
diff --git a/Documentation/RelNotes/2.43.0.txt b/Documentation/RelNotes/2.43.0.adoc
index e0e5b535bb..e0e5b535bb 100644
--- a/Documentation/RelNotes/2.43.0.txt
+++ b/Documentation/RelNotes/2.43.0.adoc
diff --git a/Documentation/RelNotes/2.43.1.txt b/Documentation/RelNotes/2.43.1.adoc
index 20e96f2dfa..20e96f2dfa 100644
--- a/Documentation/RelNotes/2.43.1.txt
+++ b/Documentation/RelNotes/2.43.1.adoc
diff --git a/Documentation/RelNotes/2.43.2.txt b/Documentation/RelNotes/2.43.2.adoc
index 5895e23a54..5895e23a54 100644
--- a/Documentation/RelNotes/2.43.2.txt
+++ b/Documentation/RelNotes/2.43.2.adoc
diff --git a/Documentation/RelNotes/2.43.3.txt b/Documentation/RelNotes/2.43.3.adoc
index 924f20594f..924f20594f 100644
--- a/Documentation/RelNotes/2.43.3.txt
+++ b/Documentation/RelNotes/2.43.3.adoc
diff --git a/Documentation/RelNotes/2.43.4.txt b/Documentation/RelNotes/2.43.4.adoc
index 0a842515ff..0a842515ff 100644
--- a/Documentation/RelNotes/2.43.4.txt
+++ b/Documentation/RelNotes/2.43.4.adoc
diff --git a/Documentation/RelNotes/2.43.5.txt b/Documentation/RelNotes/2.43.5.adoc
index 236b234b06..236b234b06 100644
--- a/Documentation/RelNotes/2.43.5.txt
+++ b/Documentation/RelNotes/2.43.5.adoc
diff --git a/Documentation/RelNotes/2.43.6.txt b/Documentation/RelNotes/2.43.6.adoc
index 2114b9f78d..2114b9f78d 100644
--- a/Documentation/RelNotes/2.43.6.txt
+++ b/Documentation/RelNotes/2.43.6.adoc
diff --git a/Documentation/RelNotes/2.44.0.txt b/Documentation/RelNotes/2.44.0.adoc
index 14f9ce8226..14f9ce8226 100644
--- a/Documentation/RelNotes/2.44.0.txt
+++ b/Documentation/RelNotes/2.44.0.adoc
diff --git a/Documentation/RelNotes/2.44.1.txt b/Documentation/RelNotes/2.44.1.adoc
index b5135c3281..b5135c3281 100644
--- a/Documentation/RelNotes/2.44.1.txt
+++ b/Documentation/RelNotes/2.44.1.adoc
diff --git a/Documentation/RelNotes/2.44.2.txt b/Documentation/RelNotes/2.44.2.adoc
index 76700f0b73..76700f0b73 100644
--- a/Documentation/RelNotes/2.44.2.txt
+++ b/Documentation/RelNotes/2.44.2.adoc
diff --git a/Documentation/RelNotes/2.44.3.txt b/Documentation/RelNotes/2.44.3.adoc
index 5862845458..5862845458 100644
--- a/Documentation/RelNotes/2.44.3.txt
+++ b/Documentation/RelNotes/2.44.3.adoc
diff --git a/Documentation/RelNotes/2.45.0.txt b/Documentation/RelNotes/2.45.0.adoc
index aa0315259b..aa0315259b 100644
--- a/Documentation/RelNotes/2.45.0.txt
+++ b/Documentation/RelNotes/2.45.0.adoc
diff --git a/Documentation/RelNotes/2.45.1.txt b/Documentation/RelNotes/2.45.1.adoc
index 3b0d60cfa3..3b0d60cfa3 100644
--- a/Documentation/RelNotes/2.45.1.txt
+++ b/Documentation/RelNotes/2.45.1.adoc
diff --git a/Documentation/RelNotes/2.45.2.txt b/Documentation/RelNotes/2.45.2.adoc
index 13429e6491..13429e6491 100644
--- a/Documentation/RelNotes/2.45.2.txt
+++ b/Documentation/RelNotes/2.45.2.adoc
diff --git a/Documentation/RelNotes/2.45.3.txt b/Documentation/RelNotes/2.45.3.adoc
index ddb3cb694b..ddb3cb694b 100644
--- a/Documentation/RelNotes/2.45.3.txt
+++ b/Documentation/RelNotes/2.45.3.adoc
diff --git a/Documentation/RelNotes/2.46.0.txt b/Documentation/RelNotes/2.46.0.adoc
index c06a04a91b..c06a04a91b 100644
--- a/Documentation/RelNotes/2.46.0.txt
+++ b/Documentation/RelNotes/2.46.0.adoc
diff --git a/Documentation/RelNotes/2.46.1.txt b/Documentation/RelNotes/2.46.1.adoc
index e55c2c4a46..e55c2c4a46 100644
--- a/Documentation/RelNotes/2.46.1.txt
+++ b/Documentation/RelNotes/2.46.1.adoc
diff --git a/Documentation/RelNotes/2.46.2.txt b/Documentation/RelNotes/2.46.2.adoc
index 613386878d..613386878d 100644
--- a/Documentation/RelNotes/2.46.2.txt
+++ b/Documentation/RelNotes/2.46.2.adoc
diff --git a/Documentation/RelNotes/2.46.3.txt b/Documentation/RelNotes/2.46.3.adoc
index 4af032b63c..4af032b63c 100644
--- a/Documentation/RelNotes/2.46.3.txt
+++ b/Documentation/RelNotes/2.46.3.adoc
diff --git a/Documentation/RelNotes/2.47.0.txt b/Documentation/RelNotes/2.47.0.adoc
index b63c3364af..b63c3364af 100644
--- a/Documentation/RelNotes/2.47.0.txt
+++ b/Documentation/RelNotes/2.47.0.adoc
diff --git a/Documentation/RelNotes/2.47.1.txt b/Documentation/RelNotes/2.47.1.adoc
index 39206c09fd..39206c09fd 100644
--- a/Documentation/RelNotes/2.47.1.txt
+++ b/Documentation/RelNotes/2.47.1.adoc
diff --git a/Documentation/RelNotes/2.47.2.txt b/Documentation/RelNotes/2.47.2.adoc
index 7a52ad8cb4..7a52ad8cb4 100644
--- a/Documentation/RelNotes/2.47.2.txt
+++ b/Documentation/RelNotes/2.47.2.adoc
diff --git a/Documentation/RelNotes/2.48.0.txt b/Documentation/RelNotes/2.48.0.adoc
index eff93be37a..eff93be37a 100644
--- a/Documentation/RelNotes/2.48.0.txt
+++ b/Documentation/RelNotes/2.48.0.adoc
diff --git a/Documentation/RelNotes/2.48.1.txt b/Documentation/RelNotes/2.48.1.adoc
index 26c59b6e3b..26c59b6e3b 100644
--- a/Documentation/RelNotes/2.48.1.txt
+++ b/Documentation/RelNotes/2.48.1.adoc
diff --git a/Documentation/RelNotes/2.49.0.txt b/Documentation/RelNotes/2.49.0.adoc
index cf63170a3d..7e10c13c84 100644
--- a/Documentation/RelNotes/2.49.0.txt
+++ b/Documentation/RelNotes/2.49.0.adoc
@@ -6,6 +6,19 @@ UI, Workflows & Features
* Completion script updates for zsh
+ * "git pack-objects" and its wrapper "git repack" learned an option
+ to use an alternative path-hash function to improve delta-base
+ selection to produce a packfile with deeper history than window
+ size.
+
+ * "git gc" learned the "--expire-to" option and passes it down to
+ underlying "git repack".
+
+ * "[help] autocorrect = 1" used to be a way to say "please wait for
+ 0.1 second after suggesting a typofix of the command name before
+ running that command"; now it means "yes, if there is a plausible
+ typofix for the command name, please run it immediately".
+
Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------
@@ -26,6 +39,17 @@ Performance, Internal Implementation, Development Support etc.
* Introduce a new API to visit objects in batches based on a common
path, or by type.
+ * Following the procedure we established to introduce breaking
+ changes for Git 3.0, allow an early opt-in for removing support of
+ $GIT_DIR/branches/ and $GIT_DIR/remotes/ directories to configure
+ remotes.
+
+ * The code paths to interact with zlib has been cleaned up in
+ preparation for building with zlib-ng.
+
+ * Foreign language interface for Rust into our code base has been added.
+
+
Fixes since v2.48
-----------------
@@ -113,6 +137,41 @@ Fixes since v2.48
stress that the command reads its data from the standard input.
(merge 49edce4ff9 jc/show-index-h-update later to maint).
+ * The API around choosing to use unsafe variant of SHA-1
+ implementation has been updated in an attempt to make it harder to
+ abuse.
+ (merge 04292c3796 tb/unsafe-hash-cleanup later to maint).
+
+ * Fix bugs in an earlier attempt to fix "git refs migration".
+ (merge f11f0a5a2d kn/reflog-migration-fix-fix later to maint).
+
+ * The code path used when "git fetch" fetches from a bundle file
+ closed the same file descriptor twice, which sometimes broke things
+ unexpectedly when the file descriptor was reused, which has been
+ corrected.
+ (merge 9a84794ad8 js/bundle-unbundle-fd-reuse-fix later to maint).
+
+ * "git init" to reinitialize a repository that already exists cannot
+ change the hash function and ref backends; such a request is
+ silently ignored now.
+ (merge 7e88640cd1 ps/setup-reinit-fixes later to maint).
+
+ * "git apply" internally uses unsigned long for line numbers and uses
+ strtoul() to parse numbers on the hunk headers. It however forgot
+ to check parse errors.
+ (merge a206058fda pw/apply-ulong-overflow-check later to maint).
+
+ * Two CI tasks, whitespace check and style check, work on the
+ difference from the base version and the version being checked, but
+ the base was computed incorrectly in GitLab CI in some cases, which
+ has been corrected.
+ (merge acc4fb302b jt/gitlab-ci-base-fix later to maint).
+
+ * "git repack --keep-unreachable" to send unreachable objects to the
+ main pack "git repack -ad" produces did not work when there is no
+ existing packs, which has been corrected.
+ (merge 414c82300a ps/repack-keep-unreachable-in-unpacked-repo later to maint).
+
* Other code cleanup, docfix, build fix, etc.
(merge ddb5287894 jk/t7407-use-test-grep later to maint).
(merge 21e1b44865 aj/difftool-config-doc-fix later to maint).
@@ -123,3 +182,7 @@ Fixes since v2.48
(merge 69666e6746 ja/doc-restore-markup-update later to maint).
(merge d11d003ba5 sk/strlen-returns-size_t later to maint).
(merge 77b2d29e91 ja/doc-notes-markup-updates later to maint).
+ (merge 6979bf6f8f jk/combine-diff-cleanup later to maint).
+ (merge 8705c9bd13 kn/pack-write-with-reduced-globals later to maint).
+ (merge 087740d65a ps/leakfixes-0129 later to maint).
+ (merge 6bba6f604b jp/doc-trailer-config later to maint).
diff --git a/Documentation/RelNotes/2.5.0.txt b/Documentation/RelNotes/2.5.0.adoc
index 84723f912a..84723f912a 100644
--- a/Documentation/RelNotes/2.5.0.txt
+++ b/Documentation/RelNotes/2.5.0.adoc
diff --git a/Documentation/RelNotes/2.5.1.txt b/Documentation/RelNotes/2.5.1.adoc
index b70553308a..b70553308a 100644
--- a/Documentation/RelNotes/2.5.1.txt
+++ b/Documentation/RelNotes/2.5.1.adoc
diff --git a/Documentation/RelNotes/2.5.2.txt b/Documentation/RelNotes/2.5.2.adoc
index 3f749398bb..3f749398bb 100644
--- a/Documentation/RelNotes/2.5.2.txt
+++ b/Documentation/RelNotes/2.5.2.adoc
diff --git a/Documentation/RelNotes/2.5.3.txt b/Documentation/RelNotes/2.5.3.adoc
index d1436857cb..d1436857cb 100644
--- a/Documentation/RelNotes/2.5.3.txt
+++ b/Documentation/RelNotes/2.5.3.adoc
diff --git a/Documentation/RelNotes/2.5.4.txt b/Documentation/RelNotes/2.5.4.adoc
index b8a2f93ee7..b8a2f93ee7 100644
--- a/Documentation/RelNotes/2.5.4.txt
+++ b/Documentation/RelNotes/2.5.4.adoc
diff --git a/Documentation/RelNotes/2.5.5.txt b/Documentation/RelNotes/2.5.5.adoc
index 37eae9a2d9..37eae9a2d9 100644
--- a/Documentation/RelNotes/2.5.5.txt
+++ b/Documentation/RelNotes/2.5.5.adoc
diff --git a/Documentation/RelNotes/2.5.6.txt b/Documentation/RelNotes/2.5.6.adoc
index 9cd025bb1c..9cd025bb1c 100644
--- a/Documentation/RelNotes/2.5.6.txt
+++ b/Documentation/RelNotes/2.5.6.adoc
diff --git a/Documentation/RelNotes/2.6.0.txt b/Documentation/RelNotes/2.6.0.adoc
index 7288aaf716..7288aaf716 100644
--- a/Documentation/RelNotes/2.6.0.txt
+++ b/Documentation/RelNotes/2.6.0.adoc
diff --git a/Documentation/RelNotes/2.6.1.txt b/Documentation/RelNotes/2.6.1.adoc
index f37ea89cda..f37ea89cda 100644
--- a/Documentation/RelNotes/2.6.1.txt
+++ b/Documentation/RelNotes/2.6.1.adoc
diff --git a/Documentation/RelNotes/2.6.2.txt b/Documentation/RelNotes/2.6.2.adoc
index 5b65e35245..5b65e35245 100644
--- a/Documentation/RelNotes/2.6.2.txt
+++ b/Documentation/RelNotes/2.6.2.adoc
diff --git a/Documentation/RelNotes/2.6.3.txt b/Documentation/RelNotes/2.6.3.adoc
index fc6fe1711f..fc6fe1711f 100644
--- a/Documentation/RelNotes/2.6.3.txt
+++ b/Documentation/RelNotes/2.6.3.adoc
diff --git a/Documentation/RelNotes/2.6.4.txt b/Documentation/RelNotes/2.6.4.adoc
index b0256a2dc9..b0256a2dc9 100644
--- a/Documentation/RelNotes/2.6.4.txt
+++ b/Documentation/RelNotes/2.6.4.adoc
diff --git a/Documentation/RelNotes/2.6.5.txt b/Documentation/RelNotes/2.6.5.adoc
index f0924b62e0..f0924b62e0 100644
--- a/Documentation/RelNotes/2.6.5.txt
+++ b/Documentation/RelNotes/2.6.5.adoc
diff --git a/Documentation/RelNotes/2.6.6.txt b/Documentation/RelNotes/2.6.6.adoc
index 023ad85ec6..023ad85ec6 100644
--- a/Documentation/RelNotes/2.6.6.txt
+++ b/Documentation/RelNotes/2.6.6.adoc
diff --git a/Documentation/RelNotes/2.6.7.txt b/Documentation/RelNotes/2.6.7.adoc
index 1335de49a6..1335de49a6 100644
--- a/Documentation/RelNotes/2.6.7.txt
+++ b/Documentation/RelNotes/2.6.7.adoc
diff --git a/Documentation/RelNotes/2.7.0.txt b/Documentation/RelNotes/2.7.0.adoc
index e3cbf3a73c..e3cbf3a73c 100644
--- a/Documentation/RelNotes/2.7.0.txt
+++ b/Documentation/RelNotes/2.7.0.adoc
diff --git a/Documentation/RelNotes/2.7.1.txt b/Documentation/RelNotes/2.7.1.adoc
index 6323feaf64..6323feaf64 100644
--- a/Documentation/RelNotes/2.7.1.txt
+++ b/Documentation/RelNotes/2.7.1.adoc
diff --git a/Documentation/RelNotes/2.7.2.txt b/Documentation/RelNotes/2.7.2.adoc
index 4feef76704..4feef76704 100644
--- a/Documentation/RelNotes/2.7.2.txt
+++ b/Documentation/RelNotes/2.7.2.adoc
diff --git a/Documentation/RelNotes/2.7.3.txt b/Documentation/RelNotes/2.7.3.adoc
index f618d71efd..f618d71efd 100644
--- a/Documentation/RelNotes/2.7.3.txt
+++ b/Documentation/RelNotes/2.7.3.adoc
diff --git a/Documentation/RelNotes/2.7.4.txt b/Documentation/RelNotes/2.7.4.adoc
index 883ae896fe..883ae896fe 100644
--- a/Documentation/RelNotes/2.7.4.txt
+++ b/Documentation/RelNotes/2.7.4.adoc
diff --git a/Documentation/RelNotes/2.7.5.txt b/Documentation/RelNotes/2.7.5.adoc
index 83559ce3b2..83559ce3b2 100644
--- a/Documentation/RelNotes/2.7.5.txt
+++ b/Documentation/RelNotes/2.7.5.adoc
diff --git a/Documentation/RelNotes/2.7.6.txt b/Documentation/RelNotes/2.7.6.adoc
index 4c6d1dcd4a..4c6d1dcd4a 100644
--- a/Documentation/RelNotes/2.7.6.txt
+++ b/Documentation/RelNotes/2.7.6.adoc
diff --git a/Documentation/RelNotes/2.8.0.txt b/Documentation/RelNotes/2.8.0.adoc
index 38453281b8..38453281b8 100644
--- a/Documentation/RelNotes/2.8.0.txt
+++ b/Documentation/RelNotes/2.8.0.adoc
diff --git a/Documentation/RelNotes/2.8.1.txt b/Documentation/RelNotes/2.8.1.adoc
index ef6d80b008..ef6d80b008 100644
--- a/Documentation/RelNotes/2.8.1.txt
+++ b/Documentation/RelNotes/2.8.1.adoc
diff --git a/Documentation/RelNotes/2.8.2.txt b/Documentation/RelNotes/2.8.2.adoc
index 447b1933a8..447b1933a8 100644
--- a/Documentation/RelNotes/2.8.2.txt
+++ b/Documentation/RelNotes/2.8.2.adoc
diff --git a/Documentation/RelNotes/2.8.3.txt b/Documentation/RelNotes/2.8.3.adoc
index a63825ed87..a63825ed87 100644
--- a/Documentation/RelNotes/2.8.3.txt
+++ b/Documentation/RelNotes/2.8.3.adoc
diff --git a/Documentation/RelNotes/2.8.4.txt b/Documentation/RelNotes/2.8.4.adoc
index f4e2552836..f4e2552836 100644
--- a/Documentation/RelNotes/2.8.4.txt
+++ b/Documentation/RelNotes/2.8.4.adoc
diff --git a/Documentation/RelNotes/2.8.5.txt b/Documentation/RelNotes/2.8.5.adoc
index 7bd179fa12..7bd179fa12 100644
--- a/Documentation/RelNotes/2.8.5.txt
+++ b/Documentation/RelNotes/2.8.5.adoc
diff --git a/Documentation/RelNotes/2.8.6.txt b/Documentation/RelNotes/2.8.6.adoc
index d8db55d920..d8db55d920 100644
--- a/Documentation/RelNotes/2.8.6.txt
+++ b/Documentation/RelNotes/2.8.6.adoc
diff --git a/Documentation/RelNotes/2.9.0.txt b/Documentation/RelNotes/2.9.0.adoc
index 991640119a..991640119a 100644
--- a/Documentation/RelNotes/2.9.0.txt
+++ b/Documentation/RelNotes/2.9.0.adoc
diff --git a/Documentation/RelNotes/2.9.1.txt b/Documentation/RelNotes/2.9.1.adoc
index 338394097e..338394097e 100644
--- a/Documentation/RelNotes/2.9.1.txt
+++ b/Documentation/RelNotes/2.9.1.adoc
diff --git a/Documentation/RelNotes/2.9.2.txt b/Documentation/RelNotes/2.9.2.adoc
index 2620003dcf..2620003dcf 100644
--- a/Documentation/RelNotes/2.9.2.txt
+++ b/Documentation/RelNotes/2.9.2.adoc
diff --git a/Documentation/RelNotes/2.9.3.txt b/Documentation/RelNotes/2.9.3.adoc
index 305e08062b..305e08062b 100644
--- a/Documentation/RelNotes/2.9.3.txt
+++ b/Documentation/RelNotes/2.9.3.adoc
diff --git a/Documentation/RelNotes/2.9.4.txt b/Documentation/RelNotes/2.9.4.adoc
index 9768293831..9768293831 100644
--- a/Documentation/RelNotes/2.9.4.txt
+++ b/Documentation/RelNotes/2.9.4.adoc
diff --git a/Documentation/RelNotes/2.9.5.txt b/Documentation/RelNotes/2.9.5.adoc
index 668313ae55..668313ae55 100644
--- a/Documentation/RelNotes/2.9.5.txt
+++ b/Documentation/RelNotes/2.9.5.adoc
diff --git a/Documentation/ReviewingGuidelines.txt b/Documentation/ReviewingGuidelines.adoc
index 6534643cff..6534643cff 100644
--- a/Documentation/ReviewingGuidelines.txt
+++ b/Documentation/ReviewingGuidelines.adoc
diff --git a/Documentation/ToolsForGit.txt b/Documentation/ToolsForGit.adoc
index ae7690b45d..ae7690b45d 100644
--- a/Documentation/ToolsForGit.txt
+++ b/Documentation/ToolsForGit.adoc
diff --git a/Documentation/blame-options.txt b/Documentation/blame-options.adoc
index 552dcc60f2..aa77406d4e 100644
--- a/Documentation/blame-options.txt
+++ b/Documentation/blame-options.adoc
@@ -18,7 +18,7 @@
'<start>' and '<end>' are optional. `-L <start>` or `-L <start>,` spans from
'<start>' to end of file. `-L ,<end>` spans from start of file to '<end>'.
+
-include::line-range-format.txt[]
+include::line-range-format.adoc[]
-l::
Show long rev (Default: off).
diff --git a/Documentation/cmd-list.perl b/Documentation/cmd-list.perl
index e260a98977..0a0c1b3f61 100755
--- a/Documentation/cmd-list.perl
+++ b/Documentation/cmd-list.perl
@@ -5,11 +5,11 @@ use File::Compare qw(compare);
sub format_one {
my ($source_dir, $out, $nameattr) = @_;
my ($name, $attr) = @$nameattr;
- my ($path) = "$source_dir/Documentation/$name.txt";
+ my ($path) = "$source_dir/Documentation/$name.adoc";
my ($state, $description);
my $mansection;
$state = 0;
- open I, '<', "$path" or die "No such file $path.txt";
+ open I, '<', "$path" or die "No such file $path.adoc";
while (<I>) {
if (/^(?:git|scalar)[a-z0-9-]*\(([0-9])\)$/) {
$mansection = $1;
@@ -30,7 +30,7 @@ sub format_one {
}
close I;
if (!defined $description) {
- die "No description found in $path.txt";
+ die "No description found in $path.adoc";
}
if (my ($verify_name, $text) = ($description =~ /^($name) - (.*)/)) {
print $out "linkgit:$name\[$mansection\]::\n\t";
@@ -63,7 +63,7 @@ for (sort <IN>) {
close IN;
for my $out (@categories) {
- my ($cat) = $out =~ /^cmds-(.*)\.txt$/;
+ my ($cat) = $out =~ /^cmds-(.*)\.adoc$/;
my ($path) = "$build_dir/$out";
open O, '>', "$path+" or die "Cannot open output file $out+";
for (@{$cmds{$cat}}) {
diff --git a/Documentation/config.txt b/Documentation/config.adoc
index 8c0b3ed807..cc769251be 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.adoc
@@ -372,186 +372,188 @@ inventing new variables for use in your own tool, make sure their
names do not conflict with those that are used by Git itself and
other popular tools, and describe them in your documentation.
-include::config/add.txt[]
+include::config/add.adoc[]
-include::config/advice.txt[]
+include::config/advice.adoc[]
-include::config/alias.txt[]
+include::config/alias.adoc[]
-include::config/am.txt[]
+include::config/am.adoc[]
-include::config/apply.txt[]
+include::config/apply.adoc[]
-include::config/attr.txt[]
+include::config/attr.adoc[]
-include::config/bitmap-pseudo-merge.txt[]
+include::config/bitmap-pseudo-merge.adoc[]
-include::config/blame.txt[]
+include::config/blame.adoc[]
-include::config/branch.txt[]
+include::config/branch.adoc[]
-include::config/browser.txt[]
+include::config/browser.adoc[]
-include::config/bundle.txt[]
+include::config/bundle.adoc[]
-include::config/checkout.txt[]
+include::config/checkout.adoc[]
-include::config/clean.txt[]
+include::config/clean.adoc[]
-include::config/clone.txt[]
+include::config/clone.adoc[]
-include::config/color.txt[]
+include::config/color.adoc[]
-include::config/column.txt[]
+include::config/column.adoc[]
-include::config/commit.txt[]
+include::config/commit.adoc[]
-include::config/commitgraph.txt[]
+include::config/commitgraph.adoc[]
-include::config/completion.txt[]
+include::config/completion.adoc[]
-include::config/core.txt[]
+include::config/core.adoc[]
-include::config/credential.txt[]
+include::config/credential.adoc[]
-include::config/diff.txt[]
+include::config/diff.adoc[]
-include::config/difftool.txt[]
+include::config/difftool.adoc[]
-include::config/extensions.txt[]
+include::config/extensions.adoc[]
-include::config/fastimport.txt[]
+include::config/fastimport.adoc[]
-include::config/feature.txt[]
+include::config/feature.adoc[]
-include::config/fetch.txt[]
+include::config/fetch.adoc[]
-include::config/filter.txt[]
+include::config/filter.adoc[]
-include::config/format.txt[]
+include::config/format.adoc[]
-include::config/fsck.txt[]
+include::config/fsck.adoc[]
-include::config/fsmonitor--daemon.txt[]
+include::config/fsmonitor--daemon.adoc[]
-include::config/gc.txt[]
+include::config/gc.adoc[]
-include::config/gitcvs.txt[]
+include::config/gitcvs.adoc[]
-include::config/gitweb.txt[]
+include::config/gitweb.adoc[]
-include::config/gpg.txt[]
+include::config/gpg.adoc[]
-include::config/grep.txt[]
+include::config/grep.adoc[]
-include::config/gui.txt[]
+include::config/gui.adoc[]
-include::config/guitool.txt[]
+include::config/guitool.adoc[]
-include::config/help.txt[]
+include::config/help.adoc[]
-include::config/http.txt[]
+include::config/http.adoc[]
-include::config/i18n.txt[]
+include::config/i18n.adoc[]
-include::config/imap.txt[]
+include::config/imap.adoc[]
-include::config/includeif.txt[]
+include::config/includeif.adoc[]
-include::config/index.txt[]
+include::config/index.adoc[]
-include::config/init.txt[]
+include::config/init.adoc[]
-include::config/instaweb.txt[]
+include::config/instaweb.adoc[]
-include::config/interactive.txt[]
+include::config/interactive.adoc[]
-include::config/log.txt[]
+include::config/log.adoc[]
-include::config/lsrefs.txt[]
+include::config/lsrefs.adoc[]
-include::config/mailinfo.txt[]
+include::config/mailinfo.adoc[]
-include::config/mailmap.txt[]
+include::config/mailmap.adoc[]
-include::config/maintenance.txt[]
+include::config/maintenance.adoc[]
-include::config/man.txt[]
+include::config/man.adoc[]
-include::config/merge.txt[]
+include::config/merge.adoc[]
-include::config/mergetool.txt[]
+include::config/mergetool.adoc[]
-include::config/notes.txt[]
+include::config/notes.adoc[]
-include::config/pack.txt[]
+include::config/pack.adoc[]
-include::config/pager.txt[]
+include::config/pager.adoc[]
-include::config/pretty.txt[]
+include::config/pretty.adoc[]
-include::config/promisor.txt[]
+include::config/promisor.adoc[]
-include::config/protocol.txt[]
+include::config/protocol.adoc[]
-include::config/pull.txt[]
+include::config/pull.adoc[]
-include::config/push.txt[]
+include::config/push.adoc[]
-include::config/rebase.txt[]
+include::config/rebase.adoc[]
-include::config/receive.txt[]
+include::config/receive.adoc[]
-include::config/reftable.txt[]
+include::config/reftable.adoc[]
-include::config/remote.txt[]
+include::config/remote.adoc[]
-include::config/remotes.txt[]
+include::config/remotes.adoc[]
-include::config/repack.txt[]
+include::config/repack.adoc[]
-include::config/rerere.txt[]
+include::config/rerere.adoc[]
-include::config/revert.txt[]
+include::config/revert.adoc[]
-include::config/safe.txt[]
+include::config/safe.adoc[]
-include::config/sendemail.txt[]
+include::config/sendemail.adoc[]
-include::config/sequencer.txt[]
+include::config/sequencer.adoc[]
-include::config/showbranch.txt[]
+include::config/showbranch.adoc[]
-include::config/sparse.txt[]
+include::config/sparse.adoc[]
-include::config/splitindex.txt[]
+include::config/splitindex.adoc[]
-include::config/ssh.txt[]
+include::config/ssh.adoc[]
-include::config/stash.txt[]
+include::config/stash.adoc[]
-include::config/status.txt[]
+include::config/status.adoc[]
-include::config/submodule.txt[]
+include::config/submodule.adoc[]
-include::config/tag.txt[]
+include::config/tag.adoc[]
-include::config/tar.txt[]
+include::config/tar.adoc[]
-include::config/trace2.txt[]
+include::config/trace2.adoc[]
-include::config/transfer.txt[]
+include::config/trailer.adoc[]
-include::config/uploadarchive.txt[]
+include::config/transfer.adoc[]
-include::config/uploadpack.txt[]
+include::config/uploadarchive.adoc[]
-include::config/url.txt[]
+include::config/uploadpack.adoc[]
-include::config/user.txt[]
+include::config/url.adoc[]
-include::config/versionsort.txt[]
+include::config/user.adoc[]
-include::config/web.txt[]
+include::config/versionsort.adoc[]
-include::config/worktree.txt[]
+include::config/web.adoc[]
+
+include::config/worktree.adoc[]
diff --git a/Documentation/config/add.txt b/Documentation/config/add.adoc
index 7497533cbc..7497533cbc 100644
--- a/Documentation/config/add.txt
+++ b/Documentation/config/add.adoc
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.adoc
index 257db58918..257db58918 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.adoc
diff --git a/Documentation/config/alias.txt b/Documentation/config/alias.adoc
index 2c5db0ad84..2c5db0ad84 100644
--- a/Documentation/config/alias.txt
+++ b/Documentation/config/alias.adoc
diff --git a/Documentation/config/am.txt b/Documentation/config/am.adoc
index 5bcad2efb1..5bcad2efb1 100644
--- a/Documentation/config/am.txt
+++ b/Documentation/config/am.adoc
diff --git a/Documentation/config/apply.txt b/Documentation/config/apply.adoc
index f9908e210a..f9908e210a 100644
--- a/Documentation/config/apply.txt
+++ b/Documentation/config/apply.adoc
diff --git a/Documentation/config/attr.txt b/Documentation/config/attr.adoc
index c4a5857993..c4a5857993 100644
--- a/Documentation/config/attr.txt
+++ b/Documentation/config/attr.adoc
diff --git a/Documentation/config/bitmap-pseudo-merge.txt b/Documentation/config/bitmap-pseudo-merge.adoc
index 1f264eca99..1f264eca99 100644
--- a/Documentation/config/bitmap-pseudo-merge.txt
+++ b/Documentation/config/bitmap-pseudo-merge.adoc
diff --git a/Documentation/config/blame.txt b/Documentation/config/blame.adoc
index 4d047c1790..4d047c1790 100644
--- a/Documentation/config/blame.txt
+++ b/Documentation/config/blame.adoc
diff --git a/Documentation/config/branch.txt b/Documentation/config/branch.adoc
index 432b9cd2c0..432b9cd2c0 100644
--- a/Documentation/config/branch.txt
+++ b/Documentation/config/branch.adoc
diff --git a/Documentation/config/browser.txt b/Documentation/config/browser.adoc
index 195df207a6..195df207a6 100644
--- a/Documentation/config/browser.txt
+++ b/Documentation/config/browser.adoc
diff --git a/Documentation/config/bundle.txt b/Documentation/config/bundle.adoc
index 3faae38685..3faae38685 100644
--- a/Documentation/config/bundle.txt
+++ b/Documentation/config/bundle.adoc
diff --git a/Documentation/config/checkout.txt b/Documentation/config/checkout.adoc
index a323022993..a323022993 100644
--- a/Documentation/config/checkout.txt
+++ b/Documentation/config/checkout.adoc
diff --git a/Documentation/config/clean.txt b/Documentation/config/clean.adoc
index c0188ead4e..c0188ead4e 100644
--- a/Documentation/config/clean.txt
+++ b/Documentation/config/clean.adoc
diff --git a/Documentation/config/clone.txt b/Documentation/config/clone.adoc
index 0a10efd174..0a10efd174 100644
--- a/Documentation/config/clone.txt
+++ b/Documentation/config/clone.adoc
diff --git a/Documentation/config/color.txt b/Documentation/config/color.adoc
index 2f2275ac69..2f2275ac69 100644
--- a/Documentation/config/color.txt
+++ b/Documentation/config/color.adoc
diff --git a/Documentation/config/column.txt b/Documentation/config/column.adoc
index 01e4198429..01e4198429 100644
--- a/Documentation/config/column.txt
+++ b/Documentation/config/column.adoc
diff --git a/Documentation/config/commit.txt b/Documentation/config/commit.adoc
index d3f4624fd2..d3f4624fd2 100644
--- a/Documentation/config/commit.txt
+++ b/Documentation/config/commit.adoc
diff --git a/Documentation/config/commitgraph.txt b/Documentation/config/commitgraph.adoc
index 7f8c9d6638..7f8c9d6638 100644
--- a/Documentation/config/commitgraph.txt
+++ b/Documentation/config/commitgraph.adoc
diff --git a/Documentation/config/completion.txt b/Documentation/config/completion.adoc
index 4d99bf33c9..4d99bf33c9 100644
--- a/Documentation/config/completion.txt
+++ b/Documentation/config/completion.adoc
diff --git a/Documentation/config/core.txt b/Documentation/config/core.adoc
index 8f6d8e7754..8f6d8e7754 100644
--- a/Documentation/config/core.txt
+++ b/Documentation/config/core.adoc
diff --git a/Documentation/config/credential.txt b/Documentation/config/credential.adoc
index 80a7c77772..80a7c77772 100644
--- a/Documentation/config/credential.txt
+++ b/Documentation/config/credential.adoc
diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.adoc
index 1135a62a0a..1135a62a0a 100644
--- a/Documentation/config/diff.txt
+++ b/Documentation/config/diff.adoc
diff --git a/Documentation/config/difftool.txt b/Documentation/config/difftool.adoc
index 6cd47331a9..4f7d40ce24 100644
--- a/Documentation/config/difftool.txt
+++ b/Documentation/config/difftool.adoc
@@ -13,7 +13,7 @@ diff.guitool::
and requires that a corresponding difftool.<guitool>.cmd variable
is defined.
-include::{build_dir}/mergetools-diff.txt[]
+include::{build_dir}/mergetools-diff.adoc[]
difftool.<tool>.cmd::
Specify the command to invoke the specified diff tool.
diff --git a/Documentation/config/extensions.txt b/Documentation/config/extensions.adoc
index 5cb4721a0e..9e2f321a6d 100644
--- a/Documentation/config/extensions.txt
+++ b/Documentation/config/extensions.adoc
@@ -56,7 +56,7 @@ For historical reasons, this extension is respected regardless of the
refStorage::
Specify the ref storage format to use. The acceptable values are:
+
-include::../ref-storage-format.txt[]
+include::../ref-storage-format.adoc[]
+
Note that this setting should only be set by linkgit:git-init[1] or
diff --git a/Documentation/config/fastimport.txt b/Documentation/config/fastimport.adoc
index 903677d7ef..903677d7ef 100644
--- a/Documentation/config/fastimport.txt
+++ b/Documentation/config/fastimport.adoc
diff --git a/Documentation/config/feature.txt b/Documentation/config/feature.adoc
index f061b64b74..f061b64b74 100644
--- a/Documentation/config/feature.txt
+++ b/Documentation/config/feature.adoc
diff --git a/Documentation/config/fetch.txt b/Documentation/config/fetch.adoc
index d7dc461bd1..d7dc461bd1 100644
--- a/Documentation/config/fetch.txt
+++ b/Documentation/config/fetch.adoc
diff --git a/Documentation/config/filter.txt b/Documentation/config/filter.adoc
index 90dfe0ba5a..90dfe0ba5a 100644
--- a/Documentation/config/filter.txt
+++ b/Documentation/config/filter.adoc
diff --git a/Documentation/config/fmt-merge-msg.txt b/Documentation/config/fmt-merge-msg.adoc
index 3fbf40e24f..3fbf40e24f 100644
--- a/Documentation/config/fmt-merge-msg.txt
+++ b/Documentation/config/fmt-merge-msg.adoc
diff --git a/Documentation/config/format.txt b/Documentation/config/format.adoc
index 7410e930e5..7410e930e5 100644
--- a/Documentation/config/format.txt
+++ b/Documentation/config/format.adoc
diff --git a/Documentation/config/fsck.txt b/Documentation/config/fsck.adoc
index 8e9e508933..8e9e508933 100644
--- a/Documentation/config/fsck.txt
+++ b/Documentation/config/fsck.adoc
diff --git a/Documentation/config/fsmonitor--daemon.txt b/Documentation/config/fsmonitor--daemon.adoc
index 671f9b9462..671f9b9462 100644
--- a/Documentation/config/fsmonitor--daemon.txt
+++ b/Documentation/config/fsmonitor--daemon.adoc
diff --git a/Documentation/config/gc.txt b/Documentation/config/gc.adoc
index 21d56db279..21d56db279 100644
--- a/Documentation/config/gc.txt
+++ b/Documentation/config/gc.adoc
diff --git a/Documentation/config/gitcvs.txt b/Documentation/config/gitcvs.adoc
index 02da427fd9..02da427fd9 100644
--- a/Documentation/config/gitcvs.txt
+++ b/Documentation/config/gitcvs.adoc
diff --git a/Documentation/config/gitweb.txt b/Documentation/config/gitweb.adoc
index 1b51475108..1b51475108 100644
--- a/Documentation/config/gitweb.txt
+++ b/Documentation/config/gitweb.adoc
diff --git a/Documentation/config/gpg.txt b/Documentation/config/gpg.adoc
index 5cf32b179d..5cf32b179d 100644
--- a/Documentation/config/gpg.txt
+++ b/Documentation/config/gpg.adoc
diff --git a/Documentation/config/grep.txt b/Documentation/config/grep.adoc
index 10041f27b0..10041f27b0 100644
--- a/Documentation/config/grep.txt
+++ b/Documentation/config/grep.adoc
diff --git a/Documentation/config/gui.txt b/Documentation/config/gui.adoc
index 171be774d2..171be774d2 100644
--- a/Documentation/config/gui.txt
+++ b/Documentation/config/gui.adoc
diff --git a/Documentation/config/guitool.txt b/Documentation/config/guitool.adoc
index 43fb9466ff..43fb9466ff 100644
--- a/Documentation/config/guitool.txt
+++ b/Documentation/config/guitool.adoc
diff --git a/Documentation/config/help.txt b/Documentation/config/help.adoc
index 610701f9a3..b369589cec 100644
--- a/Documentation/config/help.txt
+++ b/Documentation/config/help.adoc
@@ -11,13 +11,14 @@ help.autoCorrect::
If git detects typos and can identify exactly one valid command similar
to the error, git will try to suggest the correct command or even
run the suggestion automatically. Possible config values are:
- - 0 (default): show the suggested command.
- - positive number: run the suggested command after specified
+ - 0, "false", "off", "no", "show": show the suggested command (default).
+ - 1, "true", "on", "yes", "immediate": run the suggested command
+immediately.
+ - positive number > 1: run the suggested command after specified
deciseconds (0.1 sec).
- - "immediate": run the suggested command immediately.
+ - "never": don't run or show any suggested command.
- "prompt": show the suggestion and prompt for confirmation to run
the command.
- - "never": don't run or show any suggested command.
help.htmlPath::
Specify the path where the HTML documentation resides. File system paths
diff --git a/Documentation/config/http.txt b/Documentation/config/http.adoc
index a14371b5c9..a14371b5c9 100644
--- a/Documentation/config/http.txt
+++ b/Documentation/config/http.adoc
diff --git a/Documentation/config/i18n.txt b/Documentation/config/i18n.adoc
index 6e72fdb45b..6e72fdb45b 100644
--- a/Documentation/config/i18n.txt
+++ b/Documentation/config/i18n.adoc
diff --git a/Documentation/config/imap.txt b/Documentation/config/imap.adoc
index 3d28f72643..3d28f72643 100644
--- a/Documentation/config/imap.txt
+++ b/Documentation/config/imap.adoc
diff --git a/Documentation/config/includeif.txt b/Documentation/config/includeif.adoc
index 82fe431c34..82fe431c34 100644
--- a/Documentation/config/includeif.txt
+++ b/Documentation/config/includeif.adoc
diff --git a/Documentation/config/index.txt b/Documentation/config/index.adoc
index 3eff420360..3eff420360 100644
--- a/Documentation/config/index.txt
+++ b/Documentation/config/index.adoc
diff --git a/Documentation/config/init.txt b/Documentation/config/init.adoc
index e45b2a8121..e45b2a8121 100644
--- a/Documentation/config/init.txt
+++ b/Documentation/config/init.adoc
diff --git a/Documentation/config/instaweb.txt b/Documentation/config/instaweb.adoc
index 50cb2f7d62..50cb2f7d62 100644
--- a/Documentation/config/instaweb.txt
+++ b/Documentation/config/instaweb.adoc
diff --git a/Documentation/config/interactive.txt b/Documentation/config/interactive.adoc
index 8b876cb4eb..8b876cb4eb 100644
--- a/Documentation/config/interactive.txt
+++ b/Documentation/config/interactive.adoc
diff --git a/Documentation/config/log.txt b/Documentation/config/log.adoc
index 9003a82191..9003a82191 100644
--- a/Documentation/config/log.txt
+++ b/Documentation/config/log.adoc
diff --git a/Documentation/config/lsrefs.txt b/Documentation/config/lsrefs.adoc
index 3d88fb0bad..3d88fb0bad 100644
--- a/Documentation/config/lsrefs.txt
+++ b/Documentation/config/lsrefs.adoc
diff --git a/Documentation/config/mailinfo.txt b/Documentation/config/mailinfo.adoc
index ec3a5d81f7..ec3a5d81f7 100644
--- a/Documentation/config/mailinfo.txt
+++ b/Documentation/config/mailinfo.adoc
diff --git a/Documentation/config/mailmap.txt b/Documentation/config/mailmap.adoc
index 48cbc30722..48cbc30722 100644
--- a/Documentation/config/mailmap.txt
+++ b/Documentation/config/mailmap.adoc
diff --git a/Documentation/config/maintenance.txt b/Documentation/config/maintenance.adoc
index 72a9d6cf81..72a9d6cf81 100644
--- a/Documentation/config/maintenance.txt
+++ b/Documentation/config/maintenance.adoc
diff --git a/Documentation/config/man.txt b/Documentation/config/man.adoc
index 5a0f82cc23..5a0f82cc23 100644
--- a/Documentation/config/man.txt
+++ b/Documentation/config/man.adoc
diff --git a/Documentation/config/merge.txt b/Documentation/config/merge.adoc
index 82554d65a0..857de5b40b 100644
--- a/Documentation/config/merge.txt
+++ b/Documentation/config/merge.adoc
@@ -37,7 +37,7 @@ merge.verifySignatures::
If true, this is equivalent to the --verify-signatures command
line option. See linkgit:git-merge[1] for details.
-include::fmt-merge-msg.txt[]
+include::fmt-merge-msg.adoc[]
merge.renameLimit::
The number of files to consider in the exhaustive portion of
@@ -101,7 +101,7 @@ merge.guitool::
Any other value is treated as a custom merge tool and requires that a
corresponding mergetool.<guitool>.cmd variable is defined.
-include::{build_dir}/mergetools-merge.txt[]
+include::{build_dir}/mergetools-merge.adoc[]
merge.verbosity::
Controls the amount of output shown by the recursive merge
diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.adoc
index 00bf665aa0..00bf665aa0 100644
--- a/Documentation/config/mergetool.txt
+++ b/Documentation/config/mergetool.adoc
diff --git a/Documentation/config/notes.txt b/Documentation/config/notes.adoc
index b7e536496f..b7e536496f 100644
--- a/Documentation/config/notes.txt
+++ b/Documentation/config/notes.adoc
diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.adoc
index da527377fa..da527377fa 100644
--- a/Documentation/config/pack.txt
+++ b/Documentation/config/pack.adoc
diff --git a/Documentation/config/pager.txt b/Documentation/config/pager.adoc
index d3731cf66c..d3731cf66c 100644
--- a/Documentation/config/pager.txt
+++ b/Documentation/config/pager.adoc
diff --git a/Documentation/config/pretty.txt b/Documentation/config/pretty.adoc
index 063c6b63d9..063c6b63d9 100644
--- a/Documentation/config/pretty.txt
+++ b/Documentation/config/pretty.adoc
diff --git a/Documentation/config/promisor.txt b/Documentation/config/promisor.adoc
index 98c5cb2ec2..98c5cb2ec2 100644
--- a/Documentation/config/promisor.txt
+++ b/Documentation/config/promisor.adoc
diff --git a/Documentation/config/protocol.txt b/Documentation/config/protocol.adoc
index a9bf187a93..a9bf187a93 100644
--- a/Documentation/config/protocol.txt
+++ b/Documentation/config/protocol.adoc
diff --git a/Documentation/config/pull.txt b/Documentation/config/pull.adoc
index 9349e09261..9349e09261 100644
--- a/Documentation/config/pull.txt
+++ b/Documentation/config/pull.adoc
diff --git a/Documentation/config/push.txt b/Documentation/config/push.adoc
index 0acbbea18a..0acbbea18a 100644
--- a/Documentation/config/push.txt
+++ b/Documentation/config/push.adoc
diff --git a/Documentation/config/rebase.txt b/Documentation/config/rebase.adoc
index c6187ab28b..c6187ab28b 100644
--- a/Documentation/config/rebase.txt
+++ b/Documentation/config/rebase.adoc
diff --git a/Documentation/config/receive.txt b/Documentation/config/receive.adoc
index 36a1e6f2d2..36a1e6f2d2 100644
--- a/Documentation/config/receive.txt
+++ b/Documentation/config/receive.adoc
diff --git a/Documentation/config/reftable.txt b/Documentation/config/reftable.adoc
index 57087803a5..57087803a5 100644
--- a/Documentation/config/reftable.txt
+++ b/Documentation/config/reftable.adoc
diff --git a/Documentation/config/remote.txt b/Documentation/config/remote.adoc
index 4118c219c1..4118c219c1 100644
--- a/Documentation/config/remote.txt
+++ b/Documentation/config/remote.adoc
diff --git a/Documentation/config/remotes.txt b/Documentation/config/remotes.adoc
index 4cfe03221e..4cfe03221e 100644
--- a/Documentation/config/remotes.txt
+++ b/Documentation/config/remotes.adoc
diff --git a/Documentation/config/repack.txt b/Documentation/config/repack.adoc
index c79af6d7b8..c79af6d7b8 100644
--- a/Documentation/config/repack.txt
+++ b/Documentation/config/repack.adoc
diff --git a/Documentation/config/rerere.txt b/Documentation/config/rerere.adoc
index 3a78b5ebb1..3a78b5ebb1 100644
--- a/Documentation/config/rerere.txt
+++ b/Documentation/config/rerere.adoc
diff --git a/Documentation/config/revert.txt b/Documentation/config/revert.adoc
index 802d6faca2..802d6faca2 100644
--- a/Documentation/config/revert.txt
+++ b/Documentation/config/revert.adoc
diff --git a/Documentation/config/safe.txt b/Documentation/config/safe.adoc
index 2d45c98b12..2d45c98b12 100644
--- a/Documentation/config/safe.txt
+++ b/Documentation/config/safe.adoc
diff --git a/Documentation/config/sendemail.txt b/Documentation/config/sendemail.adoc
index 5ffcfc9f2a..5ffcfc9f2a 100644
--- a/Documentation/config/sendemail.txt
+++ b/Documentation/config/sendemail.adoc
diff --git a/Documentation/config/sequencer.txt b/Documentation/config/sequencer.adoc
index e664eef01d..e664eef01d 100644
--- a/Documentation/config/sequencer.txt
+++ b/Documentation/config/sequencer.adoc
diff --git a/Documentation/config/showbranch.txt b/Documentation/config/showbranch.adoc
index e79ecd9ee9..e79ecd9ee9 100644
--- a/Documentation/config/showbranch.txt
+++ b/Documentation/config/showbranch.adoc
diff --git a/Documentation/config/sparse.txt b/Documentation/config/sparse.adoc
index aff49a8d3a..aff49a8d3a 100644
--- a/Documentation/config/sparse.txt
+++ b/Documentation/config/sparse.adoc
diff --git a/Documentation/config/splitindex.txt b/Documentation/config/splitindex.adoc
index cfaa29610b..cfaa29610b 100644
--- a/Documentation/config/splitindex.txt
+++ b/Documentation/config/splitindex.adoc
diff --git a/Documentation/config/ssh.txt b/Documentation/config/ssh.adoc
index 2ca4bf93e1..2ca4bf93e1 100644
--- a/Documentation/config/ssh.txt
+++ b/Documentation/config/ssh.adoc
diff --git a/Documentation/config/stash.txt b/Documentation/config/stash.adoc
index ec1edaeba6..ec1edaeba6 100644
--- a/Documentation/config/stash.txt
+++ b/Documentation/config/stash.adoc
diff --git a/Documentation/config/status.txt b/Documentation/config/status.adoc
index 8caf90f51c..8caf90f51c 100644
--- a/Documentation/config/status.txt
+++ b/Documentation/config/status.adoc
diff --git a/Documentation/config/submodule.txt b/Documentation/config/submodule.adoc
index 0672d99117..0672d99117 100644
--- a/Documentation/config/submodule.txt
+++ b/Documentation/config/submodule.adoc
diff --git a/Documentation/config/tag.txt b/Documentation/config/tag.adoc
index 5062a057ff..5062a057ff 100644
--- a/Documentation/config/tag.txt
+++ b/Documentation/config/tag.adoc
diff --git a/Documentation/config/tar.txt b/Documentation/config/tar.adoc
index de8ff48ea9..de8ff48ea9 100644
--- a/Documentation/config/tar.txt
+++ b/Documentation/config/tar.adoc
diff --git a/Documentation/config/trace2.txt b/Documentation/config/trace2.adoc
index 3b6bca2b7a..05639ce33f 100644
--- a/Documentation/config/trace2.txt
+++ b/Documentation/config/trace2.adoc
@@ -17,7 +17,7 @@ trace2.eventTarget::
It may be overridden by the `GIT_TRACE2_EVENT` environment variable.
The following table shows possible values.
+
-include::../trace2-target-values.txt[]
+include::../trace2-target-values.adoc[]
trace2.normalBrief::
Boolean. When true `time`, `filename`, and `line` fields are
diff --git a/Documentation/config/trailer.adoc b/Documentation/config/trailer.adoc
new file mode 100644
index 0000000000..60bc221c88
--- /dev/null
+++ b/Documentation/config/trailer.adoc
@@ -0,0 +1,136 @@
+trailer.separators::
+ This option tells which characters are recognized as trailer
+ separators. By default only ':' is recognized as a trailer
+ separator, except that '=' is always accepted on the command
+ line for compatibility with other git commands.
++
+The first character given by this option will be the default character
+used when another separator is not specified in the config for this
+trailer.
++
+For example, if the value for this option is "%=$", then only lines
+using the format '<key><sep><value>' with <sep> containing '%', '='
+or '$' and then spaces will be considered trailers. And '%' will be
+the default separator used, so by default trailers will appear like:
+'<key>% <value>' (one percent sign and one space will appear between
+the key and the value).
+
+trailer.where::
+ This option tells where a new trailer will be added.
++
+This can be `end`, which is the default, `start`, `after` or `before`.
++
+If it is `end`, then each new trailer will appear at the end of the
+existing trailers.
++
+If it is `start`, then each new trailer will appear at the start,
+instead of the end, of the existing trailers.
++
+If it is `after`, then each new trailer will appear just after the
+last trailer with the same <key>.
++
+If it is `before`, then each new trailer will appear just before the
+first trailer with the same <key>.
+
+trailer.ifexists::
+ This option makes it possible to choose what action will be
+ performed when there is already at least one trailer with the
+ same <key> in the input.
++
+The valid values for this option are: `addIfDifferentNeighbor` (this
+is the default), `addIfDifferent`, `add`, `replace` or `doNothing`.
++
+With `addIfDifferentNeighbor`, a new trailer will be added only if no
+trailer with the same (<key>, <value>) pair is above or below the line
+where the new trailer will be added.
++
+With `addIfDifferent`, a new trailer will be added only if no trailer
+with the same (<key>, <value>) pair is already in the input.
++
+With `add`, a new trailer will be added, even if some trailers with
+the same (<key>, <value>) pair are already in the input.
++
+With `replace`, an existing trailer with the same <key> will be
+deleted and the new trailer will be added. The deleted trailer will be
+the closest one (with the same <key>) to the place where the new one
+will be added.
++
+With `doNothing`, nothing will be done; that is no new trailer will be
+added if there is already one with the same <key> in the input.
+
+trailer.ifmissing::
+ This option makes it possible to choose what action will be
+ performed when there is not yet any trailer with the same
+ <key> in the input.
++
+The valid values for this option are: `add` (this is the default) and
+`doNothing`.
++
+With `add`, a new trailer will be added.
++
+With `doNothing`, nothing will be done.
+
+trailer.<keyAlias>.key::
+ Defines a <keyAlias> for the <key>. The <keyAlias> must be a
+ prefix (case does not matter) of the <key>. For example, in `git
+ config trailer.ack.key "Acked-by"` the "Acked-by" is the <key> and
+ the "ack" is the <keyAlias>. This configuration allows the shorter
+ `--trailer "ack:..."` invocation on the command line using the "ack"
+ <keyAlias> instead of the longer `--trailer "Acked-by:..."`.
++
+At the end of the <key>, a separator can appear and then some
+space characters. By default the only valid separator is ':',
+but this can be changed using the `trailer.separators` config
+variable.
++
+If there is a separator in the key, then it overrides the default
+separator when adding the trailer.
+
+trailer.<keyAlias>.where::
+ This option takes the same values as the 'trailer.where'
+ configuration variable and it overrides what is specified by
+ that option for trailers with the specified <keyAlias>.
+
+trailer.<keyAlias>.ifexists::
+ This option takes the same values as the 'trailer.ifexists'
+ configuration variable and it overrides what is specified by
+ that option for trailers with the specified <keyAlias>.
+
+trailer.<keyAlias>.ifmissing::
+ This option takes the same values as the 'trailer.ifmissing'
+ configuration variable and it overrides what is specified by
+ that option for trailers with the specified <keyAlias>.
+
+trailer.<keyAlias>.command::
+ Deprecated in favor of 'trailer.<keyAlias>.cmd'.
+ This option behaves in the same way as 'trailer.<keyAlias>.cmd', except
+ that it doesn't pass anything as argument to the specified command.
+ Instead the first occurrence of substring $ARG is replaced by the
+ <value> that would be passed as argument.
++
+Note that $ARG in the user's command is
+only replaced once and that the original way of replacing $ARG is not safe.
++
+When both 'trailer.<keyAlias>.cmd' and 'trailer.<keyAlias>.command' are given
+for the same <keyAlias>, 'trailer.<keyAlias>.cmd' is used and
+'trailer.<keyAlias>.command' is ignored.
+
+trailer.<keyAlias>.cmd::
+ This option can be used to specify a shell command that will be called
+ once to automatically add a trailer with the specified <keyAlias>, and then
+ called each time a '--trailer <keyAlias>=<value>' argument is specified to
+ modify the <value> of the trailer that this option would produce.
++
+When the specified command is first called to add a trailer
+with the specified <keyAlias>, the behavior is as if a special
+'--trailer <keyAlias>=<value>' argument was added at the beginning
+of the "git interpret-trailers" command, where <value>
+is taken to be the standard output of the command with any
+leading and trailing whitespace trimmed off.
++
+If some '--trailer <keyAlias>=<value>' arguments are also passed
+on the command line, the command is called again once for each
+of these arguments with the same <keyAlias>. And the <value> part
+of these arguments, if any, will be passed to the command as its
+first argument. This way the command can produce a <value> computed
+from the <value> passed in the '--trailer <keyAlias>=<value>' argument.
diff --git a/Documentation/config/transfer.txt b/Documentation/config/transfer.adoc
index f1ce50f4a6..f1ce50f4a6 100644
--- a/Documentation/config/transfer.txt
+++ b/Documentation/config/transfer.adoc
diff --git a/Documentation/config/uploadarchive.txt b/Documentation/config/uploadarchive.adoc
index e0698e8c1d..e0698e8c1d 100644
--- a/Documentation/config/uploadarchive.txt
+++ b/Documentation/config/uploadarchive.adoc
diff --git a/Documentation/config/uploadpack.txt b/Documentation/config/uploadpack.adoc
index 0e1dda944a..0e1dda944a 100644
--- a/Documentation/config/uploadpack.txt
+++ b/Documentation/config/uploadpack.adoc
diff --git a/Documentation/config/url.txt b/Documentation/config/url.adoc
index e5566c371d..e5566c371d 100644
--- a/Documentation/config/url.txt
+++ b/Documentation/config/url.adoc
diff --git a/Documentation/config/user.txt b/Documentation/config/user.adoc
index 2ffc38d164..2ffc38d164 100644
--- a/Documentation/config/user.txt
+++ b/Documentation/config/user.adoc
diff --git a/Documentation/config/versionsort.txt b/Documentation/config/versionsort.adoc
index 0cff090819..0cff090819 100644
--- a/Documentation/config/versionsort.txt
+++ b/Documentation/config/versionsort.adoc
diff --git a/Documentation/config/web.txt b/Documentation/config/web.adoc
index beec8d1303..beec8d1303 100644
--- a/Documentation/config/web.txt
+++ b/Documentation/config/web.adoc
diff --git a/Documentation/config/worktree.txt b/Documentation/config/worktree.adoc
index 5e35c7d018..5e35c7d018 100644
--- a/Documentation/config/worktree.txt
+++ b/Documentation/config/worktree.adoc
diff --git a/Documentation/date-formats.txt b/Documentation/date-formats.adoc
index e24517c496..e24517c496 100644
--- a/Documentation/date-formats.txt
+++ b/Documentation/date-formats.adoc
diff --git a/Documentation/diff-format.txt b/Documentation/diff-format.adoc
index c72fb37986..80e36e153d 100644
--- a/Documentation/diff-format.txt
+++ b/Documentation/diff-format.adoc
@@ -121,7 +121,7 @@ Note that 'combined diff' lists only files which were modified from
all parents.
-include::diff-generate-patch.txt[]
+include::diff-generate-patch.adoc[]
other diff formats
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.adoc
index e5c813c96f..e5c813c96f 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.adoc
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.adoc
index 640eb6e7db..640eb6e7db 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.adoc
diff --git a/Documentation/everyday.txto b/Documentation/everyday.adoco
index ae555bd47e..ae555bd47e 100644
--- a/Documentation/everyday.txto
+++ b/Documentation/everyday.adoco
diff --git a/Documentation/fetch-options.txt b/Documentation/fetch-options.adoc
index b01372e4b3..b01372e4b3 100644
--- a/Documentation/fetch-options.txt
+++ b/Documentation/fetch-options.adoc
diff --git a/Documentation/fsck-msgids.txt b/Documentation/fsck-msgids.adoc
index b14bc44ca4..b14bc44ca4 100644
--- a/Documentation/fsck-msgids.txt
+++ b/Documentation/fsck-msgids.adoc
diff --git a/Documentation/git-add.txt b/Documentation/git-add.adoc
index 5f2c3592b8..eba0b419ce 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.adoc
@@ -437,10 +437,10 @@ they will make the patch impossible to apply:
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
:git-add: 1
-include::config/add.txt[]
+include::config/add.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-am.txt b/Documentation/git-am.adoc
index 69d5cc9f21..221070de48 100644
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.adoc
@@ -120,7 +120,7 @@ default. You can use `--no-utf8` to override this.
am.threeWay configuration variable. For more information,
see am.threeWay in linkgit:git-config[1].
-include::rerere-options.txt[]
+include::rerere-options.adoc[]
--ignore-space-change::
--ignore-whitespace::
@@ -284,9 +284,9 @@ information.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/am.txt[]
+include::config/am.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-annotate.txt b/Documentation/git-annotate.adoc
index 5ae8aabe0f..965bc676af 100644
--- a/Documentation/git-annotate.txt
+++ b/Documentation/git-annotate.adoc
@@ -22,7 +22,7 @@ familiar command name for people coming from other SCM systems.
OPTIONS
-------
-include::blame-options.txt[]
+include::blame-options.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-apply.txt b/Documentation/git-apply.adoc
index dd4a61ef28..952518b8af 100644
--- a/Documentation/git-apply.txt
+++ b/Documentation/git-apply.adoc
@@ -270,9 +270,9 @@ has no effect when `--index` or `--cached` is in use.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/apply.txt[]
+include::config/apply.adoc[]
SUBMODULES
----------
diff --git a/Documentation/git-archimport.txt b/Documentation/git-archimport.adoc
index 847777fd17..847777fd17 100644
--- a/Documentation/git-archimport.txt
+++ b/Documentation/git-archimport.adoc
diff --git a/Documentation/git-archive.txt b/Documentation/git-archive.adoc
index a0e3fe7996..a0e3fe7996 100644
--- a/Documentation/git-archive.txt
+++ b/Documentation/git-archive.adoc
diff --git a/Documentation/git-bisect-lk2009.txt b/Documentation/git-bisect-lk2009.adoc
index 0bc165788e..0bc165788e 100644
--- a/Documentation/git-bisect-lk2009.txt
+++ b/Documentation/git-bisect-lk2009.adoc
diff --git a/Documentation/git-bisect.txt b/Documentation/git-bisect.adoc
index 82f944dc03..82f944dc03 100644
--- a/Documentation/git-bisect.txt
+++ b/Documentation/git-bisect.adoc
diff --git a/Documentation/git-blame.txt b/Documentation/git-blame.adoc
index b1d7fb539d..f75ed44790 100644
--- a/Documentation/git-blame.txt
+++ b/Documentation/git-blame.adoc
@@ -48,7 +48,7 @@ ea4c7f9bf69e781dd0cd88d2bccb2bf5cc15c9a7 git-blame: Make the output
OPTIONS
-------
-include::blame-options.txt[]
+include::blame-options.adoc[]
-c::
Use the same output mode as linkgit:git-annotate[1] (Default: off).
@@ -244,9 +244,9 @@ See linkgit:gitmailmap[5].
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/blame.txt[]
+include::config/blame.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.adoc
index 0b08442932..7a073a36d6 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.adoc
@@ -345,9 +345,9 @@ CONFIGURATION
`--list` is used or implied. The default is to use a pager.
See linkgit:git-config[1].
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/branch.txt[]
+include::config/branch.adoc[]
EXAMPLES
--------
@@ -415,7 +415,7 @@ serve four related but different purposes:
- `--no-merged` is used to find branches which are candidates for merging
into HEAD, since those branches are not fully contained by HEAD.
-include::ref-reachability-filters.txt[]
+include::ref-reachability-filters.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-bugreport.txt b/Documentation/git-bugreport.adoc
index 112658b3c3..112658b3c3 100644
--- a/Documentation/git-bugreport.txt
+++ b/Documentation/git-bugreport.adoc
diff --git a/Documentation/git-bundle.txt b/Documentation/git-bundle.adoc
index 03cd36fe8d..03cd36fe8d 100644
--- a/Documentation/git-bundle.txt
+++ b/Documentation/git-bundle.adoc
diff --git a/Documentation/git-cat-file.txt b/Documentation/git-cat-file.adoc
index d5890ae368..d5890ae368 100644
--- a/Documentation/git-cat-file.txt
+++ b/Documentation/git-cat-file.adoc
diff --git a/Documentation/git-check-attr.txt b/Documentation/git-check-attr.adoc
index cb5a6c8f33..cb5a6c8f33 100644
--- a/Documentation/git-check-attr.txt
+++ b/Documentation/git-check-attr.adoc
diff --git a/Documentation/git-check-ignore.txt b/Documentation/git-check-ignore.adoc
index 3e3b4e3446..3e3b4e3446 100644
--- a/Documentation/git-check-ignore.txt
+++ b/Documentation/git-check-ignore.adoc
diff --git a/Documentation/git-check-mailmap.txt b/Documentation/git-check-mailmap.adoc
index 966c91c46a..966c91c46a 100644
--- a/Documentation/git-check-mailmap.txt
+++ b/Documentation/git-check-mailmap.adoc
diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.adoc
index 2aacfd1808..2aacfd1808 100644
--- a/Documentation/git-check-ref-format.txt
+++ b/Documentation/git-check-ref-format.adoc
diff --git a/Documentation/git-checkout-index.txt b/Documentation/git-checkout-index.adoc
index faf8d6ca36..faf8d6ca36 100644
--- a/Documentation/git-checkout-index.txt
+++ b/Documentation/git-checkout-index.adoc
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.adoc
index bf26655764..a66c53a5cd 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.adoc
@@ -612,9 +612,9 @@ $ git add frotz
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/checkout.txt[]
+include::config/checkout.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-cherry-pick.txt b/Documentation/git-cherry-pick.adoc
index 81ace900fc..42b41923d5 100644
--- a/Documentation/git-cherry-pick.txt
+++ b/Documentation/git-cherry-pick.adoc
@@ -172,11 +172,11 @@ fail unless one of `--empty=keep` or `--allow-empty` are specified.
Pass the merge strategy-specific option through to the
merge strategy. See linkgit:git-merge[1] for details.
-include::rerere-options.txt[]
+include::rerere-options.adoc[]
SEQUENCER SUBCOMMANDS
---------------------
-include::sequencer.txt[]
+include::sequencer.adoc[]
EXAMPLES
--------
diff --git a/Documentation/git-cherry.txt b/Documentation/git-cherry.adoc
index 0ea921a593..0ea921a593 100644
--- a/Documentation/git-cherry.txt
+++ b/Documentation/git-cherry.adoc
diff --git a/Documentation/git-citool.txt b/Documentation/git-citool.adoc
index c7a11c36c1..c7a11c36c1 100644
--- a/Documentation/git-citool.txt
+++ b/Documentation/git-citool.adoc
diff --git a/Documentation/git-clean.txt b/Documentation/git-clean.adoc
index fd17165416..bed52c203b 100644
--- a/Documentation/git-clean.txt
+++ b/Documentation/git-clean.adoc
@@ -140,9 +140,9 @@ help::
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/clean.txt[]
+include::config/clean.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.adoc
index de8d8f5893..510b91b5c0 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.adoc
@@ -13,7 +13,7 @@ git clone [--template=<template-directory>]
[-l] [-s] [--no-hardlinks] [-q] [-n] [--bare] [--mirror]
[-o <name>] [-b <name>] [-u <upload-pack>] [--reference <repository>]
[--dissociate] [--separate-git-dir <git-dir>]
- [--depth <depth>] [--[no-]single-branch] [--no-tags]
+ [--depth <depth>] [--[no-]single-branch] [--[no-]tags]
[--recurse-submodules[=<pathspec>]] [--[no-]shallow-submodules]
[--[no-]remote-submodules] [--jobs <n>] [--sparse] [--[no-]reject-shallow]
[--filter=<filter-spec>] [--also-filter-submodules]] [--] <repository>
@@ -221,6 +221,15 @@ objects from the source repository into a pack in the cloned repository.
`--branch` can also take tags and detaches the `HEAD` at that commit
in the resulting repository.
+`--revision=<rev>`::
+ Create a new repository, and fetch the history leading to the given
+ revision _<rev>_ (and nothing else), without making any remote-tracking
+ branch, and without making any local branch, and detach `HEAD` to
+ _<rev>_. The argument can be a ref name (e.g. `refs/heads/main` or
+ `refs/tags/v1.0`) that peels down to a commit, or a hexadecimal object
+ name.
+ This option is incompatible with `--branch` and `--mirror`.
+
`-u` _<upload-pack>_::
`--upload-pack` _<upload-pack>_::
When given, and the repository to clone from is accessed
@@ -273,12 +282,15 @@ corresponding `--mirror` and `--no-tags` options instead.
branch when `--single-branch` clone was made, no remote-tracking
branch is created.
-`--no-tags`::
- Don't clone any tags, and set
- `remote.<remote>.tagOpt=--no-tags` in the config, ensuring
- that future `git pull` and `git fetch` operations won't follow
- any tags. Subsequent explicit tag fetches will still work,
- (see linkgit:git-fetch[1]).
+`--[no-]tags`::
+ Control whether or not tags will be cloned. When `--no-tags` is
+ given, the option will be become permanent by setting the
+ `remote.<remote>.tagOpt=--no-tags` configuration. This ensures that
+ future `git pull` and `git fetch` won't follow any tags. Subsequent
+ explicit tag fetches will still work (see linkgit:git-fetch[1]).
+
+ By default, tags are cloned and passing `--tags` is thus typically a
+ no-op, unless it cancels out a previous `--no-tags`.
+
Can be used in conjunction with `--single-branch` to clone and
maintain a branch with no references other than a single cloned
@@ -321,7 +333,7 @@ or `--mirror` is given)
Specify the given ref storage format for the repository. The valid values are:
+
-include::ref-storage-format.txt[]
+include::ref-storage-format.adoc[]
`-j` _<n>_::
`--jobs` _<n>_::
@@ -348,7 +360,7 @@ _<directory>_::
`--shallow-since`, and `--shallow-exclude`.
:git-clone: 1
-include::urls.txt[]
+include::urls.adoc[]
EXAMPLES
--------
@@ -396,11 +408,11 @@ $ git clone --no-local /home/otheruser/proj.git /pub/scm/proj.git
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/init.txt[]
+include::config/init.adoc[]
-include::config/clone.txt[]
+include::config/clone.adoc[]
GIT
diff --git a/Documentation/git-column.txt b/Documentation/git-column.adoc
index 18431647a2..85fb87c94a 100644
--- a/Documentation/git-column.txt
+++ b/Documentation/git-column.adoc
@@ -77,9 +77,9 @@ v2.4.8 v2.4.9
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/column.txt[]
+include::config/column.adoc[]
GIT
---
diff --git a/Documentation/git-commit-graph.txt b/Documentation/git-commit-graph.adoc
index 903b16830e..50b5016804 100644
--- a/Documentation/git-commit-graph.txt
+++ b/Documentation/git-commit-graph.adoc
@@ -148,9 +148,9 @@ $ git rev-parse HEAD | git commit-graph write --stdin-commits --append
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/commitgraph.txt[]
+include::config/commitgraph.adoc[]
FILE FORMAT
diff --git a/Documentation/git-commit-tree.txt b/Documentation/git-commit-tree.adoc
index 2e2c581098..6472921e14 100644
--- a/Documentation/git-commit-tree.txt
+++ b/Documentation/git-commit-tree.adoc
@@ -80,12 +80,12 @@ A commit comment is read from stdin. If a changelog
entry is not provided via "<" redirection, 'git commit-tree' will just wait
for one to be entered and terminated with ^D.
-include::date-formats.txt[]
+include::date-formats.adoc[]
Discussion
----------
-include::i18n.txt[]
+include::i18n.adoc[]
FILES
-----
diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.adoc
index 602e2f1200..dfb78169cb 100644
--- a/Documentation/git-commit.txt
+++ b/Documentation/git-commit.adoc
@@ -198,7 +198,7 @@ The `-m` option is mutually exclusive with `-c`, `-C`, and `-F`.
message, the commit is aborted. This has no effect when a message
is given by other means, e.g. with the `-m` or `-F` options.
-include::signoff-option.txt[]
+include::signoff-option.adoc[]
`--trailer <token>[(=|:)<value>]`::
Specify a (_<token>_, _<value>_) pair that should be applied as a
@@ -534,7 +534,7 @@ The typical usage is to set just the `user.name` and `user.email` variables;
the other options are provided for more complex use cases.
:git-commit: 1
-include::date-formats.txt[]
+include::date-formats.adoc[]
DISCUSSION
----------
@@ -547,7 +547,7 @@ as the commit title, and that title is used throughout Git.
For example, linkgit:git-format-patch[1] turns a commit into email, and it uses
the title on the Subject line and the rest of the commit in the body.
-include::i18n.txt[]
+include::i18n.adoc[]
ENVIRONMENT AND CONFIGURATION VARIABLES
---------------------------------------
@@ -556,9 +556,9 @@ The editor used to edit the commit log message will be chosen from the
`VISUAL` environment variable, or the `EDITOR` environment variable (in that
order). See linkgit:git-var[1] for details.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/commit.txt[]
+include::config/commit.adoc[]
HOOKS
-----
diff --git a/Documentation/git-config.txt b/Documentation/git-config.adoc
index 3e420177c1..888f8ba54b 100644
--- a/Documentation/git-config.txt
+++ b/Documentation/git-config.adoc
@@ -610,7 +610,7 @@ http.cookieFile /tmp/cookie.txt
http.sslverify false
------------
-include::config.txt[]
+include::config.adoc[]
BUGS
----
diff --git a/Documentation/git-count-objects.txt b/Documentation/git-count-objects.adoc
index 97f9f12610..97f9f12610 100644
--- a/Documentation/git-count-objects.txt
+++ b/Documentation/git-count-objects.adoc
diff --git a/Documentation/git-credential-cache--daemon.txt b/Documentation/git-credential-cache--daemon.adoc
index 650a15a7ed..650a15a7ed 100644
--- a/Documentation/git-credential-cache--daemon.txt
+++ b/Documentation/git-credential-cache--daemon.adoc
diff --git a/Documentation/git-credential-cache.txt b/Documentation/git-credential-cache.adoc
index 54fa7a27e1..54fa7a27e1 100644
--- a/Documentation/git-credential-cache.txt
+++ b/Documentation/git-credential-cache.adoc
diff --git a/Documentation/git-credential-store.txt b/Documentation/git-credential-store.adoc
index 71864a8726..71864a8726 100644
--- a/Documentation/git-credential-store.txt
+++ b/Documentation/git-credential-store.adoc
diff --git a/Documentation/git-credential.txt b/Documentation/git-credential.adoc
index e41493292f..e41493292f 100644
--- a/Documentation/git-credential.txt
+++ b/Documentation/git-credential.adoc
diff --git a/Documentation/git-cvsexportcommit.txt b/Documentation/git-cvsexportcommit.adoc
index 41c8a8a05c..41c8a8a05c 100644
--- a/Documentation/git-cvsexportcommit.txt
+++ b/Documentation/git-cvsexportcommit.adoc
diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.adoc
index 90fdc2551a..90fdc2551a 100644
--- a/Documentation/git-cvsimport.txt
+++ b/Documentation/git-cvsimport.adoc
diff --git a/Documentation/git-cvsserver.txt b/Documentation/git-cvsserver.adoc
index 4c475efeab..4c475efeab 100644
--- a/Documentation/git-cvsserver.txt
+++ b/Documentation/git-cvsserver.adoc
diff --git a/Documentation/git-daemon.txt b/Documentation/git-daemon.adoc
index ede7b935d6..ede7b935d6 100644
--- a/Documentation/git-daemon.txt
+++ b/Documentation/git-daemon.adoc
diff --git a/Documentation/git-describe.txt b/Documentation/git-describe.adoc
index 08ff715709..08ff715709 100644
--- a/Documentation/git-describe.txt
+++ b/Documentation/git-describe.adoc
diff --git a/Documentation/git-diagnose.txt b/Documentation/git-diagnose.adoc
index 0711959e6f..0711959e6f 100644
--- a/Documentation/git-diagnose.txt
+++ b/Documentation/git-diagnose.adoc
diff --git a/Documentation/git-diff-files.txt b/Documentation/git-diff-files.adoc
index bf78e31431..2b2358ca1c 100644
--- a/Documentation/git-diff-files.txt
+++ b/Documentation/git-diff-files.adoc
@@ -20,7 +20,7 @@ same as for 'git diff-index' and 'git diff-tree'.
OPTIONS
-------
-include::diff-options.txt[]
+include::diff-options.adoc[]
-1 --base::
-2 --ours::
@@ -45,7 +45,7 @@ omit diff output for unmerged entries and just show "Unmerged".
Remain silent even for nonexistent files
-include::diff-format.txt[]
+include::diff-format.adoc[]
GIT
---
diff --git a/Documentation/git-diff-index.txt b/Documentation/git-diff-index.adoc
index 4de1d4c8f1..911446a296 100644
--- a/Documentation/git-diff-index.txt
+++ b/Documentation/git-diff-index.adoc
@@ -21,7 +21,7 @@ files are compared.
OPTIONS
-------
-include::diff-options.txt[]
+include::diff-options.adoc[]
<tree-ish>::
The id of a tree object to diff against.
@@ -40,7 +40,7 @@ include::diff-options.txt[]
'git diff-index' say that all non-checked-out files are up
to date.
-include::diff-format.txt[]
+include::diff-format.adoc[]
OPERATING MODES
---------------
diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.adoc
index 09286a85eb..f1e3134bde 100644
--- a/Documentation/git-diff-tree.txt
+++ b/Documentation/git-diff-tree.adoc
@@ -24,7 +24,7 @@ Note that 'git diff-tree' can use the tree encapsulated in a commit object.
OPTIONS
-------
-include::diff-options.txt[]
+include::diff-options.adoc[]
<tree-ish>::
The id of a tree object.
@@ -84,7 +84,7 @@ commits (but not trees).
This flag causes 'git diff-tree --stdin' to also show
the commit message before the differences.
-include::pretty-options.txt[]
+include::pretty-options.adoc[]
--no-commit-id::
'git diff-tree' outputs a line with the commit ID when
@@ -122,9 +122,9 @@ include::pretty-options.txt[]
if the diff itself is empty.
-include::pretty-formats.txt[]
+include::pretty-formats.adoc[]
-include::diff-format.txt[]
+include::diff-format.adoc[]
GIT
---
diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.adoc
index e19f31e8b9..dec173a345 100644
--- a/Documentation/git-diff.txt
+++ b/Documentation/git-diff.adoc
@@ -123,7 +123,7 @@ do not mean a range as defined in the
OPTIONS
-------
:git-diff: 1
-include::diff-options.txt[]
+include::diff-options.adoc[]
`-1`::
`--base`::
@@ -154,7 +154,7 @@ section "3-Way Merge" for detailed information.
names and get diff for all files under them).
-include::diff-format.txt[]
+include::diff-format.adoc[]
EXAMPLES
--------
@@ -232,10 +232,10 @@ $ git diff -R <2>
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
:git-diff: 1
-include::config/diff.txt[]
+include::config/diff.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.adoc
index a616f8b2e6..d596205eaf 100644
--- a/Documentation/git-difftool.txt
+++ b/Documentation/git-difftool.adoc
@@ -119,9 +119,9 @@ CONFIGURATION
'git difftool' falls back to 'git mergetool' config variables when the
difftool equivalents have not been defined.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/difftool.txt[]
+include::config/difftool.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-fast-export.txt b/Documentation/git-fast-export.adoc
index 752e4b9b01..752e4b9b01 100644
--- a/Documentation/git-fast-export.txt
+++ b/Documentation/git-fast-export.adoc
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.adoc
index 3d435157a6..58a2eaa51a 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.adoc
@@ -1578,9 +1578,9 @@ compression.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/fastimport.txt[]
+include::config/fastimport.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-fetch-pack.txt b/Documentation/git-fetch-pack.adoc
index b5223576a7..b5223576a7 100644
--- a/Documentation/git-fetch-pack.txt
+++ b/Documentation/git-fetch-pack.adoc
diff --git a/Documentation/git-fetch.txt b/Documentation/git-fetch.adoc
index 50900a50da..16f5d9d69a 100644
--- a/Documentation/git-fetch.txt
+++ b/Documentation/git-fetch.adoc
@@ -44,15 +44,15 @@ may be used by scripts or other git commands, such as linkgit:git-pull[1].
OPTIONS
-------
-include::fetch-options.txt[]
+include::fetch-options.adoc[]
-include::pull-fetch-param.txt[]
+include::pull-fetch-param.adoc[]
--stdin::
Read refspecs, one per line, from stdin in addition to those provided
as arguments. The "tag <name>" format is not supported.
-include::urls-remotes.txt[]
+include::urls-remotes.adoc[]
CONFIGURED REMOTE-TRACKING BRANCHES[[CRTB]]
@@ -292,14 +292,14 @@ The first command fetches the `maint` branch from the repository at
objects will eventually be removed by git's built-in housekeeping (see
linkgit:git-gc[1]).
-include::transfer-data-leaks.txt[]
+include::transfer-data-leaks.adoc[]
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/fetch.txt[]
+include::config/fetch.adoc[]
BUGS
----
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.adoc
index 5a4f853785..5a4f853785 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.adoc
diff --git a/Documentation/git-fmt-merge-msg.txt b/Documentation/git-fmt-merge-msg.adoc
index 6f28812f38..0f3328956d 100644
--- a/Documentation/git-fmt-merge-msg.txt
+++ b/Documentation/git-fmt-merge-msg.adoc
@@ -55,7 +55,7 @@ OPTIONS
CONFIGURATION
-------------
-include::config/fmt-merge-msg.txt[]
+include::config/fmt-merge-msg.adoc[]
merge.summary::
Synonym to `merge.log`; this is deprecated and will be removed in
diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.adoc
index d3764401a2..ffb97e62c2 100644
--- a/Documentation/git-for-each-ref.txt
+++ b/Documentation/git-for-each-ref.adoc
@@ -538,7 +538,7 @@ will be reported.
NOTES
-----
-include::ref-reachability-filters.txt[]
+include::ref-reachability-filters.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-for-each-repo.txt b/Documentation/git-for-each-repo.adoc
index abe3527aac..abe3527aac 100644
--- a/Documentation/git-for-each-repo.txt
+++ b/Documentation/git-for-each-repo.adoc
diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.adoc
index 5dc7bb4cfc..a8b53db9a6 100644
--- a/Documentation/git-format-patch.txt
+++ b/Documentation/git-format-patch.adoc
@@ -105,7 +105,7 @@ reference.
OPTIONS
-------
:git-format-patch: 1
-include::diff-options.txt[]
+include::diff-options.adoc[]
-<n>::
Prepare patches from the topmost <n> commits.
diff --git a/Documentation/git-fsck-objects.txt b/Documentation/git-fsck-objects.adoc
index eec4bdb600..eec4bdb600 100644
--- a/Documentation/git-fsck-objects.txt
+++ b/Documentation/git-fsck-objects.adoc
diff --git a/Documentation/git-fsck.txt b/Documentation/git-fsck.adoc
index 5b82e4605c..8f32800a83 100644
--- a/Documentation/git-fsck.txt
+++ b/Documentation/git-fsck.adoc
@@ -107,9 +107,9 @@ care about this output and want to speed it up further.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/fsck.txt[]
+include::config/fsck.adoc[]
DISCUSSION
----------
@@ -161,7 +161,7 @@ each error means, with their default severity. The severity of the
error, other than those that are marked as "(FATAL)", can be tweaked
by setting the corresponding `fsck.<msg-id>` configuration variable.
-include::fsck-msgids.txt[]
+include::fsck-msgids.adoc[]
Environment Variables
diff --git a/Documentation/git-fsmonitor--daemon.txt b/Documentation/git-fsmonitor--daemon.adoc
index 8585d19f4d..8fe5241b08 100644
--- a/Documentation/git-fsmonitor--daemon.txt
+++ b/Documentation/git-fsmonitor--daemon.adoc
@@ -97,9 +97,9 @@ error that will cause the daemon and the currently running command to exit.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/fsmonitor--daemon.txt[]
+include::config/fsmonitor--daemon.adoc[]
GIT
---
diff --git a/Documentation/git-gc.txt b/Documentation/git-gc.adoc
index 370e22faae..526ce01463 100644
--- a/Documentation/git-gc.txt
+++ b/Documentation/git-gc.adoc
@@ -69,6 +69,13 @@ be performed as well.
the `--max-cruft-size` option of linkgit:git-repack[1] for
more.
+--expire-to=<dir>::
+ When packing unreachable objects into a cruft pack, write a cruft
+ pack containing pruned objects (if any) to the directory `<dir>`.
+ This option only has an effect when used together with `--cruft`.
+ See the `--expire-to` option of linkgit:git-repack[1] for
+ more information.
+
--prune=<date>::
Prune loose objects older than date (default is 2 weeks ago,
overridable by the config variable `gc.pruneExpire`).
@@ -122,9 +129,9 @@ users and their repositories.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/gc.txt[]
+include::config/gc.adoc[]
NOTES
-----
diff --git a/Documentation/git-get-tar-commit-id.txt b/Documentation/git-get-tar-commit-id.adoc
index b537bb45b1..b537bb45b1 100644
--- a/Documentation/git-get-tar-commit-id.txt
+++ b/Documentation/git-get-tar-commit-id.adoc
diff --git a/Documentation/git-grep.txt b/Documentation/git-grep.adoc
index 1e6d7b65c8..a548585d4c 100644
--- a/Documentation/git-grep.txt
+++ b/Documentation/git-grep.adoc
@@ -351,9 +351,9 @@ experienced in this case, it might be desirable to use `--threads=1`.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/grep.txt[]
+include::config/grep.adoc[]
GIT
---
diff --git a/Documentation/git-gui.txt b/Documentation/git-gui.adoc
index f5b02ef114..f5b02ef114 100644
--- a/Documentation/git-gui.txt
+++ b/Documentation/git-gui.adoc
diff --git a/Documentation/git-hash-object.txt b/Documentation/git-hash-object.adoc
index ef4719ae41..ef4719ae41 100644
--- a/Documentation/git-hash-object.txt
+++ b/Documentation/git-hash-object.adoc
diff --git a/Documentation/git-help.txt b/Documentation/git-help.adoc
index f0bedc1f96..f0bedc1f96 100644
--- a/Documentation/git-help.txt
+++ b/Documentation/git-help.adoc
diff --git a/Documentation/git-hook.txt b/Documentation/git-hook.adoc
index f6cc72d2ca..f6cc72d2ca 100644
--- a/Documentation/git-hook.txt
+++ b/Documentation/git-hook.adoc
diff --git a/Documentation/git-http-backend.txt b/Documentation/git-http-backend.adoc
index f37ddaded8..f37ddaded8 100644
--- a/Documentation/git-http-backend.txt
+++ b/Documentation/git-http-backend.adoc
diff --git a/Documentation/git-http-fetch.txt b/Documentation/git-http-fetch.adoc
index 4ec7c68d3b..4ec7c68d3b 100644
--- a/Documentation/git-http-fetch.txt
+++ b/Documentation/git-http-fetch.adoc
diff --git a/Documentation/git-http-push.txt b/Documentation/git-http-push.adoc
index ce0d808212..ce0d808212 100644
--- a/Documentation/git-http-push.txt
+++ b/Documentation/git-http-push.adoc
diff --git a/Documentation/git-imap-send.txt b/Documentation/git-imap-send.adoc
index c8a89d7243..26ccf4e433 100644
--- a/Documentation/git-imap-send.txt
+++ b/Documentation/git-imap-send.adoc
@@ -54,9 +54,9 @@ CONFIGURATION
To use the tool, `imap.folder` and either `imap.tunnel` or `imap.host` must be set
to appropriate values.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/imap.txt[]
+include::config/imap.adoc[]
EXAMPLES
--------
diff --git a/Documentation/git-index-pack.txt b/Documentation/git-index-pack.adoc
index 58dd5b5f0e..270056cf63 100644
--- a/Documentation/git-index-pack.txt
+++ b/Documentation/git-index-pack.adoc
@@ -130,7 +130,7 @@ information on the possible values of `<msg-id>` and `<severity>`.
+
This option cannot be used with --stdin.
+
-include::object-format-disclaimer.txt[]
+include::object-format-disclaimer.adoc[]
--promisor[=<message>]::
Before committing the pack-index, create a .promisor file for this
diff --git a/Documentation/git-init-db.txt b/Documentation/git-init-db.adoc
index 18bf1a3c8c..18bf1a3c8c 100644
--- a/Documentation/git-init-db.txt
+++ b/Documentation/git-init-db.adoc
diff --git a/Documentation/git-init.txt b/Documentation/git-init.adoc
index 315f7f7530..a0dffba665 100644
--- a/Documentation/git-init.txt
+++ b/Documentation/git-init.adoc
@@ -55,12 +55,12 @@ current working directory.
Specify the given object _<format>_ (hash algorithm) for the repository. The valid
values are `sha1` and (if enabled) `sha256`. `sha1` is the default.
+
-include::object-format-disclaimer.txt[]
+include::object-format-disclaimer.adoc[]
`--ref-format=<format>`::
Specify the given ref storage _<format>_ for the repository. The valid values are:
+
-include::ref-storage-format.txt[]
+include::ref-storage-format.adoc[]
`--template=<template-directory>`::
Specify the directory from which templates will be used. (See the "TEMPLATE
@@ -178,11 +178,11 @@ $ git commit <3>
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
:git-init:
-include::config/init.txt[]
+include::config/init.adoc[]
GIT
---
diff --git a/Documentation/git-instaweb.txt b/Documentation/git-instaweb.adoc
index a54fe4401b..a54fe4401b 100644
--- a/Documentation/git-instaweb.txt
+++ b/Documentation/git-instaweb.adoc
diff --git a/Documentation/git-interpret-trailers.txt b/Documentation/git-interpret-trailers.adoc
index d9dfb75fef..82c8780d93 100644
--- a/Documentation/git-interpret-trailers.txt
+++ b/Documentation/git-interpret-trailers.adoc
@@ -186,142 +186,9 @@ OPTIONS
CONFIGURATION VARIABLES
-----------------------
-trailer.separators::
- This option tells which characters are recognized as trailer
- separators. By default only ':' is recognized as a trailer
- separator, except that '=' is always accepted on the command
- line for compatibility with other git commands.
-+
-The first character given by this option will be the default character
-used when another separator is not specified in the config for this
-trailer.
-+
-For example, if the value for this option is "%=$", then only lines
-using the format '<key><sep><value>' with <sep> containing '%', '='
-or '$' and then spaces will be considered trailers. And '%' will be
-the default separator used, so by default trailers will appear like:
-'<key>% <value>' (one percent sign and one space will appear between
-the key and the value).
-
-trailer.where::
- This option tells where a new trailer will be added.
-+
-This can be `end`, which is the default, `start`, `after` or `before`.
-+
-If it is `end`, then each new trailer will appear at the end of the
-existing trailers.
-+
-If it is `start`, then each new trailer will appear at the start,
-instead of the end, of the existing trailers.
-+
-If it is `after`, then each new trailer will appear just after the
-last trailer with the same <key>.
-+
-If it is `before`, then each new trailer will appear just before the
-first trailer with the same <key>.
+include::includes/cmd-config-section-all.adoc[]
-trailer.ifexists::
- This option makes it possible to choose what action will be
- performed when there is already at least one trailer with the
- same <key> in the input.
-+
-The valid values for this option are: `addIfDifferentNeighbor` (this
-is the default), `addIfDifferent`, `add`, `replace` or `doNothing`.
-+
-With `addIfDifferentNeighbor`, a new trailer will be added only if no
-trailer with the same (<key>, <value>) pair is above or below the line
-where the new trailer will be added.
-+
-With `addIfDifferent`, a new trailer will be added only if no trailer
-with the same (<key>, <value>) pair is already in the input.
-+
-With `add`, a new trailer will be added, even if some trailers with
-the same (<key>, <value>) pair are already in the input.
-+
-With `replace`, an existing trailer with the same <key> will be
-deleted and the new trailer will be added. The deleted trailer will be
-the closest one (with the same <key>) to the place where the new one
-will be added.
-+
-With `doNothing`, nothing will be done; that is no new trailer will be
-added if there is already one with the same <key> in the input.
-
-trailer.ifmissing::
- This option makes it possible to choose what action will be
- performed when there is not yet any trailer with the same
- <key> in the input.
-+
-The valid values for this option are: `add` (this is the default) and
-`doNothing`.
-+
-With `add`, a new trailer will be added.
-+
-With `doNothing`, nothing will be done.
-
-trailer.<keyAlias>.key::
- Defines a <keyAlias> for the <key>. The <keyAlias> must be a
- prefix (case does not matter) of the <key>. For example, in `git
- config trailer.ack.key "Acked-by"` the "Acked-by" is the <key> and
- the "ack" is the <keyAlias>. This configuration allows the shorter
- `--trailer "ack:..."` invocation on the command line using the "ack"
- <keyAlias> instead of the longer `--trailer "Acked-by:..."`.
-+
-At the end of the <key>, a separator can appear and then some
-space characters. By default the only valid separator is ':',
-but this can be changed using the `trailer.separators` config
-variable.
-+
-If there is a separator in the key, then it overrides the default
-separator when adding the trailer.
-
-trailer.<keyAlias>.where::
- This option takes the same values as the 'trailer.where'
- configuration variable and it overrides what is specified by
- that option for trailers with the specified <keyAlias>.
-
-trailer.<keyAlias>.ifexists::
- This option takes the same values as the 'trailer.ifexists'
- configuration variable and it overrides what is specified by
- that option for trailers with the specified <keyAlias>.
-
-trailer.<keyAlias>.ifmissing::
- This option takes the same values as the 'trailer.ifmissing'
- configuration variable and it overrides what is specified by
- that option for trailers with the specified <keyAlias>.
-
-trailer.<keyAlias>.command::
- Deprecated in favor of 'trailer.<keyAlias>.cmd'.
- This option behaves in the same way as 'trailer.<keyAlias>.cmd', except
- that it doesn't pass anything as argument to the specified command.
- Instead the first occurrence of substring $ARG is replaced by the
- <value> that would be passed as argument.
-+
-Note that $ARG in the user's command is
-only replaced once and that the original way of replacing $ARG is not safe.
-+
-When both 'trailer.<keyAlias>.cmd' and 'trailer.<keyAlias>.command' are given
-for the same <keyAlias>, 'trailer.<keyAlias>.cmd' is used and
-'trailer.<keyAlias>.command' is ignored.
-
-trailer.<keyAlias>.cmd::
- This option can be used to specify a shell command that will be called
- once to automatically add a trailer with the specified <keyAlias>, and then
- called each time a '--trailer <keyAlias>=<value>' argument is specified to
- modify the <value> of the trailer that this option would produce.
-+
-When the specified command is first called to add a trailer
-with the specified <keyAlias>, the behavior is as if a special
-'--trailer <keyAlias>=<value>' argument was added at the beginning
-of the "git interpret-trailers" command, where <value>
-is taken to be the standard output of the command with any
-leading and trailing whitespace trimmed off.
-+
-If some '--trailer <keyAlias>=<value>' arguments are also passed
-on the command line, the command is called again once for each
-of these arguments with the same <keyAlias>. And the <value> part
-of these arguments, if any, will be passed to the command as its
-first argument. This way the command can produce a <value> computed
-from the <value> passed in the '--trailer <keyAlias>=<value>' argument.
+include::config/trailer.adoc[]
EXAMPLES
--------
diff --git a/Documentation/git-log.txt b/Documentation/git-log.adoc
index 579682172f..ae8a7e2d63 100644
--- a/Documentation/git-log.txt
+++ b/Documentation/git-log.adoc
@@ -16,7 +16,7 @@ DESCRIPTION
Shows the commit logs.
:git-log: 1
-include::rev-list-description.txt[]
+include::rev-list-description.adoc[]
The command takes options applicable to the linkgit:git-rev-list[1]
command to control what is shown and how, and options applicable to
@@ -89,7 +89,7 @@ produced by `--stat`, etc.
Intended to speed up tools that read log messages from `git log`
output by allowing them to allocate space in advance.
-include::line-range-options.txt[]
+include::line-range-options.adoc[]
<revision-range>::
Show only commits in the specified revision range. When no
@@ -109,9 +109,9 @@ include::line-range-options.txt[]
Paths may need to be prefixed with `--` to separate them from
options or the revision range, when confusion arises.
-include::rev-list-options.txt[]
+include::rev-list-options.adoc[]
-include::pretty-formats.txt[]
+include::pretty-formats.adoc[]
DIFF FORMATTING
---------------
@@ -128,9 +128,9 @@ the default format for merge commits.
:git-log: 1
:diff-merges-default: `off`
-include::diff-options.txt[]
+include::diff-options.adoc[]
-include::diff-generate-patch.txt[]
+include::diff-generate-patch.adoc[]
EXAMPLES
--------
@@ -192,7 +192,7 @@ EXAMPLES
DISCUSSION
----------
-include::i18n.txt[]
+include::i18n.adoc[]
CONFIGURATION
-------------
@@ -209,11 +209,11 @@ i18n.logOutputEncoding::
Defaults to the value of `i18n.commitEncoding` if set, and UTF-8
otherwise.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/log.txt[]
+include::config/log.adoc[]
-include::config/notes.txt[]
+include::config/notes.adoc[]
GIT
---
diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.adoc
index 58c529afbe..58c529afbe 100644
--- a/Documentation/git-ls-files.txt
+++ b/Documentation/git-ls-files.adoc
diff --git a/Documentation/git-ls-remote.txt b/Documentation/git-ls-remote.adoc
index d71c4ab3e2..d71c4ab3e2 100644
--- a/Documentation/git-ls-remote.txt
+++ b/Documentation/git-ls-remote.adoc
diff --git a/Documentation/git-ls-tree.txt b/Documentation/git-ls-tree.adoc
index 6572095d8d..6572095d8d 100644
--- a/Documentation/git-ls-tree.txt
+++ b/Documentation/git-ls-tree.adoc
diff --git a/Documentation/git-mailinfo.txt b/Documentation/git-mailinfo.adoc
index 28060283c7..3b24c9abd9 100644
--- a/Documentation/git-mailinfo.txt
+++ b/Documentation/git-mailinfo.adoc
@@ -118,9 +118,9 @@ If no such configuration option has been set, `warn` will be used.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/mailinfo.txt[]
+include::config/mailinfo.adoc[]
GIT
---
diff --git a/Documentation/git-mailsplit.txt b/Documentation/git-mailsplit.adoc
index 3f0a6662c8..3f0a6662c8 100644
--- a/Documentation/git-mailsplit.txt
+++ b/Documentation/git-mailsplit.adoc
diff --git a/Documentation/git-maintenance.txt b/Documentation/git-maintenance.adoc
index 6e6651309d..0450d74aff 100644
--- a/Documentation/git-maintenance.txt
+++ b/Documentation/git-maintenance.adoc
@@ -409,9 +409,9 @@ custom tasks.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/maintenance.txt[]
+include::config/maintenance.adoc[]
GIT
diff --git a/Documentation/git-merge-base.txt b/Documentation/git-merge-base.adoc
index 5ab957cfbc..5ab957cfbc 100644
--- a/Documentation/git-merge-base.txt
+++ b/Documentation/git-merge-base.adoc
diff --git a/Documentation/git-merge-file.txt b/Documentation/git-merge-file.adoc
index 71915a00fa..71915a00fa 100644
--- a/Documentation/git-merge-file.txt
+++ b/Documentation/git-merge-file.adoc
diff --git a/Documentation/git-merge-index.txt b/Documentation/git-merge-index.adoc
index eea56b3154..eea56b3154 100644
--- a/Documentation/git-merge-index.txt
+++ b/Documentation/git-merge-index.adoc
diff --git a/Documentation/git-merge-one-file.txt b/Documentation/git-merge-one-file.adoc
index 04e803d5d3..04e803d5d3 100644
--- a/Documentation/git-merge-one-file.txt
+++ b/Documentation/git-merge-one-file.adoc
diff --git a/Documentation/git-merge-tree.txt b/Documentation/git-merge-tree.adoc
index 0b6a8a19b1..0b6a8a19b1 100644
--- a/Documentation/git-merge-tree.txt
+++ b/Documentation/git-merge-tree.adoc
diff --git a/Documentation/git-merge.txt b/Documentation/git-merge.adoc
index 1ab69f61f5..64281d6d44 100644
--- a/Documentation/git-merge.txt
+++ b/Documentation/git-merge.adoc
@@ -65,7 +65,7 @@ OPTIONS
-------
:git-merge: 1
-include::merge-options.txt[]
+include::merge-options.adoc[]
-m <msg>::
Set the commit message to be used for the merge commit (in
@@ -91,7 +91,7 @@ invocations. The automated message can include the branch description.
If `--log` is specified, a shortlog of the commits being merged
will be appended to the specified message.
-include::rerere-options.txt[]
+include::rerere-options.adoc[]
--overwrite-ignore::
--no-overwrite-ignore::
@@ -385,7 +385,7 @@ changes into a merge commit. Small fixups like bumping
release/version name would be acceptable.
-include::merge-strategies.txt[]
+include::merge-strategies.adoc[]
CONFIGURATION
-------------
@@ -395,9 +395,9 @@ branch.<name>.mergeOptions::
supported options are the same as those of `git merge`, but option
values containing whitespace characters are currently not supported.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/merge.txt[]
+include::config/merge.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-mergetool--lib.txt b/Documentation/git-mergetool--lib.adoc
index 0726b560d4..0726b560d4 100644
--- a/Documentation/git-mergetool--lib.txt
+++ b/Documentation/git-mergetool--lib.adoc
diff --git a/Documentation/git-mergetool.txt b/Documentation/git-mergetool.adoc
index b9e20c5dcd..046c3258f0 100644
--- a/Documentation/git-mergetool.txt
+++ b/Documentation/git-mergetool.adoc
@@ -104,9 +104,9 @@ CONFIGURATION
-------------
:git-mergetool: 1
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/mergetool.txt[]
+include::config/mergetool.adoc[]
TEMPORARY FILES
---------------
@@ -123,7 +123,7 @@ BACKEND SPECIFIC HINTS
vimdiff
~~~~~~~
-include::mergetools/vimdiff.txt[]
+include::mergetools/vimdiff.adoc[]
GIT
---
diff --git a/Documentation/git-mktag.txt b/Documentation/git-mktag.adoc
index 006d759962..006d759962 100644
--- a/Documentation/git-mktag.txt
+++ b/Documentation/git-mktag.adoc
diff --git a/Documentation/git-mktree.txt b/Documentation/git-mktree.adoc
index 383f09dd33..383f09dd33 100644
--- a/Documentation/git-mktree.txt
+++ b/Documentation/git-mktree.adoc
diff --git a/Documentation/git-multi-pack-index.txt b/Documentation/git-multi-pack-index.adoc
index 631d5c7d15..631d5c7d15 100644
--- a/Documentation/git-multi-pack-index.txt
+++ b/Documentation/git-multi-pack-index.adoc
diff --git a/Documentation/git-mv.txt b/Documentation/git-mv.adoc
index dc1bf61534..dc1bf61534 100644
--- a/Documentation/git-mv.txt
+++ b/Documentation/git-mv.adoc
diff --git a/Documentation/git-name-rev.txt b/Documentation/git-name-rev.adoc
index d4f1c4d594..d4f1c4d594 100644
--- a/Documentation/git-name-rev.txt
+++ b/Documentation/git-name-rev.adoc
diff --git a/Documentation/git-notes.txt b/Documentation/git-notes.adoc
index 5c8e6ff566..bcfe3dacd3 100644
--- a/Documentation/git-notes.txt
+++ b/Documentation/git-notes.adoc
@@ -346,9 +346,9 @@ CONFIGURATION
This setting can be overridden through the environment and
command line.
-include::includes/cmd-config-section-rest.txt[]
+include::includes/cmd-config-section-rest.adoc[]
-include::config/notes.txt[]
+include::config/notes.adoc[]
ENVIRONMENT
diff --git a/Documentation/git-p4.txt b/Documentation/git-p4.adoc
index de5ee6748e..de5ee6748e 100644
--- a/Documentation/git-p4.txt
+++ b/Documentation/git-p4.adoc
diff --git a/Documentation/git-pack-objects.txt b/Documentation/git-pack-objects.adoc
index e32404c6aa..7f69ae4855 100644
--- a/Documentation/git-pack-objects.txt
+++ b/Documentation/git-pack-objects.adoc
@@ -15,7 +15,8 @@ SYNOPSIS
[--revs [--unpacked | --all]] [--keep-pack=<pack-name>]
[--cruft] [--cruft-expiration=<time>]
[--stdout [--filter=<filter-spec>] | <base-name>]
- [--shallow] [--keep-true-parents] [--[no-]sparse] < <object-list>
+ [--shallow] [--keep-true-parents] [--[no-]sparse]
+ [--name-hash-version=<n>] < <object-list>
DESCRIPTION
@@ -345,6 +346,35 @@ raise an error.
Restrict delta matches based on "islands". See DELTA ISLANDS
below.
+--name-hash-version=<n>::
+ While performing delta compression, Git groups objects that may be
+ similar based on heuristics using the path to that object. While
+ grouping objects by an exact path match is good for paths with
+ many versions, there are benefits for finding delta pairs across
+ different full paths. Git collects objects by type and then by a
+ "name hash" of the path and then by size, hoping to group objects
+ that will compress well together.
++
+The default name hash version is `1`, which prioritizes hash locality by
+considering the final bytes of the path as providing the maximum magnitude
+to the hash function. This version excels at distinguishing short paths
+and finding renames across directories. However, the hash function depends
+primarily on the final 16 bytes of the path. If there are many paths in
+the repo that have the same final 16 bytes and differ only by parent
+directory, then this name-hash may lead to too many collisions and cause
+poor results. At the moment, this version is required when writing
+reachability bitmap files with `--write-bitmap-index`.
++
+The name hash version `2` has similar locality features as version `1`,
+except it considers each path component separately and overlays the hashes
+with a shift. This still prioritizes the final bytes of the path, but also
+"salts" the lower bits of the hash using the parent directory names. This
+method allows for some of the locality benefits of version `1` while
+breaking most of the collisions from a similarly-named file appearing in
+many different directories. At the moment, this version is not allowed
+when writing reachability bitmap files with `--write-bitmap-index` and it
+will be automatically changed to version `1`.
+
DELTA ISLANDS
-------------
diff --git a/Documentation/git-pack-redundant.txt b/Documentation/git-pack-redundant.adoc
index 13c3eb5ec9..13c3eb5ec9 100644
--- a/Documentation/git-pack-redundant.txt
+++ b/Documentation/git-pack-redundant.adoc
diff --git a/Documentation/git-pack-refs.txt b/Documentation/git-pack-refs.adoc
index 2dcabaf74c..2dcabaf74c 100644
--- a/Documentation/git-pack-refs.txt
+++ b/Documentation/git-pack-refs.adoc
diff --git a/Documentation/git-patch-id.txt b/Documentation/git-patch-id.adoc
index 1d15fa45d5..1d15fa45d5 100644
--- a/Documentation/git-patch-id.txt
+++ b/Documentation/git-patch-id.adoc
diff --git a/Documentation/git-prune-packed.txt b/Documentation/git-prune-packed.adoc
index db742dcfee..db742dcfee 100644
--- a/Documentation/git-prune-packed.txt
+++ b/Documentation/git-prune-packed.adoc
diff --git a/Documentation/git-prune.txt b/Documentation/git-prune.adoc
index 9a45571b90..9a45571b90 100644
--- a/Documentation/git-prune.txt
+++ b/Documentation/git-prune.adoc
diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.adoc
index b2ae496e48..3f4ecc4730 100644
--- a/Documentation/git-pull.txt
+++ b/Documentation/git-pull.adoc
@@ -102,7 +102,7 @@ Options related to merging
:git-pull: 1
-include::merge-options.txt[]
+include::merge-options.adoc[]
-r::
--rebase[=(false|true|merges|interactive)]::
@@ -136,13 +136,13 @@ unless you have read linkgit:git-rebase[1] carefully.
Options related to fetching
~~~~~~~~~~~~~~~~~~~~~~~~~~~
-include::fetch-options.txt[]
+include::fetch-options.adoc[]
-include::pull-fetch-param.txt[]
+include::pull-fetch-param.adoc[]
-include::urls-remotes.txt[]
+include::urls-remotes.adoc[]
-include::merge-strategies.txt[]
+include::merge-strategies.adoc[]
DEFAULT BEHAVIOUR
-----------------
@@ -234,7 +234,7 @@ If you tried a pull which resulted in complex conflicts and
would want to start over, you can recover with 'git reset'.
-include::transfer-data-leaks.txt[]
+include::transfer-data-leaks.adoc[]
BUGS
----
diff --git a/Documentation/git-push.txt b/Documentation/git-push.adoc
index 9b7cfbc5c1..d1978650d6 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.adoc
@@ -432,7 +432,7 @@ further recursion will occur. In this case, "only" is treated as "on-demand".
--ipv6::
Use IPv6 addresses only, ignoring IPv4 addresses.
-include::urls-remotes.txt[]
+include::urls-remotes.adoc[]
OUTPUT
------
@@ -695,14 +695,14 @@ Commits A and B would no longer belong to a branch with a symbolic name,
and so would be unreachable. As such, these commits would be removed by
a `git gc` command on the origin repository.
-include::transfer-data-leaks.txt[]
+include::transfer-data-leaks.adoc[]
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/push.txt[]
+include::config/push.adoc[]
GIT
---
diff --git a/Documentation/git-quiltimport.txt b/Documentation/git-quiltimport.adoc
index 40e02d92eb..40e02d92eb 100644
--- a/Documentation/git-quiltimport.txt
+++ b/Documentation/git-quiltimport.adoc
diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.adoc
index db0e4279b5..db0e4279b5 100644
--- a/Documentation/git-range-diff.txt
+++ b/Documentation/git-range-diff.adoc
diff --git a/Documentation/git-read-tree.txt b/Documentation/git-read-tree.adoc
index 1c48c28996..1c48c28996 100644
--- a/Documentation/git-read-tree.txt
+++ b/Documentation/git-read-tree.adoc
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.adoc
index b18cdbc023..133fe8c5e6 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.adoc
@@ -401,7 +401,7 @@ See also INCOMPATIBLE OPTIONS below.
+
See also INCOMPATIBLE OPTIONS below.
-include::rerere-options.txt[]
+include::rerere-options.adoc[]
-S[<keyid>]::
--gpg-sign[=<keyid>]::
@@ -825,7 +825,7 @@ completeness:
* State directories: The two backends keep their state in different
directories under `.git/`
-include::merge-strategies.txt[]
+include::merge-strategies.adoc[]
NOTES
-----
@@ -1294,10 +1294,10 @@ merge cmake
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/rebase.txt[]
-include::config/sequencer.txt[]
+include::config/rebase.adoc[]
+include::config/sequencer.adoc[]
GIT
---
diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.adoc
index 20aca92073..20aca92073 100644
--- a/Documentation/git-receive-pack.txt
+++ b/Documentation/git-receive-pack.adoc
diff --git a/Documentation/git-reflog.txt b/Documentation/git-reflog.adoc
index a929c52982..a929c52982 100644
--- a/Documentation/git-reflog.txt
+++ b/Documentation/git-reflog.adoc
diff --git a/Documentation/git-refs.txt b/Documentation/git-refs.adoc
index 9829984b0a..95f25776aa 100644
--- a/Documentation/git-refs.txt
+++ b/Documentation/git-refs.adoc
@@ -34,7 +34,7 @@ The following options are specific to 'git refs migrate':
--ref-format=<format>::
The ref format to migrate the ref store to. Can be one of:
+
-include::ref-storage-format.txt[]
+include::ref-storage-format.adoc[]
--dry-run::
Perform the migration, but do not modify the repository. The migrated
diff --git a/Documentation/git-remote-ext.txt b/Documentation/git-remote-ext.adoc
index b33ee3c9e8..b33ee3c9e8 100644
--- a/Documentation/git-remote-ext.txt
+++ b/Documentation/git-remote-ext.adoc
diff --git a/Documentation/git-remote-fd.txt b/Documentation/git-remote-fd.adoc
index 1dd2648a79..1dd2648a79 100644
--- a/Documentation/git-remote-fd.txt
+++ b/Documentation/git-remote-fd.adoc
diff --git a/Documentation/git-remote-helpers.txto b/Documentation/git-remote-helpers.adoco
index 6f353ebfd3..6f353ebfd3 100644
--- a/Documentation/git-remote-helpers.txto
+++ b/Documentation/git-remote-helpers.adoco
diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.adoc
index 932a5c3ea4..932a5c3ea4 100644
--- a/Documentation/git-remote.txt
+++ b/Documentation/git-remote.adoc
diff --git a/Documentation/git-repack.txt b/Documentation/git-repack.adoc
index c902512a9e..5852a5c973 100644
--- a/Documentation/git-repack.txt
+++ b/Documentation/git-repack.adoc
@@ -9,7 +9,9 @@ git-repack - Pack unpacked objects in a repository
SYNOPSIS
--------
[verse]
-'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m] [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>] [--write-midx]
+'git repack' [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]
+ [--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]
+ [--write-midx] [--name-hash-version=<n>]
DESCRIPTION
-----------
@@ -249,6 +251,11 @@ linkgit:git-multi-pack-index[1]).
Write a multi-pack index (see linkgit:git-multi-pack-index[1])
containing the non-redundant packs.
+--name-hash-version=<n>::
+ Provide this argument to the underlying `git pack-objects` process.
+ See linkgit:git-pack-objects[1] for full details.
+
+
CONFIGURATION
-------------
diff --git a/Documentation/git-replace.txt b/Documentation/git-replace.adoc
index 0a65460adb..0a65460adb 100644
--- a/Documentation/git-replace.txt
+++ b/Documentation/git-replace.adoc
diff --git a/Documentation/git-replay.txt b/Documentation/git-replay.adoc
index 8f3300c683..0b12bf8aa4 100644
--- a/Documentation/git-replay.txt
+++ b/Documentation/git-replay.adoc
@@ -49,7 +49,7 @@ the new commits (in other words, this mimics a cherry-pick operation).
to. See "Specifying Ranges" in linkgit:git-rev-parse[1] and the
"Commit Limiting" options below.
-include::rev-list-options.txt[]
+include::rev-list-options.adoc[]
OUTPUT
------
diff --git a/Documentation/git-request-pull.txt b/Documentation/git-request-pull.adoc
index 15dcbb6d91..15dcbb6d91 100644
--- a/Documentation/git-request-pull.txt
+++ b/Documentation/git-request-pull.adoc
diff --git a/Documentation/git-rerere.txt b/Documentation/git-rerere.adoc
index 992b469270..992b469270 100644
--- a/Documentation/git-rerere.txt
+++ b/Documentation/git-rerere.adoc
diff --git a/Documentation/git-reset.txt b/Documentation/git-reset.adoc
index 79ad5643ee..79ad5643ee 100644
--- a/Documentation/git-reset.txt
+++ b/Documentation/git-reset.adoc
diff --git a/Documentation/git-restore.txt b/Documentation/git-restore.adoc
index 751f01b441..751f01b441 100644
--- a/Documentation/git-restore.txt
+++ b/Documentation/git-restore.adoc
diff --git a/Documentation/git-rev-list.txt b/Documentation/git-rev-list.adoc
index 2e05c4b510..f582491dd4 100644
--- a/Documentation/git-rev-list.txt
+++ b/Documentation/git-rev-list.adoc
@@ -15,7 +15,7 @@ DESCRIPTION
-----------
:git-rev-list: 1
-include::rev-list-description.txt[]
+include::rev-list-description.adoc[]
'rev-list' is an essential Git command, since it
provides the ability to build and traverse commit ancestry graphs. For
@@ -27,9 +27,9 @@ OPTIONS
-------
:git-rev-list: 1
-include::rev-list-options.txt[]
+include::rev-list-options.adoc[]
-include::pretty-formats.txt[]
+include::pretty-formats.adoc[]
EXAMPLES
--------
diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.adoc
index dc12d38534..cc32b4b4f0 100644
--- a/Documentation/git-rev-parse.txt
+++ b/Documentation/git-rev-parse.adoc
@@ -351,7 +351,7 @@ Other Options
Flags and parameters to be parsed.
-include::revisions.txt[]
+include::revisions.adoc[]
PARSEOPT
--------
diff --git a/Documentation/git-revert.txt b/Documentation/git-revert.adoc
index 568925db53..ffba365e63 100644
--- a/Documentation/git-revert.txt
+++ b/Documentation/git-revert.adoc
@@ -112,7 +112,7 @@ effect to your index in a row.
Pass the merge strategy-specific option through to the
merge strategy. See linkgit:git-merge[1] for details.
-include::rerere-options.txt[]
+include::rerere-options.adoc[]
--reference::
Instead of starting the body of the log message with "This
@@ -125,7 +125,7 @@ include::rerere-options.txt[]
SEQUENCER SUBCOMMANDS
---------------------
-include::sequencer.txt[]
+include::sequencer.adoc[]
EXAMPLES
--------
@@ -155,9 +155,9 @@ Please consider rewording these to be shorter and more unique.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/revert.txt[]
+include::config/revert.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-rm.txt b/Documentation/git-rm.adoc
index 363a26934f..363a26934f 100644
--- a/Documentation/git-rm.txt
+++ b/Documentation/git-rm.adoc
diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.adoc
index bc3ef45acb..7f223db42d 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.adoc
@@ -492,9 +492,9 @@ Information
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/sendemail.txt[]
+include::config/sendemail.adoc[]
EXAMPLES
--------
diff --git a/Documentation/git-send-pack.txt b/Documentation/git-send-pack.adoc
index b9e73f2e77..b9e73f2e77 100644
--- a/Documentation/git-send-pack.txt
+++ b/Documentation/git-send-pack.adoc
diff --git a/Documentation/git-sh-i18n--envsubst.txt b/Documentation/git-sh-i18n--envsubst.adoc
index 2ffaf9392e..2ffaf9392e 100644
--- a/Documentation/git-sh-i18n--envsubst.txt
+++ b/Documentation/git-sh-i18n--envsubst.adoc
diff --git a/Documentation/git-sh-i18n.txt b/Documentation/git-sh-i18n.adoc
index 60cf49cb2a..60cf49cb2a 100644
--- a/Documentation/git-sh-i18n.txt
+++ b/Documentation/git-sh-i18n.adoc
diff --git a/Documentation/git-sh-setup.txt b/Documentation/git-sh-setup.adoc
index bdaf6e5fc4..bdaf6e5fc4 100644
--- a/Documentation/git-sh-setup.txt
+++ b/Documentation/git-sh-setup.adoc
diff --git a/Documentation/git-shell.txt b/Documentation/git-shell.adoc
index 11361f33e9..11361f33e9 100644
--- a/Documentation/git-shell.txt
+++ b/Documentation/git-shell.adoc
diff --git a/Documentation/git-shortlog.txt b/Documentation/git-shortlog.adoc
index 7d0277d033..d8ab38dcc1 100644
--- a/Documentation/git-shortlog.txt
+++ b/Documentation/git-shortlog.adoc
@@ -114,7 +114,7 @@ Paths may need to be prefixed with `--` to separate them from
options or the revision range, when confusion arises.
:git-shortlog: 1
-include::rev-list-options.txt[]
+include::rev-list-options.adoc[]
MAPPING AUTHORS
---------------
diff --git a/Documentation/git-show-branch.txt b/Documentation/git-show-branch.adoc
index bc31d8b6d3..7e86d54a24 100644
--- a/Documentation/git-show-branch.txt
+++ b/Documentation/git-show-branch.adoc
@@ -202,9 +202,9 @@ topologically related to each other.
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/showbranch.txt[]
+include::config/showbranch.adoc[]
GIT
---
diff --git a/Documentation/git-show-index.txt b/Documentation/git-show-index.adoc
index 7e574ea243..00b3a908cd 100644
--- a/Documentation/git-show-index.txt
+++ b/Documentation/git-show-index.adoc
@@ -45,7 +45,7 @@ OPTIONS
algorithm for the current repository (set by `extensions.objectFormat`), or
'sha1' if no value is set or outside a repository..
+
-include::object-format-disclaimer.txt[]
+include::object-format-disclaimer.adoc[]
GIT
---
diff --git a/Documentation/git-show-ref.txt b/Documentation/git-show-ref.adoc
index 616d919655..616d919655 100644
--- a/Documentation/git-show-ref.txt
+++ b/Documentation/git-show-ref.adoc
diff --git a/Documentation/git-show.txt b/Documentation/git-show.adoc
index 5eb67439af..51044c814f 100644
--- a/Documentation/git-show.txt
+++ b/Documentation/git-show.adoc
@@ -39,10 +39,10 @@ OPTIONS
For a more complete list of ways to spell object names, see
"SPECIFYING REVISIONS" section in linkgit:gitrevisions[7].
-include::pretty-options.txt[]
+include::pretty-options.adoc[]
-include::pretty-formats.txt[]
+include::pretty-formats.adoc[]
DIFF FORMATTING
@@ -52,9 +52,9 @@ diff output.
:git-log: 1
:diff-merges-default: `dense-combined`
-include::diff-options.txt[]
+include::diff-options.adoc[]
-include::diff-generate-patch.txt[]
+include::diff-generate-patch.adoc[]
EXAMPLES
@@ -83,7 +83,7 @@ EXAMPLES
DISCUSSION
----------
-include::i18n.txt[]
+include::i18n.adoc[]
GIT
---
diff --git a/Documentation/git-sparse-checkout.txt b/Documentation/git-sparse-checkout.adoc
index 529a8edd9c..529a8edd9c 100644
--- a/Documentation/git-sparse-checkout.txt
+++ b/Documentation/git-sparse-checkout.adoc
diff --git a/Documentation/git-stage.txt b/Documentation/git-stage.adoc
index 2f6aaa75b9..2f6aaa75b9 100644
--- a/Documentation/git-stage.txt
+++ b/Documentation/git-stage.adoc
diff --git a/Documentation/git-stash.txt b/Documentation/git-stash.adoc
index 06fb7f1d18..1a5177f498 100644
--- a/Documentation/git-stash.txt
+++ b/Documentation/git-stash.adoc
@@ -388,9 +388,9 @@ xargs git log --merges --no-walk --grep=WIP
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/stash.txt[]
+include::config/stash.adoc[]
SEE ALSO
diff --git a/Documentation/git-status.txt b/Documentation/git-status.adoc
index 9a376886a5..9a376886a5 100644
--- a/Documentation/git-status.txt
+++ b/Documentation/git-status.adoc
diff --git a/Documentation/git-stripspace.txt b/Documentation/git-stripspace.adoc
index a293327581..a293327581 100644
--- a/Documentation/git-stripspace.txt
+++ b/Documentation/git-stripspace.adoc
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.adoc
index 87d8e0f0c5..87d8e0f0c5 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.adoc
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.adoc
index bcf7d84a87..bcf7d84a87 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.adoc
diff --git a/Documentation/git-switch.txt b/Documentation/git-switch.adoc
index f38e4c8afa..f55315c51e 100644
--- a/Documentation/git-switch.txt
+++ b/Documentation/git-switch.adoc
@@ -273,9 +273,9 @@ $ git switch -c good-surprises
CONFIGURATION
-------------
-include::includes/cmd-config-section-all.txt[]
+include::includes/cmd-config-section-all.adoc[]
-include::config/checkout.txt[]
+include::config/checkout.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-symbolic-ref.txt b/Documentation/git-symbolic-ref.adoc
index 33ca381fde..33ca381fde 100644
--- a/Documentation/git-symbolic-ref.txt
+++ b/Documentation/git-symbolic-ref.adoc
diff --git a/Documentation/git-tag.txt b/Documentation/git-tag.adoc
index 4494729f5e..a4b1c0ec05 100644
--- a/Documentation/git-tag.txt
+++ b/Documentation/git-tag.adoc
@@ -391,7 +391,7 @@ For example:
$ GIT_COMMITTER_DATE="2006-10-02 10:31" git tag -s v1.0.1
------------
-include::date-formats.txt[]
+include::date-formats.adoc[]
FILES
-----
@@ -406,7 +406,7 @@ FILES
NOTES
-----
-include::ref-reachability-filters.txt[]
+include::ref-reachability-filters.adoc[]
SEE ALSO
--------
diff --git a/Documentation/git-tools.txt b/Documentation/git-tools.adoc
index d0fec4cddd..d0fec4cddd 100644
--- a/Documentation/git-tools.txt
+++ b/Documentation/git-tools.adoc
diff --git a/Documentation/git-unpack-file.txt b/Documentation/git-unpack-file.adoc
index e9f148a00d..e9f148a00d 100644
--- a/Documentation/git-unpack-file.txt
+++ b/Documentation/git-unpack-file.adoc
diff --git a/Documentation/git-unpack-objects.txt b/Documentation/git-unpack-objects.adoc
index b3de50d710..b3de50d710 100644
--- a/Documentation/git-unpack-objects.txt
+++ b/Documentation/git-unpack-objects.adoc
diff --git a/Documentation/git-update-index.txt b/Documentation/git-update-index.adoc
index 7128aed540..7128aed540 100644
--- a/Documentation/git-update-index.txt
+++ b/Documentation/git-update-index.adoc
diff --git a/Documentation/git-update-ref.txt b/Documentation/git-update-ref.adoc
index 9e6935d38d..9e6935d38d 100644
--- a/Documentation/git-update-ref.txt
+++ b/Documentation/git-update-ref.adoc
diff --git a/Documentation/git-update-server-info.txt b/Documentation/git-update-server-info.adoc
index 6bc9b50d89..6bc9b50d89 100644
--- a/Documentation/git-update-server-info.txt
+++ b/Documentation/git-update-server-info.adoc
diff --git a/Documentation/git-upload-archive.txt b/Documentation/git-upload-archive.adoc
index e8eb10baad..e8eb10baad 100644
--- a/Documentation/git-upload-archive.txt
+++ b/Documentation/git-upload-archive.adoc
diff --git a/Documentation/git-upload-pack.txt b/Documentation/git-upload-pack.adoc
index 516d1639d9..516d1639d9 100644
--- a/Documentation/git-upload-pack.txt
+++ b/Documentation/git-upload-pack.adoc
diff --git a/Documentation/git-var.txt b/Documentation/git-var.adoc
index 0680568dfd..0680568dfd 100644
--- a/Documentation/git-var.txt
+++ b/Documentation/git-var.adoc
diff --git a/Documentation/git-verify-commit.txt b/Documentation/git-verify-commit.adoc
index aee4c40eac..aee4c40eac 100644
--- a/Documentation/git-verify-commit.txt
+++ b/Documentation/git-verify-commit.adoc
diff --git a/Documentation/git-verify-pack.txt b/Documentation/git-verify-pack.adoc
index d7e886918a..d7e886918a 100644
--- a/Documentation/git-verify-pack.txt
+++ b/Documentation/git-verify-pack.adoc
diff --git a/Documentation/git-verify-tag.txt b/Documentation/git-verify-tag.adoc
index 81d50ecc4c..81d50ecc4c 100644
--- a/Documentation/git-verify-tag.txt
+++ b/Documentation/git-verify-tag.adoc
diff --git a/Documentation/git-version.txt b/Documentation/git-version.adoc
index 80fa7754a6..80fa7754a6 100644
--- a/Documentation/git-version.txt
+++ b/Documentation/git-version.adoc
diff --git a/Documentation/git-web--browse.txt b/Documentation/git-web--browse.adoc
index f2f996cbe1..f2f996cbe1 100644
--- a/Documentation/git-web--browse.txt
+++ b/Documentation/git-web--browse.adoc
diff --git a/Documentation/git-whatchanged.txt b/Documentation/git-whatchanged.adoc
index 8e55e0bb1e..8e55e0bb1e 100644
--- a/Documentation/git-whatchanged.txt
+++ b/Documentation/git-whatchanged.adoc
diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.adoc
index 8340b7f028..8340b7f028 100644
--- a/Documentation/git-worktree.txt
+++ b/Documentation/git-worktree.adoc
diff --git a/Documentation/git-write-tree.txt b/Documentation/git-write-tree.adoc
index f22041a9dc..f22041a9dc 100644
--- a/Documentation/git-write-tree.txt
+++ b/Documentation/git-write-tree.adoc
diff --git a/Documentation/git.txt b/Documentation/git.adoc
index e89a91dd0d..a9c1183318 100644
--- a/Documentation/git.txt
+++ b/Documentation/git.adoc
@@ -245,17 +245,17 @@ ancillary user utilities.
Main porcelain commands
~~~~~~~~~~~~~~~~~~~~~~~
-include::{build_dir}/cmds-mainporcelain.txt[]
+include::{build_dir}/cmds-mainporcelain.adoc[]
Ancillary Commands
~~~~~~~~~~~~~~~~~~
Manipulators:
-include::{build_dir}/cmds-ancillarymanipulators.txt[]
+include::{build_dir}/cmds-ancillarymanipulators.adoc[]
Interrogators:
-include::{build_dir}/cmds-ancillaryinterrogators.txt[]
+include::{build_dir}/cmds-ancillaryinterrogators.adoc[]
Interacting with Others
@@ -264,7 +264,7 @@ Interacting with Others
These commands are to interact with foreign SCM and with other
people via patch over e-mail.
-include::{build_dir}/cmds-foreignscminterface.txt[]
+include::{build_dir}/cmds-foreignscminterface.adoc[]
Reset, restore and revert
~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -313,13 +313,13 @@ repositories.
Manipulation commands
~~~~~~~~~~~~~~~~~~~~~
-include::{build_dir}/cmds-plumbingmanipulators.txt[]
+include::{build_dir}/cmds-plumbingmanipulators.adoc[]
Interrogation commands
~~~~~~~~~~~~~~~~~~~~~~
-include::{build_dir}/cmds-plumbinginterrogators.txt[]
+include::{build_dir}/cmds-plumbinginterrogators.adoc[]
In general, the interrogate commands do not touch the files in
the working tree.
@@ -328,12 +328,12 @@ the working tree.
Syncing repositories
~~~~~~~~~~~~~~~~~~~~
-include::{build_dir}/cmds-synchingrepositories.txt[]
+include::{build_dir}/cmds-synchingrepositories.adoc[]
The following are helper commands used by the above; end users
typically do not use them directly.
-include::{build_dir}/cmds-synchelpers.txt[]
+include::{build_dir}/cmds-synchelpers.adoc[]
Internal helper commands
@@ -342,14 +342,14 @@ Internal helper commands
These are internal helper commands used by other commands; end
users typically do not use them directly.
-include::{build_dir}/cmds-purehelpers.txt[]
+include::{build_dir}/cmds-purehelpers.adoc[]
Guides
------
The following documentation pages are guides about Git concepts.
-include::{build_dir}/cmds-guide.txt[]
+include::{build_dir}/cmds-guide.adoc[]
Repository, command and file interfaces
---------------------------------------
@@ -358,7 +358,7 @@ This documentation discusses repository and command interfaces which
users are expected to interact with directly. See `--user-formats` in
linkgit:git-help[1] for more details on the criteria.
-include::{build_dir}/cmds-userinterfaces.txt[]
+include::{build_dir}/cmds-userinterfaces.adoc[]
File formats, protocols and other developer interfaces
------------------------------------------------------
@@ -367,7 +367,7 @@ This documentation discusses file formats, over-the-wire protocols and
other git developer interfaces. See `--developer-interfaces` in
linkgit:git-help[1].
-include::{build_dir}/cmds-developerinterfaces.txt[]
+include::{build_dir}/cmds-developerinterfaces.adoc[]
Configuration Mechanism
-----------------------
diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.adoc
index 5d12b78549..5d12b78549 100644
--- a/Documentation/gitattributes.txt
+++ b/Documentation/gitattributes.adoc
diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.adoc
index 04193ec907..04193ec907 100644
--- a/Documentation/gitcli.txt
+++ b/Documentation/gitcli.adoc
diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.adoc
index 2122aeb976..2122aeb976 100644
--- a/Documentation/gitcore-tutorial.txt
+++ b/Documentation/gitcore-tutorial.adoc
diff --git a/Documentation/gitcredentials.txt b/Documentation/gitcredentials.adoc
index 3337bb475d..3337bb475d 100644
--- a/Documentation/gitcredentials.txt
+++ b/Documentation/gitcredentials.adoc
diff --git a/Documentation/gitcvs-migration.txt b/Documentation/gitcvs-migration.adoc
index 1cd1283d0f..1cd1283d0f 100644
--- a/Documentation/gitcvs-migration.txt
+++ b/Documentation/gitcvs-migration.adoc
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.adoc
index 642c51227b..642c51227b 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.adoc
diff --git a/Documentation/giteveryday.txt b/Documentation/giteveryday.adoc
index 6cfdd0e07b..6cfdd0e07b 100644
--- a/Documentation/giteveryday.txt
+++ b/Documentation/giteveryday.adoc
diff --git a/Documentation/gitfaq.txt b/Documentation/gitfaq.adoc
index f2917d142c..f2917d142c 100644
--- a/Documentation/gitfaq.txt
+++ b/Documentation/gitfaq.adoc
diff --git a/Documentation/gitformat-bundle.txt b/Documentation/gitformat-bundle.adoc
index 1b75cf71ce..1b75cf71ce 100644
--- a/Documentation/gitformat-bundle.txt
+++ b/Documentation/gitformat-bundle.adoc
diff --git a/Documentation/gitformat-chunk.txt b/Documentation/gitformat-chunk.adoc
index 3315df6201..3315df6201 100644
--- a/Documentation/gitformat-chunk.txt
+++ b/Documentation/gitformat-chunk.adoc
diff --git a/Documentation/gitformat-commit-graph.txt b/Documentation/gitformat-commit-graph.adoc
index 14d1631234..14d1631234 100644
--- a/Documentation/gitformat-commit-graph.txt
+++ b/Documentation/gitformat-commit-graph.adoc
diff --git a/Documentation/gitformat-index.txt b/Documentation/gitformat-index.adoc
index 145cace1fe..145cace1fe 100644
--- a/Documentation/gitformat-index.txt
+++ b/Documentation/gitformat-index.adoc
diff --git a/Documentation/gitformat-pack.txt b/Documentation/gitformat-pack.adoc
index d6ae229be5..d6ae229be5 100644
--- a/Documentation/gitformat-pack.txt
+++ b/Documentation/gitformat-pack.adoc
diff --git a/Documentation/gitformat-signature.txt b/Documentation/gitformat-signature.adoc
index d4d3a31f03..d4d3a31f03 100644
--- a/Documentation/gitformat-signature.txt
+++ b/Documentation/gitformat-signature.adoc
diff --git a/Documentation/gitglossary.txt b/Documentation/gitglossary.adoc
index 571f640f5c..0e85be4847 100644
--- a/Documentation/gitglossary.txt
+++ b/Documentation/gitglossary.adoc
@@ -12,7 +12,7 @@ SYNOPSIS
DESCRIPTION
-----------
-include::glossary-content.txt[]
+include::glossary-content.adoc[]
SEE ALSO
--------
diff --git a/Documentation/githooks.txt b/Documentation/githooks.adoc
index 0397dec64d..0397dec64d 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.adoc
diff --git a/Documentation/gitignore.txt b/Documentation/gitignore.adoc
index 5e0964ef41..5e0964ef41 100644
--- a/Documentation/gitignore.txt
+++ b/Documentation/gitignore.adoc
diff --git a/Documentation/gitk.txt b/Documentation/gitk.adoc
index 35b3996029..58ce40ddb1 100644
--- a/Documentation/gitk.txt
+++ b/Documentation/gitk.adoc
@@ -98,7 +98,7 @@ linkgit:git-rev-list[1] for a complete list.
(See "History simplification" in linkgit:git-log[1] for a more
detailed explanation.)
-include::line-range-options.txt[]
+include::line-range-options.adoc[]
<revision range>::
diff --git a/Documentation/gitmailmap.txt b/Documentation/gitmailmap.adoc
index 06f4af93fe..06f4af93fe 100644
--- a/Documentation/gitmailmap.txt
+++ b/Documentation/gitmailmap.adoc
diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.adoc
index d9bec8b187..d9bec8b187 100644
--- a/Documentation/gitmodules.txt
+++ b/Documentation/gitmodules.adoc
diff --git a/Documentation/gitnamespaces.txt b/Documentation/gitnamespaces.adoc
index 1c8d2ecc35..06f4d37efa 100644
--- a/Documentation/gitnamespaces.txt
+++ b/Documentation/gitnamespaces.adoc
@@ -61,7 +61,7 @@ For a simple local test, you can use linkgit:git-remote-ext[1]:
git clone ext::'git --namespace=foo %s /tmp/prefixed.git'
----------
-include::transfer-data-leaks.txt[]
+include::transfer-data-leaks.adoc[]
GIT
---
diff --git a/Documentation/gitpacking.txt b/Documentation/gitpacking.adoc
index 321154d4e6..a56596e2d1 100644
--- a/Documentation/gitpacking.txt
+++ b/Documentation/gitpacking.adoc
@@ -136,7 +136,7 @@ chunks of "stableSize" in order of age.
The exact configuration for pseudo-merges is as follows:
-include::config/bitmap-pseudo-merge.txt[]
+include::config/bitmap-pseudo-merge.adoc[]
=== Examples
diff --git a/Documentation/gitprotocol-capabilities.txt b/Documentation/gitprotocol-capabilities.adoc
index 2cf7735be4..2cf7735be4 100644
--- a/Documentation/gitprotocol-capabilities.txt
+++ b/Documentation/gitprotocol-capabilities.adoc
diff --git a/Documentation/gitprotocol-common.txt b/Documentation/gitprotocol-common.adoc
index cdc9d6e707..cdc9d6e707 100644
--- a/Documentation/gitprotocol-common.txt
+++ b/Documentation/gitprotocol-common.adoc
diff --git a/Documentation/gitprotocol-http.txt b/Documentation/gitprotocol-http.adoc
index ec40a550cc..ec40a550cc 100644
--- a/Documentation/gitprotocol-http.txt
+++ b/Documentation/gitprotocol-http.adoc
diff --git a/Documentation/gitprotocol-pack.txt b/Documentation/gitprotocol-pack.adoc
index 837b691c89..837b691c89 100644
--- a/Documentation/gitprotocol-pack.txt
+++ b/Documentation/gitprotocol-pack.adoc
diff --git a/Documentation/gitprotocol-v2.txt b/Documentation/gitprotocol-v2.adoc
index 1652fef3ae..1652fef3ae 100644
--- a/Documentation/gitprotocol-v2.txt
+++ b/Documentation/gitprotocol-v2.adoc
diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.adoc
index d0be008e5e..d0be008e5e 100644
--- a/Documentation/gitremote-helpers.txt
+++ b/Documentation/gitremote-helpers.adoc
diff --git a/Documentation/gitrepository-layout.txt b/Documentation/gitrepository-layout.adoc
index fa8b51daf0..6348ef1dcd 100644
--- a/Documentation/gitrepository-layout.txt
+++ b/Documentation/gitrepository-layout.adoc
@@ -153,7 +153,7 @@ config.worktree::
linkgit:git-worktree[1]).
branches::
- A slightly deprecated way to store shorthands to be used
+ A deprecated way to store shorthands to be used
to specify a URL to 'git fetch', 'git pull' and 'git push'.
A file can be stored as `branches/<name>` and then
'name' can be given to these commands in place of
@@ -162,7 +162,8 @@ branches::
and not likely to be found in modern repositories. This
directory is ignored if $GIT_COMMON_DIR is set and
"$GIT_COMMON_DIR/branches" will be used instead.
-
++
+Git will stop reading remotes from this directory in Git 3.0.
hooks::
Hooks are customization scripts used by various Git
@@ -238,6 +239,8 @@ remotes::
and not likely to be found in modern repositories. This
directory is ignored if $GIT_COMMON_DIR is set and
"$GIT_COMMON_DIR/remotes" will be used instead.
++
+Git will stop reading remotes from this directory in Git 3.0.
logs::
Records of changes made to refs are stored in this directory.
@@ -292,7 +295,7 @@ worktrees/<id>/locked::
worktrees/<id>/config.worktree::
Working directory specific configuration file.
-include::technical/repository-version.txt[]
+include::technical/repository-version.adoc[]
SEE ALSO
--------
diff --git a/Documentation/gitrevisions.txt b/Documentation/gitrevisions.adoc
index d407b7dee1..7146117de5 100644
--- a/Documentation/gitrevisions.txt
+++ b/Documentation/gitrevisions.adoc
@@ -24,7 +24,7 @@ linkgit:git-push[1]) can also take revision parameters which denote
other objects than commits, e.g. blobs ("files") or trees
("directories of files").
-include::revisions.txt[]
+include::revisions.adoc[]
SEE ALSO
diff --git a/Documentation/gitsubmodules.txt b/Documentation/gitsubmodules.adoc
index f7b5a25a0c..f7b5a25a0c 100644
--- a/Documentation/gitsubmodules.txt
+++ b/Documentation/gitsubmodules.adoc
diff --git a/Documentation/gittutorial-2.txt b/Documentation/gittutorial-2.adoc
index 8bdb7d0bd3..8bdb7d0bd3 100644
--- a/Documentation/gittutorial-2.txt
+++ b/Documentation/gittutorial-2.adoc
diff --git a/Documentation/gittutorial.txt b/Documentation/gittutorial.adoc
index f89ad30cf6..f89ad30cf6 100644
--- a/Documentation/gittutorial.txt
+++ b/Documentation/gittutorial.adoc
diff --git a/Documentation/gitweb.txt b/Documentation/gitweb.adoc
index 5e2b491ec2..5e2b491ec2 100644
--- a/Documentation/gitweb.txt
+++ b/Documentation/gitweb.adoc
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.adoc
index 85983587fc..85983587fc 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.adoc
diff --git a/Documentation/gitworkflows.txt b/Documentation/gitworkflows.adoc
index 59305265c5..59305265c5 100644
--- a/Documentation/gitworkflows.txt
+++ b/Documentation/gitworkflows.adoc
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.adoc
index 575c18f776..575c18f776 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.adoc
diff --git a/Documentation/howto/coordinate-embargoed-releases.txt b/Documentation/howto/coordinate-embargoed-releases.adoc
index b9cb95e82f..b9cb95e82f 100644
--- a/Documentation/howto/coordinate-embargoed-releases.txt
+++ b/Documentation/howto/coordinate-embargoed-releases.adoc
diff --git a/Documentation/howto/keep-canonical-history-correct.txt b/Documentation/howto/keep-canonical-history-correct.adoc
index e98f03275e..e98f03275e 100644
--- a/Documentation/howto/keep-canonical-history-correct.txt
+++ b/Documentation/howto/keep-canonical-history-correct.adoc
diff --git a/Documentation/howto/maintain-git.txt b/Documentation/howto/maintain-git.adoc
index 45e2599c5d..45e2599c5d 100644
--- a/Documentation/howto/maintain-git.txt
+++ b/Documentation/howto/maintain-git.adoc
diff --git a/Documentation/howto/new-command.txt b/Documentation/howto/new-command.adoc
index 880c51112b..880c51112b 100644
--- a/Documentation/howto/new-command.txt
+++ b/Documentation/howto/new-command.adoc
diff --git a/Documentation/howto/rebase-from-internal-branch.txt b/Documentation/howto/rebase-from-internal-branch.adoc
index f2e10a7ec8..f2e10a7ec8 100644
--- a/Documentation/howto/rebase-from-internal-branch.txt
+++ b/Documentation/howto/rebase-from-internal-branch.adoc
diff --git a/Documentation/howto/rebuild-from-update-hook.txt b/Documentation/howto/rebuild-from-update-hook.adoc
index db219f5c07..db219f5c07 100644
--- a/Documentation/howto/rebuild-from-update-hook.txt
+++ b/Documentation/howto/rebuild-from-update-hook.adoc
diff --git a/Documentation/howto/recover-corrupted-blob-object.txt b/Documentation/howto/recover-corrupted-blob-object.adoc
index 1b3b188d3c..1b3b188d3c 100644
--- a/Documentation/howto/recover-corrupted-blob-object.txt
+++ b/Documentation/howto/recover-corrupted-blob-object.adoc
diff --git a/Documentation/howto/recover-corrupted-object-harder.txt b/Documentation/howto/recover-corrupted-object-harder.adoc
index 5efb4fe81f..5efb4fe81f 100644
--- a/Documentation/howto/recover-corrupted-object-harder.txt
+++ b/Documentation/howto/recover-corrupted-object-harder.adoc
diff --git a/Documentation/howto/revert-a-faulty-merge.txt b/Documentation/howto/revert-a-faulty-merge.adoc
index 19f59cc888..19f59cc888 100644
--- a/Documentation/howto/revert-a-faulty-merge.txt
+++ b/Documentation/howto/revert-a-faulty-merge.adoc
diff --git a/Documentation/howto/revert-branch-rebase.txt b/Documentation/howto/revert-branch-rebase.adoc
index a3e5595a56..a3e5595a56 100644
--- a/Documentation/howto/revert-branch-rebase.txt
+++ b/Documentation/howto/revert-branch-rebase.adoc
diff --git a/Documentation/howto/separating-topic-branches.txt b/Documentation/howto/separating-topic-branches.adoc
index 81be0d6115..81be0d6115 100644
--- a/Documentation/howto/separating-topic-branches.txt
+++ b/Documentation/howto/separating-topic-branches.adoc
diff --git a/Documentation/howto/setup-git-server-over-http.txt b/Documentation/howto/setup-git-server-over-http.adoc
index bfe6f9b500..bfe6f9b500 100644
--- a/Documentation/howto/setup-git-server-over-http.txt
+++ b/Documentation/howto/setup-git-server-over-http.adoc
diff --git a/Documentation/howto/update-hook-example.txt b/Documentation/howto/update-hook-example.adoc
index 4e727deedd..4e727deedd 100644
--- a/Documentation/howto/update-hook-example.txt
+++ b/Documentation/howto/update-hook-example.adoc
diff --git a/Documentation/howto/use-git-daemon.txt b/Documentation/howto/use-git-daemon.adoc
index 2cad9b3ca5..2cad9b3ca5 100644
--- a/Documentation/howto/use-git-daemon.txt
+++ b/Documentation/howto/use-git-daemon.adoc
diff --git a/Documentation/howto/using-merge-subtree.txt b/Documentation/howto/using-merge-subtree.adoc
index 3bd581ac35..3bd581ac35 100644
--- a/Documentation/howto/using-merge-subtree.txt
+++ b/Documentation/howto/using-merge-subtree.adoc
diff --git a/Documentation/howto/using-signed-tag-in-pull-request.txt b/Documentation/howto/using-signed-tag-in-pull-request.adoc
index bbf040eda8..bbf040eda8 100644
--- a/Documentation/howto/using-signed-tag-in-pull-request.txt
+++ b/Documentation/howto/using-signed-tag-in-pull-request.adoc
diff --git a/Documentation/i18n.txt b/Documentation/i18n.adoc
index baff780a7e..baff780a7e 100644
--- a/Documentation/i18n.txt
+++ b/Documentation/i18n.adoc
diff --git a/Documentation/includes/cmd-config-section-all.txt b/Documentation/includes/cmd-config-section-all.adoc
index 296a239f2a..296a239f2a 100644
--- a/Documentation/includes/cmd-config-section-all.txt
+++ b/Documentation/includes/cmd-config-section-all.adoc
diff --git a/Documentation/includes/cmd-config-section-rest.txt b/Documentation/includes/cmd-config-section-rest.adoc
index b1e7682c1d..b1e7682c1d 100644
--- a/Documentation/includes/cmd-config-section-rest.txt
+++ b/Documentation/includes/cmd-config-section-rest.adoc
diff --git a/Documentation/install-webdoc.sh b/Documentation/install-webdoc.sh
index ed8b4ff3e5..b237b311c3 100755
--- a/Documentation/install-webdoc.sh
+++ b/Documentation/install-webdoc.sh
@@ -3,10 +3,10 @@
T="$1"
for h in \
- *.txt *.html \
- howto/*.txt howto/*.html \
- technical/*.txt technical/*.html \
- RelNotes/*.txt *.css
+ *.adoc *.html \
+ howto/*.adoc howto/*.html \
+ technical/*.adoc technical/*.html \
+ RelNotes/*.adoc *.css
do
if test ! -f "$h"
then
@@ -24,13 +24,13 @@ do
done
strip_leading=$(echo "$T/" | sed -e 's|.|.|g')
for th in \
- "$T"/*.html "$T"/*.txt \
- "$T"/howto/*.txt "$T"/howto/*.html \
- "$T"/technical/*.txt "$T"/technical/*.html
+ "$T"/*.html "$T"/*.adoc \
+ "$T"/howto/*.adoc "$T"/howto/*.html \
+ "$T"/technical/*.adoc "$T"/technical/*.html
do
h=$(expr "$th" : "$strip_leading"'\(.*\)')
case "$h" in
- RelNotes-*.txt | index.html) continue ;;
+ RelNotes-*.adoc | index.html) continue ;;
esac
test -f "$h" && continue
echo >&2 "# rm -f $th"
diff --git a/Documentation/line-range-format.txt b/Documentation/line-range-format.adoc
index 9b51e9fb66..9b51e9fb66 100644
--- a/Documentation/line-range-format.txt
+++ b/Documentation/line-range-format.adoc
diff --git a/Documentation/line-range-options.txt b/Documentation/line-range-options.adoc
index 8e295a62b8..f275df3b69 100644
--- a/Documentation/line-range-options.txt
+++ b/Documentation/line-range-options.adoc
@@ -12,4 +12,4 @@
(namely `--raw`, `--numstat`, `--shortstat`, `--dirstat`, `--summary`,
`--name-only`, `--name-status`, `--check`) are not currently implemented.
+
-include::line-range-format.txt[]
+include::line-range-format.adoc[]
diff --git a/Documentation/lint-gitlink.perl b/Documentation/lint-gitlink.perl
index 1c61dd9512..aea564dad7 100755
--- a/Documentation/lint-gitlink.perl
+++ b/Documentation/lint-gitlink.perl
@@ -5,7 +5,7 @@ use warnings;
# Parse arguments, a simple state machine for input like:
#
-# <file-to-check.txt> <valid-files-to-link-to> --section=1 git.txt git-add.txt [...] --to-lint git-add.txt a-file.txt [...]
+# <file-to-check.adoc> <valid-files-to-link-to> --section=1 git.adoc git-add.adoc [...] --to-lint git-add.adoc a-file.adoc [...]
my %TXT;
my %SECTION;
my $section;
@@ -17,7 +17,7 @@ for my $arg (@ARGV) {
next;
}
- my ($name) = $arg =~ /^(.*?)\.txt$/s;
+ my ($name) = $arg =~ /^(.*?)\.adoc$/s;
unless (defined $section) {
$TXT{$name} = $arg;
next;
diff --git a/Documentation/lint-manpages.sh b/Documentation/lint-manpages.sh
index 92cfc0a15a..a0ea572382 100755
--- a/Documentation/lint-manpages.sh
+++ b/Documentation/lint-manpages.sh
@@ -31,7 +31,7 @@ check_missing_docs () (
git-?*--?* ) continue ;;
esac
- if ! test -f "$v.txt"
+ if ! test -f "$v.adoc"
then
echo "no doc: $v"
ret=1
@@ -63,9 +63,9 @@ check_extraneous_docs () {
-e 's/[ ].*//' \
-e 's/^/listed /' ../command-list.txt
make print-man1 |
- grep '\.txt$' |
+ grep '\.adoc$' |
sed -e 's|^|documented |' \
- -e 's/\.txt//'
+ -e 's/\.adoc//'
) | (
all_commands="$(printf "%s " "$ALL_COMMANDS" "$BUILT_INS" "$EXCLUDED_PROGRAMS" | tr '\n' ' ')"
ret=0
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.adoc
index 3eaefc4e94..0022185201 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.adoc
@@ -102,7 +102,7 @@ endif::git-pull[]
With --no-log do not list one-line descriptions from the
actual commits being merged.
-include::signoff-option.txt[]
+include::signoff-option.adoc[]
--stat::
-n::
diff --git a/Documentation/merge-strategies.txt b/Documentation/merge-strategies.adoc
index 5fc54ec060..5fc54ec060 100644
--- a/Documentation/merge-strategies.txt
+++ b/Documentation/merge-strategies.adoc
diff --git a/Documentation/mergetools/vimdiff.txt b/Documentation/mergetools/vimdiff.adoc
index befa86d692..befa86d692 100644
--- a/Documentation/mergetools/vimdiff.txt
+++ b/Documentation/mergetools/vimdiff.adoc
diff --git a/Documentation/meson.build b/Documentation/meson.build
index 2a26fa8a5f..ead8e48213 100644
--- a/Documentation/meson.build
+++ b/Documentation/meson.build
@@ -1,207 +1,207 @@
manpages = {
# Category 1.
- 'git-add.txt' : 1,
- 'git-am.txt' : 1,
- 'git-annotate.txt' : 1,
- 'git-apply.txt' : 1,
- 'git-archimport.txt' : 1,
- 'git-archive.txt' : 1,
- 'git-bisect.txt' : 1,
- 'git-blame.txt' : 1,
- 'git-branch.txt' : 1,
- 'git-bugreport.txt' : 1,
- 'git-bundle.txt' : 1,
- 'git-cat-file.txt' : 1,
- 'git-check-attr.txt' : 1,
- 'git-check-ignore.txt' : 1,
- 'git-check-mailmap.txt' : 1,
- 'git-checkout-index.txt' : 1,
- 'git-checkout.txt' : 1,
- 'git-check-ref-format.txt' : 1,
- 'git-cherry-pick.txt' : 1,
- 'git-cherry.txt' : 1,
- 'git-citool.txt' : 1,
- 'git-clean.txt' : 1,
- 'git-clone.txt' : 1,
- 'git-column.txt' : 1,
- 'git-commit-graph.txt' : 1,
- 'git-commit-tree.txt' : 1,
- 'git-commit.txt' : 1,
- 'git-config.txt' : 1,
- 'git-count-objects.txt' : 1,
- 'git-credential-cache--daemon.txt' : 1,
- 'git-credential-cache.txt' : 1,
- 'git-credential-store.txt' : 1,
- 'git-credential.txt' : 1,
- 'git-cvsexportcommit.txt' : 1,
- 'git-cvsimport.txt' : 1,
- 'git-cvsserver.txt' : 1,
- 'git-daemon.txt' : 1,
- 'git-describe.txt' : 1,
- 'git-diagnose.txt' : 1,
- 'git-diff-files.txt' : 1,
- 'git-diff-index.txt' : 1,
- 'git-difftool.txt' : 1,
- 'git-diff-tree.txt' : 1,
- 'git-diff.txt' : 1,
- 'git-fast-export.txt' : 1,
- 'git-fast-import.txt' : 1,
- 'git-fetch-pack.txt' : 1,
- 'git-fetch.txt' : 1,
- 'git-filter-branch.txt' : 1,
- 'git-fmt-merge-msg.txt' : 1,
- 'git-for-each-ref.txt' : 1,
- 'git-for-each-repo.txt' : 1,
- 'git-format-patch.txt' : 1,
- 'git-fsck-objects.txt' : 1,
- 'git-fsck.txt' : 1,
- 'git-fsmonitor--daemon.txt' : 1,
- 'git-gc.txt' : 1,
- 'git-get-tar-commit-id.txt' : 1,
- 'git-grep.txt' : 1,
- 'git-gui.txt' : 1,
- 'git-hash-object.txt' : 1,
- 'git-help.txt' : 1,
- 'git-hook.txt' : 1,
- 'git-http-backend.txt' : 1,
- 'git-http-fetch.txt' : 1,
- 'git-http-push.txt' : 1,
- 'git-imap-send.txt' : 1,
- 'git-index-pack.txt' : 1,
- 'git-init-db.txt' : 1,
- 'git-init.txt' : 1,
- 'git-instaweb.txt' : 1,
- 'git-interpret-trailers.txt' : 1,
- 'git-log.txt' : 1,
- 'git-ls-files.txt' : 1,
- 'git-ls-remote.txt' : 1,
- 'git-ls-tree.txt' : 1,
- 'git-mailinfo.txt' : 1,
- 'git-mailsplit.txt' : 1,
- 'git-maintenance.txt' : 1,
- 'git-merge-base.txt' : 1,
- 'git-merge-file.txt' : 1,
- 'git-merge-index.txt' : 1,
- 'git-merge-one-file.txt' : 1,
- 'git-mergetool--lib.txt' : 1,
- 'git-mergetool.txt' : 1,
- 'git-merge-tree.txt' : 1,
- 'git-merge.txt' : 1,
- 'git-mktag.txt' : 1,
- 'git-mktree.txt' : 1,
- 'git-multi-pack-index.txt' : 1,
- 'git-mv.txt' : 1,
- 'git-name-rev.txt' : 1,
- 'git-notes.txt' : 1,
- 'git-p4.txt' : 1,
- 'git-pack-objects.txt' : 1,
- 'git-pack-redundant.txt' : 1,
- 'git-pack-refs.txt' : 1,
- 'git-patch-id.txt' : 1,
- 'git-prune-packed.txt' : 1,
- 'git-prune.txt' : 1,
- 'git-pull.txt' : 1,
- 'git-push.txt' : 1,
- 'git-quiltimport.txt' : 1,
- 'git-range-diff.txt' : 1,
- 'git-read-tree.txt' : 1,
- 'git-rebase.txt' : 1,
- 'git-receive-pack.txt' : 1,
- 'git-reflog.txt' : 1,
- 'git-refs.txt' : 1,
- 'git-remote-ext.txt' : 1,
- 'git-remote-fd.txt' : 1,
- 'git-remote.txt' : 1,
- 'git-repack.txt' : 1,
- 'git-replace.txt' : 1,
- 'git-replay.txt' : 1,
- 'git-request-pull.txt' : 1,
- 'git-rerere.txt' : 1,
- 'git-reset.txt' : 1,
- 'git-restore.txt' : 1,
- 'git-revert.txt' : 1,
- 'git-rev-list.txt' : 1,
- 'git-rev-parse.txt' : 1,
- 'git-rm.txt' : 1,
- 'git-send-email.txt' : 1,
- 'git-send-pack.txt' : 1,
- 'git-shell.txt' : 1,
- 'git-sh-i18n--envsubst.txt' : 1,
- 'git-sh-i18n.txt' : 1,
- 'git-shortlog.txt' : 1,
- 'git-show-branch.txt' : 1,
- 'git-show-index.txt' : 1,
- 'git-show-ref.txt' : 1,
- 'git-show.txt' : 1,
- 'git-sh-setup.txt' : 1,
- 'git-sparse-checkout.txt' : 1,
- 'git-stage.txt' : 1,
- 'git-stash.txt' : 1,
- 'git-status.txt' : 1,
- 'git-stripspace.txt' : 1,
- 'git-submodule.txt' : 1,
- 'git-svn.txt' : 1,
- 'git-switch.txt' : 1,
- 'git-symbolic-ref.txt' : 1,
- 'git-tag.txt' : 1,
- 'git-unpack-file.txt' : 1,
- 'git-unpack-objects.txt' : 1,
- 'git-update-index.txt' : 1,
- 'git-update-ref.txt' : 1,
- 'git-update-server-info.txt' : 1,
- 'git-upload-archive.txt' : 1,
- 'git-upload-pack.txt' : 1,
- 'git-var.txt' : 1,
- 'git-verify-commit.txt' : 1,
- 'git-verify-pack.txt' : 1,
- 'git-verify-tag.txt' : 1,
- 'git-version.txt' : 1,
- 'git-web--browse.txt' : 1,
- 'git-whatchanged.txt' : 1,
- 'git-worktree.txt' : 1,
- 'git-write-tree.txt' : 1,
- 'git.txt' : 1,
- 'gitk.txt' : 1,
- 'gitweb.txt' : 1,
- 'scalar.txt' : 1,
+ 'git-add.adoc' : 1,
+ 'git-am.adoc' : 1,
+ 'git-annotate.adoc' : 1,
+ 'git-apply.adoc' : 1,
+ 'git-archimport.adoc' : 1,
+ 'git-archive.adoc' : 1,
+ 'git-bisect.adoc' : 1,
+ 'git-blame.adoc' : 1,
+ 'git-branch.adoc' : 1,
+ 'git-bugreport.adoc' : 1,
+ 'git-bundle.adoc' : 1,
+ 'git-cat-file.adoc' : 1,
+ 'git-check-attr.adoc' : 1,
+ 'git-check-ignore.adoc' : 1,
+ 'git-check-mailmap.adoc' : 1,
+ 'git-checkout-index.adoc' : 1,
+ 'git-checkout.adoc' : 1,
+ 'git-check-ref-format.adoc' : 1,
+ 'git-cherry-pick.adoc' : 1,
+ 'git-cherry.adoc' : 1,
+ 'git-citool.adoc' : 1,
+ 'git-clean.adoc' : 1,
+ 'git-clone.adoc' : 1,
+ 'git-column.adoc' : 1,
+ 'git-commit-graph.adoc' : 1,
+ 'git-commit-tree.adoc' : 1,
+ 'git-commit.adoc' : 1,
+ 'git-config.adoc' : 1,
+ 'git-count-objects.adoc' : 1,
+ 'git-credential-cache--daemon.adoc' : 1,
+ 'git-credential-cache.adoc' : 1,
+ 'git-credential-store.adoc' : 1,
+ 'git-credential.adoc' : 1,
+ 'git-cvsexportcommit.adoc' : 1,
+ 'git-cvsimport.adoc' : 1,
+ 'git-cvsserver.adoc' : 1,
+ 'git-daemon.adoc' : 1,
+ 'git-describe.adoc' : 1,
+ 'git-diagnose.adoc' : 1,
+ 'git-diff-files.adoc' : 1,
+ 'git-diff-index.adoc' : 1,
+ 'git-difftool.adoc' : 1,
+ 'git-diff-tree.adoc' : 1,
+ 'git-diff.adoc' : 1,
+ 'git-fast-export.adoc' : 1,
+ 'git-fast-import.adoc' : 1,
+ 'git-fetch-pack.adoc' : 1,
+ 'git-fetch.adoc' : 1,
+ 'git-filter-branch.adoc' : 1,
+ 'git-fmt-merge-msg.adoc' : 1,
+ 'git-for-each-ref.adoc' : 1,
+ 'git-for-each-repo.adoc' : 1,
+ 'git-format-patch.adoc' : 1,
+ 'git-fsck-objects.adoc' : 1,
+ 'git-fsck.adoc' : 1,
+ 'git-fsmonitor--daemon.adoc' : 1,
+ 'git-gc.adoc' : 1,
+ 'git-get-tar-commit-id.adoc' : 1,
+ 'git-grep.adoc' : 1,
+ 'git-gui.adoc' : 1,
+ 'git-hash-object.adoc' : 1,
+ 'git-help.adoc' : 1,
+ 'git-hook.adoc' : 1,
+ 'git-http-backend.adoc' : 1,
+ 'git-http-fetch.adoc' : 1,
+ 'git-http-push.adoc' : 1,
+ 'git-imap-send.adoc' : 1,
+ 'git-index-pack.adoc' : 1,
+ 'git-init-db.adoc' : 1,
+ 'git-init.adoc' : 1,
+ 'git-instaweb.adoc' : 1,
+ 'git-interpret-trailers.adoc' : 1,
+ 'git-log.adoc' : 1,
+ 'git-ls-files.adoc' : 1,
+ 'git-ls-remote.adoc' : 1,
+ 'git-ls-tree.adoc' : 1,
+ 'git-mailinfo.adoc' : 1,
+ 'git-mailsplit.adoc' : 1,
+ 'git-maintenance.adoc' : 1,
+ 'git-merge-base.adoc' : 1,
+ 'git-merge-file.adoc' : 1,
+ 'git-merge-index.adoc' : 1,
+ 'git-merge-one-file.adoc' : 1,
+ 'git-mergetool--lib.adoc' : 1,
+ 'git-mergetool.adoc' : 1,
+ 'git-merge-tree.adoc' : 1,
+ 'git-merge.adoc' : 1,
+ 'git-mktag.adoc' : 1,
+ 'git-mktree.adoc' : 1,
+ 'git-multi-pack-index.adoc' : 1,
+ 'git-mv.adoc' : 1,
+ 'git-name-rev.adoc' : 1,
+ 'git-notes.adoc' : 1,
+ 'git-p4.adoc' : 1,
+ 'git-pack-objects.adoc' : 1,
+ 'git-pack-redundant.adoc' : 1,
+ 'git-pack-refs.adoc' : 1,
+ 'git-patch-id.adoc' : 1,
+ 'git-prune-packed.adoc' : 1,
+ 'git-prune.adoc' : 1,
+ 'git-pull.adoc' : 1,
+ 'git-push.adoc' : 1,
+ 'git-quiltimport.adoc' : 1,
+ 'git-range-diff.adoc' : 1,
+ 'git-read-tree.adoc' : 1,
+ 'git-rebase.adoc' : 1,
+ 'git-receive-pack.adoc' : 1,
+ 'git-reflog.adoc' : 1,
+ 'git-refs.adoc' : 1,
+ 'git-remote-ext.adoc' : 1,
+ 'git-remote-fd.adoc' : 1,
+ 'git-remote.adoc' : 1,
+ 'git-repack.adoc' : 1,
+ 'git-replace.adoc' : 1,
+ 'git-replay.adoc' : 1,
+ 'git-request-pull.adoc' : 1,
+ 'git-rerere.adoc' : 1,
+ 'git-reset.adoc' : 1,
+ 'git-restore.adoc' : 1,
+ 'git-revert.adoc' : 1,
+ 'git-rev-list.adoc' : 1,
+ 'git-rev-parse.adoc' : 1,
+ 'git-rm.adoc' : 1,
+ 'git-send-email.adoc' : 1,
+ 'git-send-pack.adoc' : 1,
+ 'git-shell.adoc' : 1,
+ 'git-sh-i18n--envsubst.adoc' : 1,
+ 'git-sh-i18n.adoc' : 1,
+ 'git-shortlog.adoc' : 1,
+ 'git-show-branch.adoc' : 1,
+ 'git-show-index.adoc' : 1,
+ 'git-show-ref.adoc' : 1,
+ 'git-show.adoc' : 1,
+ 'git-sh-setup.adoc' : 1,
+ 'git-sparse-checkout.adoc' : 1,
+ 'git-stage.adoc' : 1,
+ 'git-stash.adoc' : 1,
+ 'git-status.adoc' : 1,
+ 'git-stripspace.adoc' : 1,
+ 'git-submodule.adoc' : 1,
+ 'git-svn.adoc' : 1,
+ 'git-switch.adoc' : 1,
+ 'git-symbolic-ref.adoc' : 1,
+ 'git-tag.adoc' : 1,
+ 'git-unpack-file.adoc' : 1,
+ 'git-unpack-objects.adoc' : 1,
+ 'git-update-index.adoc' : 1,
+ 'git-update-ref.adoc' : 1,
+ 'git-update-server-info.adoc' : 1,
+ 'git-upload-archive.adoc' : 1,
+ 'git-upload-pack.adoc' : 1,
+ 'git-var.adoc' : 1,
+ 'git-verify-commit.adoc' : 1,
+ 'git-verify-pack.adoc' : 1,
+ 'git-verify-tag.adoc' : 1,
+ 'git-version.adoc' : 1,
+ 'git-web--browse.adoc' : 1,
+ 'git-whatchanged.adoc' : 1,
+ 'git-worktree.adoc' : 1,
+ 'git-write-tree.adoc' : 1,
+ 'git.adoc' : 1,
+ 'gitk.adoc' : 1,
+ 'gitweb.adoc' : 1,
+ 'scalar.adoc' : 1,
# Category 5.
- 'gitattributes.txt' : 5,
- 'gitformat-bundle.txt' : 5,
- 'gitformat-chunk.txt' : 5,
- 'gitformat-commit-graph.txt' : 5,
- 'gitformat-index.txt' : 5,
- 'gitformat-pack.txt' : 5,
- 'gitformat-signature.txt' : 5,
- 'githooks.txt' : 5,
- 'gitignore.txt' : 5,
- 'gitmailmap.txt' : 5,
- 'gitmodules.txt' : 5,
- 'gitprotocol-capabilities.txt' : 5,
- 'gitprotocol-common.txt' : 5,
- 'gitprotocol-http.txt' : 5,
- 'gitprotocol-pack.txt' : 5,
- 'gitprotocol-v2.txt' : 5,
- 'gitrepository-layout.txt' : 5,
- 'gitweb.conf.txt' : 5,
+ 'gitattributes.adoc' : 5,
+ 'gitformat-bundle.adoc' : 5,
+ 'gitformat-chunk.adoc' : 5,
+ 'gitformat-commit-graph.adoc' : 5,
+ 'gitformat-index.adoc' : 5,
+ 'gitformat-pack.adoc' : 5,
+ 'gitformat-signature.adoc' : 5,
+ 'githooks.adoc' : 5,
+ 'gitignore.adoc' : 5,
+ 'gitmailmap.adoc' : 5,
+ 'gitmodules.adoc' : 5,
+ 'gitprotocol-capabilities.adoc' : 5,
+ 'gitprotocol-common.adoc' : 5,
+ 'gitprotocol-http.adoc' : 5,
+ 'gitprotocol-pack.adoc' : 5,
+ 'gitprotocol-v2.adoc' : 5,
+ 'gitrepository-layout.adoc' : 5,
+ 'gitweb.conf.adoc' : 5,
# Category 7.
- 'gitcli.txt' : 7,
- 'gitcore-tutorial.txt' : 7,
- 'gitcredentials.txt' : 7,
- 'gitcvs-migration.txt' : 7,
- 'gitdiffcore.txt' : 7,
- 'giteveryday.txt' : 7,
- 'gitfaq.txt' : 7,
- 'gitglossary.txt' : 7,
- 'gitpacking.txt' : 7,
- 'gitnamespaces.txt' : 7,
- 'gitremote-helpers.txt' : 7,
- 'gitrevisions.txt' : 7,
- 'gitsubmodules.txt' : 7,
- 'gittutorial-2.txt' : 7,
- 'gittutorial.txt' : 7,
- 'gitworkflows.txt' : 7,
+ 'gitcli.adoc' : 7,
+ 'gitcore-tutorial.adoc' : 7,
+ 'gitcredentials.adoc' : 7,
+ 'gitcvs-migration.adoc' : 7,
+ 'gitdiffcore.adoc' : 7,
+ 'giteveryday.adoc' : 7,
+ 'gitfaq.adoc' : 7,
+ 'gitglossary.adoc' : 7,
+ 'gitpacking.adoc' : 7,
+ 'gitnamespaces.adoc' : 7,
+ 'gitremote-helpers.adoc' : 7,
+ 'gitrevisions.adoc' : 7,
+ 'gitsubmodules.adoc' : 7,
+ 'gittutorial-2.adoc' : 7,
+ 'gittutorial.adoc' : 7,
+ 'gitworkflows.adoc' : 7,
}
docs_backend = get_option('docs_backend')
@@ -287,18 +287,18 @@ git = find_program('git', required: false)
xmlto = find_program('xmlto')
cmd_lists = [
- 'cmds-ancillaryinterrogators.txt',
- 'cmds-ancillarymanipulators.txt',
- 'cmds-mainporcelain.txt',
- 'cmds-plumbinginterrogators.txt',
- 'cmds-plumbingmanipulators.txt',
- 'cmds-synchingrepositories.txt',
- 'cmds-synchelpers.txt',
- 'cmds-guide.txt',
- 'cmds-developerinterfaces.txt',
- 'cmds-userinterfaces.txt',
- 'cmds-purehelpers.txt',
- 'cmds-foreignscminterface.txt',
+ 'cmds-ancillaryinterrogators.adoc',
+ 'cmds-ancillarymanipulators.adoc',
+ 'cmds-mainporcelain.adoc',
+ 'cmds-plumbinginterrogators.adoc',
+ 'cmds-plumbingmanipulators.adoc',
+ 'cmds-synchingrepositories.adoc',
+ 'cmds-synchelpers.adoc',
+ 'cmds-guide.adoc',
+ 'cmds-developerinterfaces.adoc',
+ 'cmds-userinterfaces.adoc',
+ 'cmds-purehelpers.adoc',
+ 'cmds-foreignscminterface.adoc',
]
documentation_deps += custom_target(
@@ -325,7 +325,7 @@ foreach mode : [ 'diff', 'merge' ]
'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools',
],
input: 'generate-mergetool-list.sh',
- output: 'mergetools-' + mode + '.txt',
+ output: 'mergetools-' + mode + '.adoc',
)
endforeach
@@ -414,7 +414,7 @@ if get_option('docs').contains('html')
'--out-file=@OUTPUT@',
'@INPUT@',
],
- input: 'user-manual.txt',
+ input: 'user-manual.adoc',
output: 'user-manual.xml',
depends: documentation_deps,
)
@@ -436,14 +436,14 @@ if get_option('docs').contains('html')
)
articles = [
- 'DecisionMaking.txt',
- 'MyFirstContribution.txt',
- 'MyFirstObjectWalk.txt',
- 'ReviewingGuidelines.txt',
+ 'DecisionMaking.adoc',
+ 'MyFirstContribution.adoc',
+ 'MyFirstObjectWalk.adoc',
+ 'ReviewingGuidelines.adoc',
'SubmittingPatches',
- 'ToolsForGit.txt',
- 'git-bisect-lk2009.txt',
- 'git-tools.txt',
+ 'ToolsForGit.adoc',
+ 'git-bisect-lk2009.adoc',
+ 'git-tools.adoc',
]
foreach article : articles
@@ -475,8 +475,8 @@ endif
# Sanity check that we are not missing any tests present in 't/'. This check
# only runs once at configure time and is thus best-effort, only. Furthermore,
# it only verifies man pages for the sake of simplicity.
-configured_manpages = manpages.keys() + [ 'git-bisect-lk2009.txt', 'git-tools.txt' ]
-actual_manpages = run_command(shell, '-c', 'ls git*.txt scalar.txt',
+configured_manpages = manpages.keys() + [ 'git-bisect-lk2009.adoc', 'git-tools.adoc' ]
+actual_manpages = run_command(shell, '-c', 'ls git*.adoc scalar.adoc',
check: true,
env: script_environment,
).stdout().strip().split('\n')
diff --git a/Documentation/object-format-disclaimer.txt b/Documentation/object-format-disclaimer.adoc
index e561e6668c..e561e6668c 100644
--- a/Documentation/object-format-disclaimer.txt
+++ b/Documentation/object-format-disclaimer.adoc
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.adoc
index 8ee940b6a4..8ee940b6a4 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.adoc
diff --git a/Documentation/pretty-options.txt b/Documentation/pretty-options.adoc
index 23888cd612..23888cd612 100644
--- a/Documentation/pretty-options.txt
+++ b/Documentation/pretty-options.adoc
diff --git a/Documentation/pull-fetch-param.txt b/Documentation/pull-fetch-param.adoc
index d79d2f6065..d79d2f6065 100644
--- a/Documentation/pull-fetch-param.txt
+++ b/Documentation/pull-fetch-param.adoc
diff --git a/Documentation/ref-reachability-filters.txt b/Documentation/ref-reachability-filters.adoc
index 9bae46d84c..9bae46d84c 100644
--- a/Documentation/ref-reachability-filters.txt
+++ b/Documentation/ref-reachability-filters.adoc
diff --git a/Documentation/ref-storage-format.txt b/Documentation/ref-storage-format.adoc
index 14fff8a9c6..14fff8a9c6 100644
--- a/Documentation/ref-storage-format.txt
+++ b/Documentation/ref-storage-format.adoc
diff --git a/Documentation/rerere-options.txt b/Documentation/rerere-options.adoc
index c3321ddea2..c3321ddea2 100644
--- a/Documentation/rerere-options.txt
+++ b/Documentation/rerere-options.adoc
diff --git a/Documentation/rev-list-description.txt b/Documentation/rev-list-description.adoc
index a9efa7fa27..a9efa7fa27 100644
--- a/Documentation/rev-list-description.txt
+++ b/Documentation/rev-list-description.adoc
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.adoc
index 459e5a02f5..196b2781cc 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.adoc
@@ -1059,7 +1059,7 @@ more specialized family of commit log tools: linkgit:git-log[1],
linkgit:git-show[1], and linkgit:git-whatchanged[1]
endif::git-rev-list[]
-include::pretty-options.txt[]
+include::pretty-options.adoc[]
--relative-date::
Synonym for `--date=relative`.
diff --git a/Documentation/revisions.txt b/Documentation/revisions.adoc
index 6ea6c7cead..6ea6c7cead 100644
--- a/Documentation/revisions.txt
+++ b/Documentation/revisions.adoc
diff --git a/Documentation/scalar.txt b/Documentation/scalar.adoc
index 7e4259c674..7e4259c674 100644
--- a/Documentation/scalar.txt
+++ b/Documentation/scalar.adoc
diff --git a/Documentation/sequencer.txt b/Documentation/sequencer.adoc
index 3bceb56474..3bceb56474 100644
--- a/Documentation/sequencer.txt
+++ b/Documentation/sequencer.adoc
diff --git a/Documentation/signoff-option.txt b/Documentation/signoff-option.adoc
index cddfb225d1..cddfb225d1 100644
--- a/Documentation/signoff-option.txt
+++ b/Documentation/signoff-option.adoc
diff --git a/Documentation/technical/.gitignore b/Documentation/technical/.gitignore
index 8aa891daee..3caef14a93 100644
--- a/Documentation/technical/.gitignore
+++ b/Documentation/technical/.gitignore
@@ -1 +1,2 @@
api-index.txt
+api-index.adoc
diff --git a/Documentation/technical/api-error-handling.txt b/Documentation/technical/api-error-handling.adoc
index 665c4960b4..665c4960b4 100644
--- a/Documentation/technical/api-error-handling.txt
+++ b/Documentation/technical/api-error-handling.adoc
diff --git a/Documentation/technical/api-index-skel.txt b/Documentation/technical/api-index-skel.adoc
index 7780a76b08..7780a76b08 100644
--- a/Documentation/technical/api-index-skel.txt
+++ b/Documentation/technical/api-index-skel.adoc
diff --git a/Documentation/technical/api-index.sh b/Documentation/technical/api-index.sh
index 2964885574..dd206b1ca4 100755
--- a/Documentation/technical/api-index.sh
+++ b/Documentation/technical/api-index.sh
@@ -13,18 +13,18 @@ OUTPUT="$2"
cd "$SOURCE_DIR"
c=////////////////////////////////////////////////////////////////
- skel=api-index-skel.txt
+ skel=api-index-skel.adoc
sed -e '/^\/\/ table of contents begin/q' "$skel"
echo "$c"
- ls api-*.txt |
+ ls api-*.adoc |
while read filename
do
case "$filename" in
- api-index-skel.txt | api-index.txt) continue ;;
+ api-index-skel.adoc | api-index.adoc) continue ;;
esac
title=$(sed -e 1q "$filename")
- html=${filename%.txt}.html
+ html=${filename%.adoc}.html
echo "* link:$html[$title]"
done
echo "$c"
diff --git a/Documentation/technical/api-merge.txt b/Documentation/technical/api-merge.adoc
index c2ba01828c..c2ba01828c 100644
--- a/Documentation/technical/api-merge.txt
+++ b/Documentation/technical/api-merge.adoc
diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.adoc
index 61fa6ee167..61fa6ee167 100644
--- a/Documentation/technical/api-parse-options.txt
+++ b/Documentation/technical/api-parse-options.adoc
diff --git a/Documentation/technical/api-path-walk.txt b/Documentation/technical/api-path-walk.adoc
index 7075d0d5ab..7075d0d5ab 100644
--- a/Documentation/technical/api-path-walk.txt
+++ b/Documentation/technical/api-path-walk.adoc
diff --git a/Documentation/technical/api-simple-ipc.txt b/Documentation/technical/api-simple-ipc.adoc
index c4fb152b23..c4fb152b23 100644
--- a/Documentation/technical/api-simple-ipc.txt
+++ b/Documentation/technical/api-simple-ipc.adoc
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.adoc
index 5817b18310..cf493dae03 100644
--- a/Documentation/technical/api-trace2.txt
+++ b/Documentation/technical/api-trace2.adoc
@@ -140,7 +140,7 @@ $ cat ~/log.event
To enable a target, set the corresponding environment variable or
system or global config value to one of the following:
-include::../trace2-target-values.txt[]
+include::../trace2-target-values.adoc[]
When trace files are written to a target directory, they will be named according
to the last component of the SID (optionally followed by a counter to avoid
diff --git a/Documentation/technical/bitmap-format.txt b/Documentation/technical/bitmap-format.adoc
index bfb0ec7beb..bfb0ec7beb 100644
--- a/Documentation/technical/bitmap-format.txt
+++ b/Documentation/technical/bitmap-format.adoc
diff --git a/Documentation/technical/build-systems.txt b/Documentation/technical/build-systems.adoc
index d9dafb407c..d9dafb407c 100644
--- a/Documentation/technical/build-systems.txt
+++ b/Documentation/technical/build-systems.adoc
diff --git a/Documentation/technical/bundle-uri.txt b/Documentation/technical/bundle-uri.adoc
index 91d3a13e32..91d3a13e32 100644
--- a/Documentation/technical/bundle-uri.txt
+++ b/Documentation/technical/bundle-uri.adoc
diff --git a/Documentation/technical/commit-graph.txt b/Documentation/technical/commit-graph.adoc
index 2c26e95e51..2c26e95e51 100644
--- a/Documentation/technical/commit-graph.txt
+++ b/Documentation/technical/commit-graph.adoc
diff --git a/Documentation/technical/directory-rename-detection.txt b/Documentation/technical/directory-rename-detection.adoc
index 029ee2cedc..029ee2cedc 100644
--- a/Documentation/technical/directory-rename-detection.txt
+++ b/Documentation/technical/directory-rename-detection.adoc
diff --git a/Documentation/technical/hash-function-transition.txt b/Documentation/technical/hash-function-transition.adoc
index 7102c7c8f5..7102c7c8f5 100644
--- a/Documentation/technical/hash-function-transition.txt
+++ b/Documentation/technical/hash-function-transition.adoc
diff --git a/Documentation/technical/long-running-process-protocol.txt b/Documentation/technical/long-running-process-protocol.adoc
index 6f33654b42..6f33654b42 100644
--- a/Documentation/technical/long-running-process-protocol.txt
+++ b/Documentation/technical/long-running-process-protocol.adoc
diff --git a/Documentation/technical/multi-pack-index.txt b/Documentation/technical/multi-pack-index.adoc
index cc063b30be..cc063b30be 100644
--- a/Documentation/technical/multi-pack-index.txt
+++ b/Documentation/technical/multi-pack-index.adoc
diff --git a/Documentation/technical/pack-heuristics.txt b/Documentation/technical/pack-heuristics.adoc
index 95a07db6e8..95a07db6e8 100644
--- a/Documentation/technical/pack-heuristics.txt
+++ b/Documentation/technical/pack-heuristics.adoc
diff --git a/Documentation/technical/packfile-uri.txt b/Documentation/technical/packfile-uri.adoc
index 9d453d4765..9d453d4765 100644
--- a/Documentation/technical/packfile-uri.txt
+++ b/Documentation/technical/packfile-uri.adoc
diff --git a/Documentation/technical/parallel-checkout.txt b/Documentation/technical/parallel-checkout.adoc
index b4a144e5f4..b4a144e5f4 100644
--- a/Documentation/technical/parallel-checkout.txt
+++ b/Documentation/technical/parallel-checkout.adoc
diff --git a/Documentation/technical/partial-clone.txt b/Documentation/technical/partial-clone.adoc
index bf5ec5c82d..bf5ec5c82d 100644
--- a/Documentation/technical/partial-clone.txt
+++ b/Documentation/technical/partial-clone.adoc
diff --git a/Documentation/technical/platform-support.txt b/Documentation/technical/platform-support.adoc
index 0a2fb28d62..0a2fb28d62 100644
--- a/Documentation/technical/platform-support.txt
+++ b/Documentation/technical/platform-support.adoc
diff --git a/Documentation/technical/racy-git.txt b/Documentation/technical/racy-git.adoc
index 59bea66c0f..59bea66c0f 100644
--- a/Documentation/technical/racy-git.txt
+++ b/Documentation/technical/racy-git.adoc
diff --git a/Documentation/technical/reftable.txt b/Documentation/technical/reftable.adoc
index dd0b37c4e3..dd0b37c4e3 100644
--- a/Documentation/technical/reftable.txt
+++ b/Documentation/technical/reftable.adoc
diff --git a/Documentation/technical/remembering-renames.txt b/Documentation/technical/remembering-renames.adoc
index 73f41761e2..73f41761e2 100644
--- a/Documentation/technical/remembering-renames.txt
+++ b/Documentation/technical/remembering-renames.adoc
diff --git a/Documentation/technical/repository-version.txt b/Documentation/technical/repository-version.adoc
index b9bb81a81f..b9bb81a81f 100644
--- a/Documentation/technical/repository-version.txt
+++ b/Documentation/technical/repository-version.adoc
diff --git a/Documentation/technical/rerere.txt b/Documentation/technical/rerere.adoc
index 580f23360a..580f23360a 100644
--- a/Documentation/technical/rerere.txt
+++ b/Documentation/technical/rerere.adoc
diff --git a/Documentation/technical/scalar.txt b/Documentation/technical/scalar.adoc
index 921cb104c3..921cb104c3 100644
--- a/Documentation/technical/scalar.txt
+++ b/Documentation/technical/scalar.adoc
diff --git a/Documentation/technical/send-pack-pipeline.txt b/Documentation/technical/send-pack-pipeline.adoc
index 9b5a0bc186..9b5a0bc186 100644
--- a/Documentation/technical/send-pack-pipeline.txt
+++ b/Documentation/technical/send-pack-pipeline.adoc
diff --git a/Documentation/technical/shallow.txt b/Documentation/technical/shallow.adoc
index f3738baa0f..f3738baa0f 100644
--- a/Documentation/technical/shallow.txt
+++ b/Documentation/technical/shallow.adoc
diff --git a/Documentation/technical/sparse-checkout.txt b/Documentation/technical/sparse-checkout.adoc
index d968659354..d968659354 100644
--- a/Documentation/technical/sparse-checkout.txt
+++ b/Documentation/technical/sparse-checkout.adoc
diff --git a/Documentation/technical/sparse-index.txt b/Documentation/technical/sparse-index.adoc
index 3b24c1a219..3b24c1a219 100644
--- a/Documentation/technical/sparse-index.txt
+++ b/Documentation/technical/sparse-index.adoc
diff --git a/Documentation/technical/trivial-merge.txt b/Documentation/technical/trivial-merge.adoc
index 1f1c33d0da..1f1c33d0da 100644
--- a/Documentation/technical/trivial-merge.txt
+++ b/Documentation/technical/trivial-merge.adoc
diff --git a/Documentation/technical/unit-tests.txt b/Documentation/technical/unit-tests.adoc
index 5a432b7b29..5a432b7b29 100644
--- a/Documentation/technical/unit-tests.txt
+++ b/Documentation/technical/unit-tests.adoc
diff --git a/Documentation/trace2-target-values.txt b/Documentation/trace2-target-values.adoc
index 06f1953313..06f1953313 100644
--- a/Documentation/trace2-target-values.txt
+++ b/Documentation/trace2-target-values.adoc
diff --git a/Documentation/transfer-data-leaks.txt b/Documentation/transfer-data-leaks.adoc
index 914bacc39e..914bacc39e 100644
--- a/Documentation/transfer-data-leaks.txt
+++ b/Documentation/transfer-data-leaks.adoc
diff --git a/Documentation/urls-remotes.txt b/Documentation/urls-remotes.adoc
index bf17012241..9b10151198 100644
--- a/Documentation/urls-remotes.txt
+++ b/Documentation/urls-remotes.adoc
@@ -1,4 +1,4 @@
-include::urls.txt[]
+include::urls.adoc[]
REMOTES[[REMOTES]]
------------------
diff --git a/Documentation/urls.txt b/Documentation/urls.adoc
index 9c871e716a..9c871e716a 100644
--- a/Documentation/urls.txt
+++ b/Documentation/urls.adoc
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.adoc
index 90a4189358..d2b478ad23 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.adoc
@@ -4354,7 +4354,7 @@ itself!
[[git-explained]]
=== Git explained
-include::glossary-content.txt[]
+include::glossary-content.adoc[]
[[git-quick-start]]
[appendix]
diff --git a/GIT-BUILD-OPTIONS.in b/GIT-BUILD-OPTIONS.in
index edff75ae16..ada575fbcb 100644
--- a/GIT-BUILD-OPTIONS.in
+++ b/GIT-BUILD-OPTIONS.in
@@ -45,4 +45,5 @@ TEST_OUTPUT_DIRECTORY=@TEST_OUTPUT_DIRECTORY@
TEST_SHELL_PATH=@TEST_SHELL_PATH@
USE_GETTEXT_SCHEME=@USE_GETTEXT_SCHEME@
USE_LIBPCRE2=@USE_LIBPCRE2@
+WITH_BREAKING_CHANGES=@WITH_BREAKING_CHANGES@
X=@X@
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 3704a1c39e..56b45333c1 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -5,21 +5,29 @@ DEF_VER=v2.48.GIT
LF='
'
-if test "$#" -ne 3
+if test "$#" -lt 2 || test "$#" -gt 3
then
- echo >&2 "USAGE: $0 <SOURCE_DIR> <INPUT> <OUTPUT>"
+ echo >&2 "USAGE: $0 <SOURCE_DIR> (--format=<STRING>|<INPUT>) [<OUTPUT>]"
exit 1
fi
SOURCE_DIR="$1"
-INPUT="$2"
-OUTPUT="$3"
-if ! test -f "$INPUT"
-then
- echo >&2 "Input is not a file: $INPUT"
- exit 1
-fi
+case "$2" in
+--format=*)
+ INPUT="${2#--format=}"
+ ;;
+*)
+ if ! test -f "$2"
+ then
+ echo >&2 "Input is not a file: $2"
+ exit 1
+ fi
+ INPUT=$(cat "$2")
+ ;;
+esac
+
+OUTPUT="$3"
# Protect us from reading Git version information outside of the Git directory
# in case it is not a repository itself, but embedded in an unrelated
@@ -39,13 +47,9 @@ then
test -d "${GIT_DIR:-.git}" ||
test -f "$SOURCE_DIR"/.git;
} &&
- VN=$(git -C "$SOURCE_DIR" describe --match "v[0-9]*" HEAD 2>/dev/null) &&
+ VN=$(git -C "$SOURCE_DIR" describe --dirty --match="v[0-9]*" 2>/dev/null) &&
case "$VN" in
*$LF*) (exit 1) ;;
- v[0-9]*)
- git -C "$SOURCE_DIR" update-index -q --refresh
- test -z "$(git -C "$SOURCE_DIR" diff-index --name-only HEAD --)" ||
- VN="$VN-dirty" ;;
esac
then
VN=$(echo "$VN" | sed -e 's/-/./g');
@@ -78,19 +82,25 @@ read GIT_MAJOR_VERSION GIT_MINOR_VERSION GIT_MICRO_VERSION GIT_PATCH_LEVEL trail
$(echo "$GIT_VERSION" 0 0 0 0 | tr '.a-zA-Z-' ' ')
EOF
-sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
+REPLACED=$(printf "%s" "$INPUT" | sed -e "s|@GIT_VERSION@|$GIT_VERSION|" \
-e "s|@GIT_MAJOR_VERSION@|$GIT_MAJOR_VERSION|" \
-e "s|@GIT_MINOR_VERSION@|$GIT_MINOR_VERSION|" \
-e "s|@GIT_MICRO_VERSION@|$GIT_MICRO_VERSION|" \
-e "s|@GIT_PATCH_LEVEL@|$GIT_PATCH_LEVEL|" \
-e "s|@GIT_BUILT_FROM_COMMIT@|$GIT_BUILT_FROM_COMMIT|" \
-e "s|@GIT_USER_AGENT@|$GIT_USER_AGENT|" \
- -e "s|@GIT_DATE@|$GIT_DATE|" \
- "$INPUT" >"$OUTPUT".$$+
+ -e "s|@GIT_DATE@|$GIT_DATE|"
+)
-if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null
+if test -z "$OUTPUT"
then
- mv "$OUTPUT".$$+ "$OUTPUT"
+ printf "%s\n" "$REPLACED"
else
- rm "$OUTPUT".$$+
+ printf "%s\n" "$REPLACED" >"$OUTPUT".$$+
+ if ! test -f "$OUTPUT" || ! cmp "$OUTPUT".$$+ "$OUTPUT" >/dev/null
+ then
+ mv "$OUTPUT".$$+ "$OUTPUT"
+ else
+ rm "$OUTPUT".$$+
+ fi
fi
diff --git a/Makefile b/Makefile
index 2f6e2d5295..cd0806e1e6 100644
--- a/Makefile
+++ b/Makefile
@@ -183,7 +183,8 @@ include shared.mak
# byte-order mark (BOM) when writing UTF-16 or UTF-32 and always writes in
# big-endian format.
#
-# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound.
+# Define NO_DEFLATE_BOUND if your zlib does not have deflateBound. Define
+# ZLIB_NG if you want to use zlib-ng instead of zlib.
#
# Define NO_NORETURN if using buggy versions of gcc 4.6+ and profile feedback,
# as the compiler can crash (https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49299)
@@ -416,6 +417,9 @@ include shared.mak
# Define LINK_FUZZ_PROGRAMS if you want `make all` to also build the fuzz test
# programs in oss-fuzz/.
#
+# Define INCLUDE_LIBGIT_RS if you want `make all` and `make test` to build and
+# test the Rust crates in contrib/libgit-sys and contrib/libgit-rs.
+#
# === Optional library: libintl ===
#
# Define NO_GETTEXT if you don't want Git output to be translated.
@@ -657,6 +661,8 @@ CURL_CONFIG = curl-config
GCOV = gcov
STRIP = strip
SPATCH = spatch
+LD = ld
+OBJCOPY = objcopy
export TCL_PATH TCLTK_PATH
@@ -675,6 +681,7 @@ FUZZ_OBJS =
FUZZ_PROGRAMS =
GIT_OBJS =
LIB_OBJS =
+LIBGIT_PUB_OBJS =
SCALAR_OBJS =
OBJECTS =
OTHER_PROGRAMS =
@@ -812,6 +819,7 @@ TEST_BUILTINS_OBJS += test-lazy-init-name-hash.o
TEST_BUILTINS_OBJS += test-match-trees.o
TEST_BUILTINS_OBJS += test-mergesort.o
TEST_BUILTINS_OBJS += test-mktemp.o
+TEST_BUILTINS_OBJS += test-name-hash.o
TEST_BUILTINS_OBJS += test-online-cpus.o
TEST_BUILTINS_OBJS += test-pack-mtimes.o
TEST_BUILTINS_OBJS += test-parse-options.o
@@ -982,10 +990,11 @@ LIB_OBJS += combine-diff.o
LIB_OBJS += commit-graph.o
LIB_OBJS += commit-reach.o
LIB_OBJS += commit.o
+LIB_OBJS += common-exit.o
+LIB_OBJS += common-init.o
LIB_OBJS += compat/nonblock.o
LIB_OBJS += compat/obstack.o
LIB_OBJS += compat/terminal.o
-LIB_OBJS += compat/zlib-uncompress2.o
LIB_OBJS += config.o
LIB_OBJS += connect.o
LIB_OBJS += connected.o
@@ -1273,7 +1282,9 @@ BUILTIN_OBJS += builtin/mv.o
BUILTIN_OBJS += builtin/name-rev.o
BUILTIN_OBJS += builtin/notes.o
BUILTIN_OBJS += builtin/pack-objects.o
+ifndef WITH_BREAKING_CHANGES
BUILTIN_OBJS += builtin/pack-redundant.o
+endif
BUILTIN_OBJS += builtin/pack-refs.o
BUILTIN_OBJS += builtin/patch-id.o
BUILTIN_OBJS += builtin/prune-packed.o
@@ -1340,18 +1351,20 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/%
THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/%
CLAR_TEST_SUITES += u-ctype
+CLAR_TEST_SUITES += u-example-decorate
CLAR_TEST_SUITES += u-hash
+CLAR_TEST_SUITES += u-hashmap
CLAR_TEST_SUITES += u-mem-pool
CLAR_TEST_SUITES += u-prio-queue
CLAR_TEST_SUITES += u-reftable-tree
+CLAR_TEST_SUITES += u-strbuf
+CLAR_TEST_SUITES += u-strcmp-offset
CLAR_TEST_SUITES += u-strvec
CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X)
CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES))
CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o
CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o
-UNIT_TEST_PROGRAMS += t-example-decorate
-UNIT_TEST_PROGRAMS += t-hashmap
UNIT_TEST_PROGRAMS += t-oid-array
UNIT_TEST_PROGRAMS += t-oidmap
UNIT_TEST_PROGRAMS += t-oidtree
@@ -1363,8 +1376,6 @@ UNIT_TEST_PROGRAMS += t-reftable-reader
UNIT_TEST_PROGRAMS += t-reftable-readwrite
UNIT_TEST_PROGRAMS += t-reftable-record
UNIT_TEST_PROGRAMS += t-reftable-stack
-UNIT_TEST_PROGRAMS += t-strbuf
-UNIT_TEST_PROGRAMS += t-strcmp-offset
UNIT_TEST_PROGRAMS += t-trailer
UNIT_TEST_PROGRAMS += t-urlmatch-normalization
UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS))
@@ -1690,11 +1701,20 @@ else
endif
IMAP_SEND_LDFLAGS += $(OPENSSL_LINK) $(OPENSSL_LIBSSL) $(LIB_4_CRYPTO)
-ifdef ZLIB_PATH
- BASIC_CFLAGS += -I$(ZLIB_PATH)/include
- EXTLIBS += $(call libpath_template,$(ZLIB_PATH)/$(lib))
+ifdef ZLIB_NG
+ BASIC_CFLAGS += -DHAVE_ZLIB_NG
+ ifdef ZLIB_NG_PATH
+ BASIC_CFLAGS += -I$(ZLIB_NG_PATH)/include
+ EXTLIBS += $(call libpath_template,$(ZLIB_NG_PATH)/$(lib))
+ endif
+ EXTLIBS += -lz-ng
+else
+ ifdef ZLIB_PATH
+ BASIC_CFLAGS += -I$(ZLIB_PATH)/include
+ EXTLIBS += $(call libpath_template,$(ZLIB_PATH)/$(lib))
+ endif
+ EXTLIBS += -lz
endif
-EXTLIBS += -lz
ifndef NO_OPENSSL
OPENSSL_LIBSSL = -lssl
@@ -2236,6 +2256,16 @@ ifdef FSMONITOR_OS_SETTINGS
COMPAT_OBJS += compat/fsmonitor/fsm-path-utils-$(FSMONITOR_OS_SETTINGS).o
endif
+ifdef WITH_BREAKING_CHANGES
+ BASIC_CFLAGS += -DWITH_BREAKING_CHANGES
+endif
+
+ifdef INCLUDE_LIBGIT_RS
+ # Enable symbol hiding in contrib/libgit-sys/libgitpub.a without making
+ # us rebuild the whole tree every time we run a Rust build.
+ BASIC_CFLAGS += -fvisibility=hidden
+endif
+
ifeq ($(TCLTK_PATH),)
NO_TCLTK = NoThanks
endif
@@ -2530,17 +2560,17 @@ $(BUILT_INS): git$X
config-list.h: generate-configlist.sh
-config-list.h: Documentation/*config.txt Documentation/config/*.txt
+config-list.h: Documentation/*config.adoc Documentation/config/*.adoc
$(QUIET_GEN)$(SHELL_PATH) ./generate-configlist.sh . $@
command-list.h: generate-cmdlist.sh command-list.txt
-command-list.h: $(wildcard Documentation/git*.txt)
+command-list.h: $(wildcard Documentation/git*.adoc)
$(QUIET_GEN)$(SHELL_PATH) ./generate-cmdlist.sh \
$(patsubst %,--exclude-program %,$(EXCLUDED_PROGRAMS)) \
. $@
-hook-list.h: generate-hooklist.sh Documentation/githooks.txt
+hook-list.h: generate-hooklist.sh Documentation/githooks.adoc
$(QUIET_GEN)$(SHELL_PATH) ./generate-hooklist.sh . $@
SCRIPT_DEFINES = $(SHELL_PATH_SQ):$(DIFF_SQ):\
@@ -2732,6 +2762,10 @@ OBJECTS += $(UNIT_TEST_OBJS)
OBJECTS += $(CLAR_TEST_OBJS)
OBJECTS += $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(UNIT_TEST_PROGRAMS))
+ifdef INCLUDE_LIBGIT_RS
+ OBJECTS += contrib/libgit-sys/public_symbol_export.o
+endif
+
ifndef NO_CURL
OBJECTS += http.o http-walker.o remote-curl.o
endif
@@ -3194,6 +3228,7 @@ GIT-BUILD-OPTIONS: FORCE
-e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \
-e "s|@USE_GETTEXT_SCHEME@|\'$(USE_GETTEXT_SCHEME)\'|" \
-e "s|@USE_LIBPCRE2@|\'$(USE_LIBPCRE2)\'|" \
+ -e "s|@WITH_BREAKING_CHANGES@|\'$(WITH_BREAKING_CHANGES)\'|" \
-e "s|@X@|\'$(X)\'|" \
GIT-BUILD-OPTIONS.in >$@+
@if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi
@@ -3726,6 +3761,10 @@ clean: profile-clean coverage-clean cocciclean
$(RM) $(htmldocs).tar.gz $(manpages).tar.gz
$(MAKE) -C Documentation/ clean
$(RM) Documentation/GIT-EXCLUDED-PROGRAMS
+ $(RM) -r contrib/libgit-sys/target contrib/libgit-rs/target
+ $(RM) contrib/libgit-sys/partial_symbol_export.o
+ $(RM) contrib/libgit-sys/hidden_symbol_export.o
+ $(RM) contrib/libgit-sys/libgitpub.a
ifndef NO_PERL
$(RM) -r perl/build/
endif
@@ -3887,3 +3926,31 @@ $(CLAR_TEST_PROG): $(UNIT_TEST_DIR)/clar.suite $(CLAR_TEST_OBJS) $(GITLIBS) GIT-
build-unit-tests: $(UNIT_TEST_PROGS) $(CLAR_TEST_PROG)
unit-tests: $(UNIT_TEST_PROGS) $(CLAR_TEST_PROG) t/helper/test-tool$X
$(MAKE) -C t/ unit-tests
+
+.PHONY: libgit-sys libgit-rs
+libgit-sys libgit-rs:
+ $(QUIET)(\
+ cd contrib/$@ && \
+ cargo build \
+ )
+ifdef INCLUDE_LIBGIT_RS
+all:: libgit-sys libgit-rs
+endif
+
+LIBGIT_PUB_OBJS += contrib/libgit-sys/public_symbol_export.o
+LIBGIT_PUB_OBJS += libgit.a
+LIBGIT_PUB_OBJS += reftable/libreftable.a
+LIBGIT_PUB_OBJS += xdiff/lib.a
+
+LIBGIT_PARTIAL_EXPORT = contrib/libgit-sys/partial_symbol_export.o
+
+LIBGIT_HIDDEN_EXPORT = contrib/libgit-sys/hidden_symbol_export.o
+
+$(LIBGIT_PARTIAL_EXPORT): $(LIBGIT_PUB_OBJS)
+ $(LD) -r $^ -o $@
+
+$(LIBGIT_HIDDEN_EXPORT): $(LIBGIT_PARTIAL_EXPORT)
+ $(OBJCOPY) --localize-hidden $^ $@
+
+contrib/libgit-sys/libgitpub.a: $(LIBGIT_HIDDEN_EXPORT)
+ $(AR) $(ARFLAGS) $@ $^
diff --git a/RelNotes b/RelNotes
index 978481996e..ac72bdf04d 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.49.0.txt \ No newline at end of file
+Documentation/RelNotes/2.49.0.adoc \ No newline at end of file
diff --git a/apply.c b/apply.c
index 4a7b6120ac..b124678b93 100644
--- a/apply.c
+++ b/apply.c
@@ -1423,7 +1423,10 @@ static int parse_num(const char *line, unsigned long *p)
if (!isdigit(*line))
return 0;
+ errno = 0;
*p = strtoul(line, &ptr, 10);
+ if (errno)
+ return 0;
return ptr - line;
}
diff --git a/archive-tar.c b/archive-tar.c
index e7b3489e1e..0edf13fba7 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -473,9 +473,7 @@ static const char internal_gzip_command[] = "git archive gzip";
static int write_tar_filter_archive(const struct archiver *ar,
struct archiver_args *args)
{
-#if ZLIB_VERNUM >= 0x1221
struct gz_header_s gzhead = { .os = 3 }; /* Unix, for reproducibility */
-#endif
struct strbuf cmd = STRBUF_INIT;
struct child_process filter = CHILD_PROCESS_INIT;
int r;
@@ -486,10 +484,8 @@ static int write_tar_filter_archive(const struct archiver *ar,
if (!strcmp(ar->filter_command, internal_gzip_command)) {
write_block = tgz_write_block;
git_deflate_init_gzip(&gzstream, args->compression_level);
-#if ZLIB_VERNUM >= 0x1221
if (deflateSetHeader(&gzstream.z, &gzhead) != Z_OK)
BUG("deflateSetHeader() called too late");
-#endif
gzstream.next_out = outbuf;
gzstream.avail_out = sizeof(outbuf);
diff --git a/archive.c b/archive.c
index b9c200cba6..8be4e7ac8d 100644
--- a/archive.c
+++ b/archive.c
@@ -7,6 +7,7 @@
#include "convert.h"
#include "environment.h"
#include "gettext.h"
+#include "git-zlib.h"
#include "hex.h"
#include "object-name.h"
#include "path.h"
diff --git a/builtin/clone.c b/builtin/clone.c
index fd001d800c..f9a2ecbe9c 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -56,42 +56,30 @@
* - dropping use-separate-remote and no-separate-remote compatibility
*
*/
-static const char * const builtin_clone_usage[] = {
- N_("git clone [<options>] [--] <repo> [<dir>]"),
- NULL
+
+struct clone_opts {
+ int wants_head;
+ int detach;
};
+#define CLONE_OPTS_INIT { \
+ .wants_head = 1 /* default enabled */ \
+}
static int option_no_checkout, option_bare, option_mirror, option_single_branch = -1;
static int option_local = -1, option_no_hardlinks, option_shared;
-static int option_no_tags;
+static int option_tags = 1; /* default enabled */
static int option_shallow_submodules;
-static int option_reject_shallow = -1; /* unspecified */
static int config_reject_shallow = -1; /* unspecified */
-static int deepen;
-static char *option_template, *option_depth, *option_since;
-static char *option_origin = NULL;
static char *remote_name = NULL;
static char *option_branch = NULL;
-static struct string_list option_not = STRING_LIST_INIT_NODUP;
-static const char *real_git_dir;
-static const char *ref_format;
-static const char *option_upload_pack = "git-upload-pack";
static int option_verbosity;
-static int option_progress = -1;
-static int option_sparse_checkout;
-static enum transport_family family;
-static struct string_list option_config = STRING_LIST_INIT_NODUP;
static struct string_list option_required_reference = STRING_LIST_INIT_NODUP;
static struct string_list option_optional_reference = STRING_LIST_INIT_NODUP;
-static int option_dissociate;
static int max_jobs = -1;
static struct string_list option_recurse_submodules = STRING_LIST_INIT_NODUP;
static struct list_objects_filter_options filter_options = LIST_OBJECTS_FILTER_INIT;
-static int option_filter_submodules = -1; /* unspecified */
static int config_filter_submodules = -1; /* unspecified */
-static struct string_list server_options = STRING_LIST_INIT_NODUP;
static int option_remote_submodules;
-static const char *bundle_uri;
static int recurse_submodules_cb(const struct option *opt,
const char *arg, int unset)
@@ -107,78 +95,6 @@ static int recurse_submodules_cb(const struct option *opt,
return 0;
}
-static struct option builtin_clone_options[] = {
- OPT__VERBOSITY(&option_verbosity),
- OPT_BOOL(0, "progress", &option_progress,
- N_("force progress reporting")),
- OPT_BOOL(0, "reject-shallow", &option_reject_shallow,
- N_("don't clone shallow repository")),
- OPT_BOOL('n', "no-checkout", &option_no_checkout,
- N_("don't create a checkout")),
- OPT_BOOL(0, "bare", &option_bare, N_("create a bare repository")),
- OPT_HIDDEN_BOOL(0, "naked", &option_bare,
- N_("create a bare repository")),
- OPT_BOOL(0, "mirror", &option_mirror,
- N_("create a mirror repository (implies --bare)")),
- OPT_BOOL('l', "local", &option_local,
- N_("to clone from a local repository")),
- OPT_BOOL(0, "no-hardlinks", &option_no_hardlinks,
- N_("don't use local hardlinks, always copy")),
- OPT_BOOL('s', "shared", &option_shared,
- N_("setup as shared repository")),
- { OPTION_CALLBACK, 0, "recurse-submodules", &option_recurse_submodules,
- N_("pathspec"), N_("initialize submodules in the clone"),
- PARSE_OPT_OPTARG, recurse_submodules_cb, (intptr_t)"." },
- OPT_ALIAS(0, "recursive", "recurse-submodules"),
- OPT_INTEGER('j', "jobs", &max_jobs,
- N_("number of submodules cloned in parallel")),
- OPT_STRING(0, "template", &option_template, N_("template-directory"),
- N_("directory from which templates will be used")),
- OPT_STRING_LIST(0, "reference", &option_required_reference, N_("repo"),
- N_("reference repository")),
- OPT_STRING_LIST(0, "reference-if-able", &option_optional_reference,
- N_("repo"), N_("reference repository")),
- OPT_BOOL(0, "dissociate", &option_dissociate,
- N_("use --reference only while cloning")),
- OPT_STRING('o', "origin", &option_origin, N_("name"),
- N_("use <name> instead of 'origin' to track upstream")),
- OPT_STRING('b', "branch", &option_branch, N_("branch"),
- N_("checkout <branch> instead of the remote's HEAD")),
- OPT_STRING('u', "upload-pack", &option_upload_pack, N_("path"),
- N_("path to git-upload-pack on the remote")),
- OPT_STRING(0, "depth", &option_depth, N_("depth"),
- N_("create a shallow clone of that depth")),
- OPT_STRING(0, "shallow-since", &option_since, N_("time"),
- N_("create a shallow clone since a specific time")),
- OPT_STRING_LIST(0, "shallow-exclude", &option_not, N_("ref"),
- N_("deepen history of shallow clone, excluding ref")),
- OPT_BOOL(0, "single-branch", &option_single_branch,
- N_("clone only one branch, HEAD or --branch")),
- OPT_BOOL(0, "no-tags", &option_no_tags,
- N_("don't clone any tags, and make later fetches not to follow them")),
- OPT_BOOL(0, "shallow-submodules", &option_shallow_submodules,
- N_("any cloned submodules will be shallow")),
- OPT_STRING(0, "separate-git-dir", &real_git_dir, N_("gitdir"),
- N_("separate git dir from working tree")),
- OPT_STRING(0, "ref-format", &ref_format, N_("format"),
- N_("specify the reference format to use")),
- OPT_STRING_LIST('c', "config", &option_config, N_("key=value"),
- N_("set config inside the new repository")),
- OPT_STRING_LIST(0, "server-option", &server_options,
- N_("server-specific"), N_("option to transmit")),
- OPT_IPVERSION(&family),
- OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
- OPT_BOOL(0, "also-filter-submodules", &option_filter_submodules,
- N_("apply partial clone filters to submodules")),
- OPT_BOOL(0, "remote-submodules", &option_remote_submodules,
- N_("any cloned submodules will use their remote-tracking branch")),
- OPT_BOOL(0, "sparse", &option_sparse_checkout,
- N_("initialize sparse-checkout file to include only files at root")),
- OPT_STRING(0, "bundle-uri", &bundle_uri,
- N_("uri"), N_("a URI for downloading bundles before fetching from origin remote")),
- OPT_END()
-};
-
static const char *get_repo_path_1(struct strbuf *path, int *is_bundle)
{
static const char *suffix[] = { "/.git", "", ".git/.git", ".git" };
@@ -521,51 +437,31 @@ static struct ref *find_remote_branch(const struct ref *refs, const char *branch
return ref;
}
-static struct ref *wanted_peer_refs(const struct ref *refs,
- struct refspec *refspec)
+static struct ref *wanted_peer_refs(struct clone_opts *opts,
+ const struct ref *refs,
+ struct refspec *refspec)
{
- struct ref *head = copy_ref(find_ref_by_name(refs, "HEAD"));
- struct ref *local_refs = head;
- struct ref **tail = head ? &head->next : &local_refs;
- struct refspec_item tag_refspec;
-
- refspec_item_init(&tag_refspec, TAG_REFSPEC, 0);
-
- if (option_single_branch) {
- struct ref *remote_head = NULL;
-
- if (!option_branch)
- remote_head = guess_remote_head(head, refs, 0);
- else {
- free_one_ref(head);
- local_refs = head = NULL;
- tail = &local_refs;
- remote_head = copy_ref(find_remote_branch(refs, option_branch));
- }
-
- if (!remote_head && option_branch)
- warning(_("Could not find remote branch %s to clone."),
- option_branch);
- else {
- int i;
- for (i = 0; i < refspec->nr; i++)
- get_fetch_map(remote_head, &refspec->items[i],
- &tail, 0);
-
- /* if --branch=tag, pull the requested tag explicitly */
- get_fetch_map(remote_head, &tag_refspec, &tail, 0);
- }
- free_refs(remote_head);
- } else {
- int i;
- for (i = 0; i < refspec->nr; i++)
- get_fetch_map(refs, &refspec->items[i], &tail, 0);
+ struct ref *local_refs = NULL;
+ struct ref **tail = &local_refs;
+ struct ref *to_free = NULL;
+
+ if (opts->wants_head) {
+ struct ref *head = copy_ref(find_ref_by_name(refs, "HEAD"));
+ if (head)
+ tail_link_ref(head, &tail);
+ if (option_single_branch)
+ refs = to_free = guess_remote_head(head, refs, 0);
+ } else if (option_single_branch) {
+ local_refs = NULL;
+ tail = &local_refs;
+ refs = to_free = copy_ref(find_remote_branch(refs, option_branch));
}
- if (!option_mirror && !option_single_branch && !option_no_tags)
- get_fetch_map(refs, &tag_refspec, &tail, 0);
+ for (size_t i = 0; i < refspec->nr; i++)
+ get_fetch_map(refs, &refspec->items[i], &tail, 0);
+
+ free_one_ref(to_free);
- refspec_item_clear(&tag_refspec);
return local_refs;
}
@@ -654,7 +550,7 @@ static void update_remote_refs(const struct ref *refs,
if (refs) {
write_remote_refs(mapped_refs);
- if (option_single_branch && !option_no_tags)
+ if (option_single_branch && option_tags)
write_followtags(refs, msg);
}
@@ -670,11 +566,11 @@ static void update_remote_refs(const struct ref *refs,
}
}
-static void update_head(const struct ref *our, const struct ref *remote,
+static void update_head(struct clone_opts *opts, const struct ref *our, const struct ref *remote,
const char *unborn, const char *msg)
{
const char *head;
- if (our && skip_prefix(our->name, "refs/heads/", &head)) {
+ if (our && !opts->detach && skip_prefix(our->name, "refs/heads/", &head)) {
/* Local default branch link */
if (refs_update_symref(get_main_ref_store(the_repository), "HEAD", our->name, NULL) < 0)
die(_("unable to update HEAD"));
@@ -685,8 +581,9 @@ static void update_head(const struct ref *our, const struct ref *remote,
install_branch_config(0, head, remote_name, our->name);
}
} else if (our) {
- struct commit *c = lookup_commit_reference(the_repository,
- &our->old_oid);
+ struct commit *c = lookup_commit_or_die(&our->old_oid,
+ our->name);
+
/* --branch specifies a non-branch (i.e. tags), detach HEAD */
refs_update_ref(get_main_ref_store(the_repository), msg,
"HEAD", &c->object.oid, NULL, REF_NO_DEREF,
@@ -989,10 +886,108 @@ int cmd_clone(int argc,
int hash_algo;
enum ref_storage_format ref_storage_format = REF_STORAGE_FORMAT_UNKNOWN;
const int do_not_override_repo_unix_permissions = -1;
+ int option_reject_shallow = -1; /* unspecified */
+ int deepen = 0;
+ char *option_template = NULL, *option_depth = NULL, *option_since = NULL;
+ char *option_origin = NULL;
+ struct string_list option_not = STRING_LIST_INIT_NODUP;
+ const char *real_git_dir = NULL;
+ const char *ref_format = NULL;
+ const char *option_upload_pack = "git-upload-pack";
+ int option_progress = -1;
+ int option_sparse_checkout = 0;
+ enum transport_family family = TRANSPORT_FAMILY_ALL;
+ struct string_list option_config = STRING_LIST_INIT_DUP;
+ int option_dissociate = 0;
+ int option_filter_submodules = -1; /* unspecified */
+ struct string_list server_options = STRING_LIST_INIT_NODUP;
+ const char *bundle_uri = NULL;
+ char *option_rev = NULL;
+
+ struct clone_opts opts = CLONE_OPTS_INIT;
struct transport_ls_refs_options transport_ls_refs_options =
TRANSPORT_LS_REFS_OPTIONS_INIT;
+ struct option builtin_clone_options[] = {
+ OPT__VERBOSITY(&option_verbosity),
+ OPT_BOOL(0, "progress", &option_progress,
+ N_("force progress reporting")),
+ OPT_BOOL(0, "reject-shallow", &option_reject_shallow,
+ N_("don't clone shallow repository")),
+ OPT_BOOL('n', "no-checkout", &option_no_checkout,
+ N_("don't create a checkout")),
+ OPT_BOOL(0, "bare", &option_bare, N_("create a bare repository")),
+ OPT_HIDDEN_BOOL(0, "naked", &option_bare,
+ N_("create a bare repository")),
+ OPT_BOOL(0, "mirror", &option_mirror,
+ N_("create a mirror repository (implies --bare)")),
+ OPT_BOOL('l', "local", &option_local,
+ N_("to clone from a local repository")),
+ OPT_BOOL(0, "no-hardlinks", &option_no_hardlinks,
+ N_("don't use local hardlinks, always copy")),
+ OPT_BOOL('s', "shared", &option_shared,
+ N_("setup as shared repository")),
+ { OPTION_CALLBACK, 0, "recurse-submodules", &option_recurse_submodules,
+ N_("pathspec"), N_("initialize submodules in the clone"),
+ PARSE_OPT_OPTARG, recurse_submodules_cb, (intptr_t)"." },
+ OPT_ALIAS(0, "recursive", "recurse-submodules"),
+ OPT_INTEGER('j', "jobs", &max_jobs,
+ N_("number of submodules cloned in parallel")),
+ OPT_STRING(0, "template", &option_template, N_("template-directory"),
+ N_("directory from which templates will be used")),
+ OPT_STRING_LIST(0, "reference", &option_required_reference, N_("repo"),
+ N_("reference repository")),
+ OPT_STRING_LIST(0, "reference-if-able", &option_optional_reference,
+ N_("repo"), N_("reference repository")),
+ OPT_BOOL(0, "dissociate", &option_dissociate,
+ N_("use --reference only while cloning")),
+ OPT_STRING('o', "origin", &option_origin, N_("name"),
+ N_("use <name> instead of 'origin' to track upstream")),
+ OPT_STRING('b', "branch", &option_branch, N_("branch"),
+ N_("checkout <branch> instead of the remote's HEAD")),
+ OPT_STRING(0, "revision", &option_rev, N_("rev"),
+ N_("clone single revision <rev> and check out")),
+ OPT_STRING('u', "upload-pack", &option_upload_pack, N_("path"),
+ N_("path to git-upload-pack on the remote")),
+ OPT_STRING(0, "depth", &option_depth, N_("depth"),
+ N_("create a shallow clone of that depth")),
+ OPT_STRING(0, "shallow-since", &option_since, N_("time"),
+ N_("create a shallow clone since a specific time")),
+ OPT_STRING_LIST(0, "shallow-exclude", &option_not, N_("ref"),
+ N_("deepen history of shallow clone, excluding ref")),
+ OPT_BOOL(0, "single-branch", &option_single_branch,
+ N_("clone only one branch, HEAD or --branch")),
+ OPT_BOOL(0, "tags", &option_tags,
+ N_("clone tags, and make later fetches not to follow them")),
+ OPT_BOOL(0, "shallow-submodules", &option_shallow_submodules,
+ N_("any cloned submodules will be shallow")),
+ OPT_STRING(0, "separate-git-dir", &real_git_dir, N_("gitdir"),
+ N_("separate git dir from working tree")),
+ OPT_STRING(0, "ref-format", &ref_format, N_("format"),
+ N_("specify the reference format to use")),
+ OPT_STRING_LIST('c', "config", &option_config, N_("key=value"),
+ N_("set config inside the new repository")),
+ OPT_STRING_LIST(0, "server-option", &server_options,
+ N_("server-specific"), N_("option to transmit")),
+ OPT_IPVERSION(&family),
+ OPT_PARSE_LIST_OBJECTS_FILTER(&filter_options),
+ OPT_BOOL(0, "also-filter-submodules", &option_filter_submodules,
+ N_("apply partial clone filters to submodules")),
+ OPT_BOOL(0, "remote-submodules", &option_remote_submodules,
+ N_("any cloned submodules will use their remote-tracking branch")),
+ OPT_BOOL(0, "sparse", &option_sparse_checkout,
+ N_("initialize sparse-checkout file to include only files at root")),
+ OPT_STRING(0, "bundle-uri", &bundle_uri,
+ N_("uri"), N_("a URI for downloading bundles before fetching from origin remote")),
+ OPT_END()
+ };
+
+ const char * const builtin_clone_usage[] = {
+ N_("git clone [<options>] [--] <repo> [<dir>]"),
+ NULL
+ };
+
packet_trace_identity("clone");
git_config(git_clone_config, NULL);
@@ -1019,8 +1014,10 @@ int cmd_clone(int argc,
die(_("unknown ref storage format '%s'"), ref_format);
}
- if (option_mirror)
+ if (option_mirror) {
option_bare = 1;
+ option_tags = 0;
+ }
if (option_bare) {
if (real_git_dir)
@@ -1138,8 +1135,8 @@ int cmd_clone(int argc,
for_each_string_list_item(item, &option_recurse_submodules) {
strbuf_addf(&sb, "submodule.active=%s",
item->string);
- string_list_append(&option_config,
- strbuf_detach(&sb, NULL));
+ string_list_append(&option_config, sb.buf);
+ strbuf_reset(&sb);
}
if (!git_config_get_bool("submodule.stickyRecursiveClone", &val) &&
@@ -1161,6 +1158,8 @@ int cmd_clone(int argc,
string_list_append(&option_config,
"submodule.alternateErrorStrategy=info");
}
+
+ strbuf_release(&sb);
}
/*
@@ -1285,7 +1284,7 @@ int cmd_clone(int argc,
strbuf_addstr(&branch_top, src_ref_prefix);
git_config_set("core.bare", "true");
- } else {
+ } else if (!option_rev) {
strbuf_addf(&branch_top, "refs/remotes/%s/", remote_name);
}
@@ -1293,7 +1292,7 @@ int cmd_clone(int argc,
git_config_set(key.buf, repo);
strbuf_reset(&key);
- if (option_no_tags) {
+ if (!option_tags) {
strbuf_addf(&key, "remote.%s.tagOpt", remote_name);
git_config_set(key.buf, "--no-tags");
strbuf_reset(&key);
@@ -1304,8 +1303,9 @@ int cmd_clone(int argc,
remote = remote_get_early(remote_name);
- refspec_appendf(&remote->fetch, "+%s*:%s*", src_ref_prefix,
- branch_top.buf);
+ if (!option_rev)
+ refspec_appendf(&remote->fetch, "+%s*:%s*", src_ref_prefix,
+ branch_top.buf);
path = get_repo_path(remote->url.v[0], &is_bundle);
is_local = option_local != 0 && path && !is_bundle;
@@ -1348,6 +1348,11 @@ int cmd_clone(int argc,
transport_set_option(transport, TRANS_OPT_KEEP, "yes");
+ die_for_incompatible_opt2(!!option_rev, "--revision",
+ !!option_branch, "--branch");
+ die_for_incompatible_opt2(!!option_rev, "--revision",
+ option_mirror, "--mirror");
+
if (reject_shallow)
transport_set_option(transport, TRANS_OPT_REJECT_SHALLOW, "1");
if (option_depth)
@@ -1359,9 +1364,13 @@ int cmd_clone(int argc,
if (option_not.nr)
transport_set_option(transport, TRANS_OPT_DEEPEN_NOT,
(const char *)&option_not);
- if (option_single_branch)
+ if (option_single_branch) {
transport_set_option(transport, TRANS_OPT_FOLLOWTAGS, "1");
+ if (option_branch)
+ opts.wants_head = 0;
+ }
+
if (option_upload_pack)
transport_set_option(transport, TRANS_OPT_UPLOADPACK,
option_upload_pack);
@@ -1380,15 +1389,38 @@ int cmd_clone(int argc,
if (transport->smart_options && !deepen && !filter_options.choice)
transport->smart_options->check_self_contained_and_connected = 1;
- strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
+ if (option_rev) {
+ option_tags = 0;
+ option_single_branch = 0;
+ opts.wants_head = 0;
+ opts.detach = 1;
+
+ refspec_append(&remote->fetch, option_rev);
+ }
+
+ if (option_tags || option_branch)
+ /*
+ * Add tags refspec when user asked for tags (implicitly) or
+ * specified --branch, whose argument might be a tag.
+ */
+ refspec_append(&remote->fetch, TAG_REFSPEC);
+
refspec_ref_prefixes(&remote->fetch,
&transport_ls_refs_options.ref_prefixes);
if (option_branch)
expand_ref_prefix(&transport_ls_refs_options.ref_prefixes,
option_branch);
- if (!option_no_tags)
- strvec_push(&transport_ls_refs_options.ref_prefixes,
- "refs/tags/");
+
+ /*
+ * As part of transport_get_remote_refs() the server tells us the hash
+ * algorithm, which we require to initialize the repo. But calling that
+ * function without any ref prefix, will cause the server to announce
+ * all known refs. If the argument passed to --revision was a hex oid,
+ * ref_prefixes will be empty so we fall back to asking about HEAD to
+ * reduce traffic from the server.
+ */
+ if (opts.wants_head || transport_ls_refs_options.ref_prefixes.nr == 0)
+ strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD");
refs = transport_get_remote_refs(transport, &transport_ls_refs_options);
@@ -1465,7 +1497,7 @@ int cmd_clone(int argc,
}
if (refs)
- mapped_refs = wanted_peer_refs(refs, &remote->fetch);
+ mapped_refs = wanted_peer_refs(&opts, refs, &remote->fetch);
if (mapped_refs) {
/*
@@ -1498,6 +1530,11 @@ int cmd_clone(int argc,
if (!our_head_points_at)
die(_("Remote branch %s not found in upstream %s"),
option_branch, remote_name);
+ } else if (option_rev) {
+ our_head_points_at = mapped_refs;
+ if (!our_head_points_at)
+ die(_("Remote revision %s not found in upstream %s"),
+ option_rev, remote_name);
} else if (remote_head_points_at) {
our_head_points_at = remote_head_points_at;
} else if (remote_head) {
@@ -1536,8 +1573,9 @@ int cmd_clone(int argc,
free(to_free);
}
- write_refspec_config(src_ref_prefix, our_head_points_at,
- remote_head_points_at, &branch_top);
+ if (!option_rev)
+ write_refspec_config(src_ref_prefix, our_head_points_at,
+ remote_head_points_at, &branch_top);
if (filter_options.choice)
partial_clone_register(remote_name, &filter_options);
@@ -1553,7 +1591,7 @@ int cmd_clone(int argc,
branch_top.buf, reflog_msg.buf, transport,
!is_local);
- update_head(our_head_points_at, remote_head, unborn_head, reflog_msg.buf);
+ update_head(&opts, our_head_points_at, remote_head, unborn_head, reflog_msg.buf);
/*
* We want to show progress for recursive submodule clones iff
@@ -1578,6 +1616,10 @@ int cmd_clone(int argc,
err = checkout(submodule_progress, filter_submodules,
ref_storage_format);
+ string_list_clear(&option_not, 0);
+ string_list_clear(&option_config, 0);
+ string_list_clear(&server_options, 0);
+
free(remote_name);
strbuf_release(&reflog_msg);
strbuf_release(&branch_top);
diff --git a/builtin/fast-import.c b/builtin/fast-import.c
index 2da46fecdc..d6a368a566 100644
--- a/builtin/fast-import.c
+++ b/builtin/fast-import.c
@@ -798,8 +798,8 @@ static const char *create_index(void)
if (c != last)
die("internal consistency error creating the index");
- tmpfile = write_idx_file(NULL, idx, object_count, &pack_idx_opts,
- pack_data->hash);
+ tmpfile = write_idx_file(the_hash_algo, NULL, idx, object_count,
+ &pack_idx_opts, pack_data->hash);
free(idx);
return tmpfile;
}
@@ -878,9 +878,10 @@ static void end_packfile(void)
close_pack_windows(pack_data);
finalize_hashfile(pack_file, cur_pack_oid.hash, FSYNC_COMPONENT_PACK, 0);
- fixup_pack_header_footer(pack_data->pack_fd, pack_data->hash,
- pack_data->pack_name, object_count,
- cur_pack_oid.hash, pack_size);
+ fixup_pack_header_footer(the_hash_algo, pack_data->pack_fd,
+ pack_data->hash, pack_data->pack_name,
+ object_count, cur_pack_oid.hash,
+ pack_size);
if (object_count <= unpack_limit) {
if (!loosen_small_pack(pack_data)) {
@@ -953,15 +954,15 @@ static int store_object(
unsigned char hdr[96];
struct object_id oid;
unsigned long hdrlen, deltalen;
- git_hash_ctx c;
+ struct git_hash_ctx c;
git_zstream s;
hdrlen = format_object_header((char *)hdr, sizeof(hdr), type,
dat->len);
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, hdr, hdrlen);
- the_hash_algo->update_fn(&c, dat->buf, dat->len);
- the_hash_algo->final_oid_fn(&oid, &c);
+ git_hash_update(&c, hdr, hdrlen);
+ git_hash_update(&c, dat->buf, dat->len);
+ git_hash_final_oid(&oid, &c);
if (oidout)
oidcpy(oidout, &oid);
@@ -1095,7 +1096,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
struct object_id oid;
unsigned long hdrlen;
off_t offset;
- git_hash_ctx c;
+ struct git_hash_ctx c;
git_zstream s;
struct hashfile_checkpoint checkpoint;
int status = Z_OK;
@@ -1106,14 +1107,14 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
|| (pack_size + PACK_SIZE_THRESHOLD + len) < pack_size)
cycle_packfile();
- the_hash_algo->unsafe_init_fn(&checkpoint.ctx);
+ hashfile_checkpoint_init(pack_file, &checkpoint);
hashfile_checkpoint(pack_file, &checkpoint);
offset = checkpoint.offset;
hdrlen = format_object_header((char *)out_buf, out_sz, OBJ_BLOB, len);
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, out_buf, hdrlen);
+ git_hash_update(&c, out_buf, hdrlen);
crc32_begin(pack_file);
@@ -1131,7 +1132,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
if (!n && feof(stdin))
die("EOF in data (%" PRIuMAX " bytes remaining)", len);
- the_hash_algo->update_fn(&c, in_buf, n);
+ git_hash_update(&c, in_buf, n);
s.next_in = in_buf;
s.avail_in = n;
len -= n;
@@ -1157,7 +1158,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark)
}
}
git_deflate_end(&s);
- the_hash_algo->final_oid_fn(&oid, &c);
+ git_hash_final_oid(&oid, &c);
if (oidout)
oidcpy(oidout, &oid);
diff --git a/builtin/gc.c b/builtin/gc.c
index 0bf3533494..409d454a4b 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -139,6 +139,7 @@ struct gc_config {
char *prune_worktrees_expire;
char *repack_filter;
char *repack_filter_to;
+ char *repack_expire_to;
unsigned long big_pack_threshold;
unsigned long max_delta_cache_size;
/*
@@ -445,7 +446,8 @@ static int keep_one_pack(struct string_list_item *item, void *data UNUSED)
static void add_repack_all_option(struct gc_config *cfg,
struct string_list *keep_pack)
{
- if (cfg->prune_expire && !strcmp(cfg->prune_expire, "now"))
+ if (cfg->prune_expire && !strcmp(cfg->prune_expire, "now")
+ && !(cfg->cruft_packs && cfg->repack_expire_to))
strvec_push(&repack, "-a");
else if (cfg->cruft_packs) {
strvec_push(&repack, "--cruft");
@@ -454,6 +456,8 @@ static void add_repack_all_option(struct gc_config *cfg,
if (cfg->max_cruft_size)
strvec_pushf(&repack, "--max-cruft-size=%lu",
cfg->max_cruft_size);
+ if (cfg->repack_expire_to)
+ strvec_pushf(&repack, "--expire-to=%s", cfg->repack_expire_to);
} else {
strvec_push(&repack, "-A");
if (cfg->prune_expire)
@@ -688,7 +692,6 @@ struct repository *repo UNUSED)
const char *prune_expire_sentinel = "sentinel";
const char *prune_expire_arg = prune_expire_sentinel;
int ret;
-
struct option builtin_gc_options[] = {
OPT__QUIET(&quiet, N_("suppress progress reporting")),
{ OPTION_STRING, 0, "prune", &prune_expire_arg, N_("date"),
@@ -707,6 +710,8 @@ struct repository *repo UNUSED)
PARSE_OPT_NOCOMPLETE),
OPT_BOOL(0, "keep-largest-pack", &keep_largest_pack,
N_("repack all other packs except the largest pack")),
+ OPT_STRING(0, "expire-to", &cfg.repack_expire_to, N_("dir"),
+ N_("pack prefix to store a pack containing pruned objects")),
OPT_END()
};
diff --git a/builtin/index-pack.c b/builtin/index-pack.c
index 6ffbb7ce35..52cc97d52c 100644
--- a/builtin/index-pack.c
+++ b/builtin/index-pack.c
@@ -151,7 +151,7 @@ static unsigned int input_offset, input_len;
static off_t consumed_bytes;
static off_t max_input_size;
static unsigned deepest_delta;
-static git_hash_ctx input_ctx;
+static struct git_hash_ctx input_ctx;
static uint32_t input_crc32;
static int input_fd, output_fd;
static const char *curr_pack;
@@ -301,7 +301,7 @@ static void flush(void)
if (input_offset) {
if (output_fd >= 0)
write_or_die(output_fd, input_buffer, input_offset);
- the_hash_algo->update_fn(&input_ctx, input_buffer, input_offset);
+ git_hash_update(&input_ctx, input_buffer, input_offset);
memmove(input_buffer, input_buffer + input_offset, input_len);
input_offset = 0;
}
@@ -475,14 +475,14 @@ static void *unpack_entry_data(off_t offset, unsigned long size,
int status;
git_zstream stream;
void *buf;
- git_hash_ctx c;
+ struct git_hash_ctx c;
char hdr[32];
int hdrlen;
if (!is_delta_type(type)) {
hdrlen = format_object_header(hdr, sizeof(hdr), type, size);
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, hdr, hdrlen);
+ git_hash_update(&c, hdr, hdrlen);
} else
oid = NULL;
if (type == OBJ_BLOB && size > big_file_threshold)
@@ -502,7 +502,7 @@ static void *unpack_entry_data(off_t offset, unsigned long size,
status = git_inflate(&stream, 0);
use(input_len - stream.avail_in);
if (oid)
- the_hash_algo->update_fn(&c, last_out, stream.next_out - last_out);
+ git_hash_update(&c, last_out, stream.next_out - last_out);
if (buf == fixed_buf) {
stream.next_out = buf;
stream.avail_out = sizeof(fixed_buf);
@@ -512,7 +512,7 @@ static void *unpack_entry_data(off_t offset, unsigned long size,
bad_object(offset, _("inflate returned %d"), status);
git_inflate_end(&stream);
if (oid)
- the_hash_algo->final_oid_fn(oid, &c);
+ git_hash_final_oid(oid, &c);
return buf == fixed_buf ? NULL : buf;
}
@@ -1248,7 +1248,7 @@ static void parse_pack_objects(unsigned char *hash)
struct ofs_delta_entry *ofs_delta = ofs_deltas;
struct object_id ref_delta_oid;
struct stat st;
- git_hash_ctx tmp_ctx;
+ struct git_hash_ctx tmp_ctx;
if (verbose)
progress = start_progress(
@@ -1286,9 +1286,8 @@ static void parse_pack_objects(unsigned char *hash)
/* Check pack integrity */
flush();
- the_hash_algo->init_fn(&tmp_ctx);
- the_hash_algo->clone_fn(&tmp_ctx, &input_ctx);
- the_hash_algo->final_fn(hash, &tmp_ctx);
+ git_hash_clone(&tmp_ctx, &input_ctx);
+ git_hash_final(hash, &tmp_ctx);
if (!hasheq(fill(the_hash_algo->rawsz), hash, the_repository->hash_algo))
die(_("pack is corrupted (SHA1 mismatch)"));
use(the_hash_algo->rawsz);
@@ -1392,7 +1391,7 @@ static void conclude_pack(int fix_thin_pack, const char *curr_pack, unsigned cha
strbuf_release(&msg);
finalize_hashfile(f, tail_hash, FSYNC_COMPONENT_PACK, 0);
hashcpy(read_hash, pack_hash, the_repository->hash_algo);
- fixup_pack_header_footer(output_fd, pack_hash,
+ fixup_pack_header_footer(the_hash_algo, output_fd, pack_hash,
curr_pack, nr_objects,
read_hash, consumed_bytes-the_hash_algo->rawsz);
if (!hasheq(read_hash, tail_hash, the_repository->hash_algo))
@@ -2089,11 +2088,12 @@ int cmd_index_pack(int argc,
ALLOC_ARRAY(idx_objects, nr_objects);
for (i = 0; i < nr_objects; i++)
idx_objects[i] = &objects[i].idx;
- curr_index = write_idx_file(index_name, idx_objects, nr_objects, &opts, pack_hash);
+ curr_index = write_idx_file(the_hash_algo, index_name, idx_objects,
+ nr_objects, &opts, pack_hash);
if (rev_index)
- curr_rev_index = write_rev_file(rev_index_name, idx_objects,
- nr_objects, pack_hash,
- opts.flags);
+ curr_rev_index = write_rev_file(the_hash_algo, rev_index_name,
+ idx_objects, nr_objects,
+ pack_hash, opts.flags);
free(idx_objects);
if (!verify)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index d51c021d99..58a9b16126 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -269,6 +269,43 @@ struct configured_exclusion {
static struct oidmap configured_exclusions;
static struct oidset excluded_by_config;
+static int name_hash_version = -1;
+
+/**
+ * Check whether the name_hash_version chosen by user input is appropriate,
+ * and also validate whether it is compatible with other features.
+ */
+static void validate_name_hash_version(void)
+{
+ if (name_hash_version < 1 || name_hash_version > 2)
+ die(_("invalid --name-hash-version option: %d"), name_hash_version);
+ if (write_bitmap_index && name_hash_version != 1) {
+ warning(_("currently, --write-bitmap-index requires --name-hash-version=1"));
+ name_hash_version = 1;
+ }
+}
+
+static inline uint32_t pack_name_hash_fn(const char *name)
+{
+ static int seen_version = -1;
+
+ if (seen_version < 0)
+ seen_version = name_hash_version;
+ else if (seen_version != name_hash_version)
+ BUG("name hash version changed from %d to %d mid-process",
+ seen_version, name_hash_version);
+
+ switch (name_hash_version) {
+ case 1:
+ return pack_name_hash(name);
+
+ case 2:
+ return pack_name_hash_v2((const unsigned char *)name);
+
+ default:
+ BUG("invalid name-hash version: %d", name_hash_version);
+ }
+}
/*
* stats
@@ -1319,8 +1356,9 @@ static void write_pack_file(void)
*/
int fd = finalize_hashfile(f, hash, FSYNC_COMPONENT_PACK, 0);
- fixup_pack_header_footer(fd, hash, pack_tmp_name,
- nr_written, hash, offset);
+ fixup_pack_header_footer(the_hash_algo, fd, hash,
+ pack_tmp_name, nr_written,
+ hash, offset);
close(fd);
if (write_bitmap_index) {
if (write_bitmap_index != WRITE_BITMAP_QUIET)
@@ -1368,9 +1406,10 @@ static void write_pack_file(void)
if (cruft)
pack_idx_opts.flags |= WRITE_MTIMES;
- stage_tmp_packfiles(&tmpname, pack_tmp_name,
- written_list, nr_written,
- &to_pack, &pack_idx_opts, hash,
+ stage_tmp_packfiles(the_hash_algo, &tmpname,
+ pack_tmp_name, written_list,
+ nr_written, &to_pack,
+ &pack_idx_opts, hash,
&idx_tmp_name);
if (write_bitmap_index) {
@@ -1687,7 +1726,7 @@ static int add_object_entry(const struct object_id *oid, enum object_type type,
return 0;
}
- create_object_entry(oid, type, pack_name_hash(name),
+ create_object_entry(oid, type, pack_name_hash_fn(name),
exclude, name && no_try_delta(name),
found_pack, found_offset);
return 1;
@@ -1901,7 +1940,7 @@ static void add_preferred_base_object(const char *name)
{
struct pbase_tree *it;
size_t cmplen;
- unsigned hash = pack_name_hash(name);
+ unsigned hash = pack_name_hash_fn(name);
if (!num_preferred_base || check_pbase_path(hash))
return;
@@ -3413,7 +3452,7 @@ static void show_object_pack_hint(struct object *object, const char *name,
* here using a now in order to perhaps improve the delta selection
* process.
*/
- oe->hash = pack_name_hash(name);
+ oe->hash = pack_name_hash_fn(name);
oe->no_try_delta = name && no_try_delta(name);
stdin_packs_hints_nr++;
@@ -3563,7 +3602,7 @@ static void add_cruft_object_entry(const struct object_id *oid, enum object_type
entry = packlist_find(&to_pack, oid);
if (entry) {
if (name) {
- entry->hash = pack_name_hash(name);
+ entry->hash = pack_name_hash_fn(name);
entry->no_try_delta = no_try_delta(name);
}
} else {
@@ -3586,7 +3625,7 @@ static void add_cruft_object_entry(const struct object_id *oid, enum object_type
return;
}
- entry = create_object_entry(oid, type, pack_name_hash(name),
+ entry = create_object_entry(oid, type, pack_name_hash_fn(name),
0, name && no_try_delta(name),
pack, offset);
}
@@ -4066,6 +4105,15 @@ static int get_object_list_from_bitmap(struct rev_info *revs)
if (!(bitmap_git = prepare_bitmap_walk(revs, 0)))
return -1;
+ /*
+ * For now, force the name-hash version to be 1 since that
+ * is the version implied by the bitmap format. Later, the
+ * format can include this version explicitly in its format,
+ * allowing readers to know the version that was used during
+ * the bitmap write.
+ */
+ name_hash_version = 1;
+
if (pack_options_allow_reuse())
reuse_partial_packfile_from_bitmap(bitmap_git,
&reuse_packfiles,
@@ -4441,6 +4489,8 @@ int cmd_pack_objects(int argc,
OPT_STRING_LIST(0, "uri-protocol", &uri_protocols,
N_("protocol"),
N_("exclude any configured uploadpack.blobpackfileuri with this protocol")),
+ OPT_INTEGER(0, "name-hash-version", &name_hash_version,
+ N_("use the specified name-hash function to group similar objects")),
OPT_END(),
};
@@ -4596,6 +4646,11 @@ int cmd_pack_objects(int argc,
if (pack_to_stdout || !rev_list_all)
write_bitmap_index = 0;
+ if (name_hash_version < 0)
+ name_hash_version = (int)git_env_ulong("GIT_TEST_NAME_HASH_VERSION", 1);
+
+ validate_name_hash_version();
+
if (use_delta_islands)
strvec_push(&rp, "--topo-order");
diff --git a/builtin/patch-id.c b/builtin/patch-id.c
index f540d8daa7..cdef2ec10a 100644
--- a/builtin/patch-id.c
+++ b/builtin/patch-id.c
@@ -70,7 +70,7 @@ static size_t get_one_patchid(struct object_id *next_oid, struct object_id *resu
int before = -1, after = -1;
int diff_is_binary = 0;
char pre_oid_str[GIT_MAX_HEXSZ + 1], post_oid_str[GIT_MAX_HEXSZ + 1];
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
the_hash_algo->init_fn(&ctx);
oidclr(result, the_repository->hash_algo);
@@ -85,7 +85,7 @@ static size_t get_one_patchid(struct object_id *next_oid, struct object_id *resu
!skip_prefix(line, "From ", &p) &&
starts_with(line, "\\ ") && 12 < strlen(line)) {
if (verbatim)
- the_hash_algo->update_fn(&ctx, line, strlen(line));
+ git_hash_update(&ctx, line, strlen(line));
continue;
}
@@ -104,10 +104,10 @@ static size_t get_one_patchid(struct object_id *next_oid, struct object_id *resu
starts_with(line, "Binary files")) {
diff_is_binary = 1;
before = 0;
- the_hash_algo->update_fn(&ctx, pre_oid_str,
- strlen(pre_oid_str));
- the_hash_algo->update_fn(&ctx, post_oid_str,
- strlen(post_oid_str));
+ git_hash_update(&ctx, pre_oid_str,
+ strlen(pre_oid_str));
+ git_hash_update(&ctx, post_oid_str,
+ strlen(post_oid_str));
if (stable)
flush_one_hunk(result, &ctx);
continue;
@@ -165,7 +165,7 @@ static size_t get_one_patchid(struct object_id *next_oid, struct object_id *resu
/* Add line to hash algo (possibly removing whitespace) */
len = verbatim ? strlen(line) : remove_space(line);
patchlen += len;
- the_hash_algo->update_fn(&ctx, line, len);
+ git_hash_update(&ctx, line, len);
}
if (!found_next)
diff --git a/builtin/push.c b/builtin/push.c
index 90de3746b5..92d530e5c4 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -78,7 +78,7 @@ static void refspec_append_mapped(struct refspec *refspec, const char *ref,
.src = matched->name,
};
- if (!query_refspecs(&remote->push, &query) && query.dst) {
+ if (!refspec_find_match(&remote->push, &query) && query.dst) {
refspec_appendf(refspec, "%s%s:%s",
query.force ? "+" : "",
query.src, query.dst);
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index 0fb0266cfd..129305700c 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -566,14 +566,14 @@ static void hmac_hash(unsigned char *out,
unsigned char k_ipad[GIT_MAX_BLKSZ];
unsigned char k_opad[GIT_MAX_BLKSZ];
int i;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
/* RFC 2104 2. (1) */
memset(key, '\0', GIT_MAX_BLKSZ);
if (the_hash_algo->blksz < key_len) {
the_hash_algo->init_fn(&ctx);
- the_hash_algo->update_fn(&ctx, key_in, key_len);
- the_hash_algo->final_fn(key, &ctx);
+ git_hash_update(&ctx, key_in, key_len);
+ git_hash_final(key, &ctx);
} else {
memcpy(key, key_in, key_len);
}
@@ -586,15 +586,15 @@ static void hmac_hash(unsigned char *out,
/* RFC 2104 2. (3) & (4) */
the_hash_algo->init_fn(&ctx);
- the_hash_algo->update_fn(&ctx, k_ipad, sizeof(k_ipad));
- the_hash_algo->update_fn(&ctx, text, text_len);
- the_hash_algo->final_fn(out, &ctx);
+ git_hash_update(&ctx, k_ipad, sizeof(k_ipad));
+ git_hash_update(&ctx, text, text_len);
+ git_hash_final(out, &ctx);
/* RFC 2104 2. (6) & (7) */
the_hash_algo->init_fn(&ctx);
- the_hash_algo->update_fn(&ctx, k_opad, sizeof(k_opad));
- the_hash_algo->update_fn(&ctx, out, the_hash_algo->rawsz);
- the_hash_algo->final_fn(out, &ctx);
+ git_hash_update(&ctx, k_opad, sizeof(k_opad));
+ git_hash_update(&ctx, out, the_hash_algo->rawsz);
+ git_hash_final(out, &ctx);
}
static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp)
@@ -2304,7 +2304,7 @@ static const char *unpack(int err_fd, struct shallow_info *si)
if (status)
return "index-pack fork failed";
- lockfile = index_pack_lockfile(child.out, NULL);
+ lockfile = index_pack_lockfile(the_repository, child.out, NULL);
if (lockfile) {
pack_lockfile = register_tempfile(lockfile);
free(lockfile);
diff --git a/builtin/remote.c b/builtin/remote.c
index 315cbb88e6..816d482340 100644
--- a/builtin/remote.c
+++ b/builtin/remote.c
@@ -383,7 +383,7 @@ static int get_ref_states(const struct ref *remote_refs, struct ref_states *stat
states->remote->fetch.items[i].raw);
for (ref = fetch_map; ref; ref = ref->next) {
- if (omit_name_by_refspec(ref->name, &states->remote->fetch))
+ if (refname_matches_negative_refspec_item(ref->name, &states->remote->fetch))
string_list_append(&states->skipped, abbrev_branch(ref->name));
else if (!ref->peer_ref || !refs_ref_exists(get_main_ref_store(the_repository), ref->peer_ref->name))
string_list_append(&states->new_refs, abbrev_branch(ref->name));
@@ -642,10 +642,12 @@ static int migrate_file(struct remote *remote)
strbuf_addf(&buf, "remote.%s.fetch", remote->name);
for (i = 0; i < remote->fetch.nr; i++)
git_config_set_multivar(buf.buf, remote->fetch.items[i].raw, "^$", 0);
+#ifndef WITH_BREAKING_CHANGES
if (remote->origin == REMOTE_REMOTES)
unlink_or_warn(git_path("remotes/%s", remote->name));
else if (remote->origin == REMOTE_BRANCHES)
unlink_or_warn(git_path("branches/%s", remote->name));
+#endif /* WITH_BREAKING_CHANGES */
strbuf_release(&buf);
return 0;
diff --git a/builtin/repack.c b/builtin/repack.c
index 81d13630ea..75e3752353 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -41,7 +41,9 @@ static int run_update_server_info = 1;
static char *packdir, *packtmp_name, *packtmp;
static const char *const git_repack_usage[] = {
- N_("git repack [<options>]"),
+ N_("git repack [-a] [-A] [-d] [-f] [-F] [-l] [-n] [-q] [-b] [-m]\n"
+ "[--window=<n>] [--depth=<n>] [--threads=<n>] [--keep-pack=<pack-name>]\n"
+ "[--write-midx] [--name-hash-version=<n>]"),
NULL
};
@@ -60,6 +62,7 @@ struct pack_objects_args {
int no_reuse_object;
int quiet;
int local;
+ int name_hash_version;
struct list_objects_filter_options filter_options;
};
@@ -308,6 +311,8 @@ static void prepare_pack_objects(struct child_process *cmd,
strvec_pushf(&cmd->args, "--no-reuse-delta");
if (args->no_reuse_object)
strvec_pushf(&cmd->args, "--no-reuse-object");
+ if (args->name_hash_version)
+ strvec_pushf(&cmd->args, "--name-hash-version=%d", args->name_hash_version);
if (args->local)
strvec_push(&cmd->args, "--local");
if (args->quiet)
@@ -1205,6 +1210,8 @@ int cmd_repack(int argc,
N_("pass --no-reuse-delta to git-pack-objects")),
OPT_BOOL('F', NULL, &po_args.no_reuse_object,
N_("pass --no-reuse-object to git-pack-objects")),
+ OPT_INTEGER(0, "name-hash-version", &po_args.name_hash_version,
+ N_("specify the name hash version to use for grouping similar objects by path")),
OPT_NEGBIT('n', NULL, &run_update_server_info,
N_("do not run git-update-server-info"), 1),
OPT__QUIET(&po_args.quiet, N_("be quiet")),
@@ -1370,9 +1377,12 @@ int cmd_repack(int argc,
"--unpack-unreachable");
} else if (keep_unreachable) {
strvec_push(&cmd.args, "--keep-unreachable");
- strvec_push(&cmd.args, "--pack-loose-unreachable");
}
}
+
+ if (keep_unreachable && delete_redundant &&
+ !(pack_everything & PACK_CRUFT))
+ strvec_push(&cmd.args, "--pack-loose-unreachable");
} else if (geometry.split_factor) {
strvec_push(&cmd.args, "--stdin-packs");
strvec_push(&cmd.args, "--unpacked");
diff --git a/builtin/replay.c b/builtin/replay.c
index 1afc6d1ee0..032c172b65 100644
--- a/builtin/replay.c
+++ b/builtin/replay.c
@@ -163,9 +163,10 @@ static void determine_replay_mode(struct rev_cmdline_info *cmd_info,
get_ref_information(cmd_info, &rinfo);
if (!rinfo.positive_refexprs)
die(_("need some commits to replay"));
- if (onto_name && *advance_name)
- die(_("--onto and --advance are incompatible"));
- else if (onto_name) {
+
+ die_for_incompatible_opt2(!!onto_name, "--onto",
+ !!*advance_name, "--advance");
+ if (onto_name) {
*onto = peel_committish(onto_name);
if (rinfo.positive_refexprs <
strset_get_size(&rinfo.positive_refs))
diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c
index f6b9825fb0..8383bcf404 100644
--- a/builtin/unpack-objects.c
+++ b/builtin/unpack-objects.c
@@ -28,7 +28,7 @@ static unsigned char buffer[4096];
static unsigned int offset, len;
static off_t consumed_bytes;
static off_t max_input_size;
-static git_hash_ctx ctx;
+static struct git_hash_ctx ctx;
static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT;
static struct progress *progress;
@@ -70,7 +70,7 @@ static void *fill(int min)
if (min > sizeof(buffer))
die("cannot fill %d bytes", min);
if (offset) {
- the_hash_algo->update_fn(&ctx, buffer, offset);
+ git_hash_update(&ctx, buffer, offset);
memmove(buffer, buffer + offset, len);
offset = 0;
}
@@ -614,7 +614,7 @@ int cmd_unpack_objects(int argc,
{
int i;
struct object_id oid;
- git_hash_ctx tmp_ctx;
+ struct git_hash_ctx tmp_ctx;
disable_replace_refs();
@@ -667,10 +667,9 @@ int cmd_unpack_objects(int argc,
}
the_hash_algo->init_fn(&ctx);
unpack_all();
- the_hash_algo->update_fn(&ctx, buffer, offset);
- the_hash_algo->init_fn(&tmp_ctx);
- the_hash_algo->clone_fn(&tmp_ctx, &ctx);
- the_hash_algo->final_oid_fn(&oid, &tmp_ctx);
+ git_hash_update(&ctx, buffer, offset);
+ git_hash_clone(&tmp_ctx, &ctx);
+ git_hash_final_oid(&oid, &tmp_ctx);
if (strict) {
write_rest();
if (fsck_finish(&fsck_options))
diff --git a/bulk-checkin.c b/bulk-checkin.c
index 5044cb7fa0..20f2da67b9 100644
--- a/bulk-checkin.c
+++ b/bulk-checkin.c
@@ -44,8 +44,9 @@ static void finish_tmp_packfile(struct strbuf *basename,
{
char *idx_tmp_name = NULL;
- stage_tmp_packfiles(basename, pack_tmp_name, written_list, nr_written,
- NULL, pack_idx_opts, hash, &idx_tmp_name);
+ stage_tmp_packfiles(the_hash_algo, basename, pack_tmp_name,
+ written_list, nr_written, NULL, pack_idx_opts, hash,
+ &idx_tmp_name);
rename_tmp_packfile_idx(basename, &idx_tmp_name);
free(idx_tmp_name);
@@ -70,7 +71,7 @@ static void flush_bulk_checkin_packfile(struct bulk_checkin_packfile *state)
CSUM_HASH_IN_STREAM | CSUM_FSYNC | CSUM_CLOSE);
} else {
int fd = finalize_hashfile(state->f, hash, FSYNC_COMPONENT_PACK, 0);
- fixup_pack_header_footer(fd, hash, state->pack_tmp_name,
+ fixup_pack_header_footer(the_hash_algo, fd, hash, state->pack_tmp_name,
state->nr_written, hash,
state->offset);
close(fd);
@@ -161,7 +162,7 @@ static int already_written(struct bulk_checkin_packfile *state, struct object_id
* with a new pack.
*/
static int stream_blob_to_pack(struct bulk_checkin_packfile *state,
- git_hash_ctx *ctx, off_t *already_hashed_to,
+ struct git_hash_ctx *ctx, off_t *already_hashed_to,
int fd, size_t size, const char *path,
unsigned flags)
{
@@ -194,7 +195,7 @@ static int stream_blob_to_pack(struct bulk_checkin_packfile *state,
if (rsize < hsize)
hsize = rsize;
if (hsize)
- the_hash_algo->update_fn(ctx, ibuf, hsize);
+ git_hash_update(ctx, ibuf, hsize);
*already_hashed_to = offset;
}
s.next_in = ibuf;
@@ -258,10 +259,10 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state,
const char *path, unsigned flags)
{
off_t seekback, already_hashed_to;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
unsigned char obuf[16384];
unsigned header_len;
- struct hashfile_checkpoint checkpoint = {0};
+ struct hashfile_checkpoint checkpoint;
struct pack_idx_entry *idx = NULL;
seekback = lseek(fd, 0, SEEK_CUR);
@@ -271,13 +272,16 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state,
header_len = format_object_header((char *)obuf, sizeof(obuf),
OBJ_BLOB, size);
the_hash_algo->init_fn(&ctx);
- the_hash_algo->update_fn(&ctx, obuf, header_len);
- the_hash_algo->unsafe_init_fn(&checkpoint.ctx);
+ git_hash_update(&ctx, obuf, header_len);
/* Note: idx is non-NULL when we are writing */
- if ((flags & HASH_WRITE_OBJECT) != 0)
+ if ((flags & HASH_WRITE_OBJECT) != 0) {
CALLOC_ARRAY(idx, 1);
+ prepare_to_stream(state, flags);
+ hashfile_checkpoint_init(state->f, &checkpoint);
+ }
+
already_hashed_to = 0;
while (1) {
@@ -303,7 +307,7 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state,
if (lseek(fd, seekback, SEEK_SET) == (off_t) -1)
return error("cannot seek back");
}
- the_hash_algo->final_oid_fn(result_oid, &ctx);
+ git_hash_final_oid(result_oid, &ctx);
if (!idx)
return 0;
diff --git a/bundle.c b/bundle.c
index f18f98fec9..d7ad690843 100644
--- a/bundle.c
+++ b/bundle.c
@@ -607,8 +607,10 @@ int unbundle(struct repository *r, struct bundle_header *header,
if (!opts)
opts = &opts_fallback;
- if (verify_bundle(r, header, opts->flags))
+ if (verify_bundle(r, header, opts->flags)) {
+ close(bundle_fd);
return -1;
+ }
strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
diff --git a/bundle.h b/bundle.h
index a80aa8ad9b..d664b2f2d6 100644
--- a/bundle.h
+++ b/bundle.h
@@ -62,6 +62,8 @@ struct unbundle_opts {
*
* Before unbundling, this method will call verify_bundle() with 'flags'
* provided in 'opts'.
+ *
+ * Note that the `bundle_fd` will be closed as part of the operation.
*/
int unbundle(struct repository *r, struct bundle_header *header,
int bundle_fd, struct strvec *extra_index_pack_args,
diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh
index d1cb9fa878..332ba96003 100755
--- a/ci/install-dependencies.sh
+++ b/ci/install-dependencies.sh
@@ -24,16 +24,16 @@ fi
case "$distro" in
alpine-*)
- apk add --update shadow sudo build-base curl-dev openssl-dev expat-dev gettext \
- pcre2-dev python3 musl-libintl perl-utils ncurses \
+ apk add --update shadow sudo meson ninja-build gcc libc-dev curl-dev openssl-dev expat-dev gettext \
+ zlib-ng-dev pcre2-dev python3 musl-libintl perl-utils ncurses \
apache2 apache2-http2 apache2-proxy apache2-ssl apache2-webdav apr-util-dbd_sqlite3 \
bash cvs gnupg perl-cgi perl-dbd-sqlite perl-io-tty >/dev/null
;;
fedora-*|almalinux-*)
dnf -yq update >/dev/null &&
- dnf -yq install make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null
+ dnf -yq install shadow-utils sudo make gcc findutils diffutils perl python3 gettext zlib-devel expat-devel openssl-devel curl-devel pcre2-devel >/dev/null
;;
-ubuntu-*|ubuntu32-*|debian-*)
+ubuntu-*|i386/ubuntu-*|debian-*)
# Required so that apt doesn't wait for user input on certain packages.
export DEBIAN_FRONTEND=noninteractive
@@ -42,7 +42,7 @@ ubuntu-*|ubuntu32-*|debian-*)
SVN='libsvn-perl subversion'
LANGUAGES='language-pack-is'
;;
- ubuntu32-*)
+ i386/ubuntu-*)
SVN=
LANGUAGES='language-pack-is'
;;
diff --git a/ci/lib.sh b/ci/lib.sh
index 8885ee3c3f..028fea0e7b 100755
--- a/ci/lib.sh
+++ b/ci/lib.sh
@@ -206,26 +206,7 @@ export TERM=${TERM:-dumb}
# Clear MAKEFLAGS that may come from the outside world.
export MAKEFLAGS=
-if test -n "$SYSTEM_COLLECTIONURI" || test -n "$SYSTEM_TASKDEFINITIONSURI"
-then
- CI_TYPE=azure-pipelines
- # We are running in Azure Pipelines
- CI_BRANCH="$BUILD_SOURCEBRANCH"
- CI_COMMIT="$BUILD_SOURCEVERSION"
- CI_JOB_ID="$BUILD_BUILDID"
- CI_JOB_NUMBER="$BUILD_BUILDNUMBER"
- CI_OS_NAME="$(echo "$AGENT_OS" | tr A-Z a-z)"
- test darwin != "$CI_OS_NAME" || CI_OS_NAME=osx
- CI_REPO_SLUG="$(expr "$BUILD_REPOSITORY_URI" : '.*/\([^/]*/[^/]*\)$')"
- CC="${CC:-gcc}"
-
- # use a subdirectory of the cache dir (because the file share is shared
- # among *all* phases)
- cache_dir="$HOME/test-cache/$SYSTEM_PHASENAME"
-
- GIT_TEST_OPTS="--write-junit-xml"
- JOBS=10
-elif test true = "$GITHUB_ACTIONS"
+if test true = "$GITHUB_ACTIONS"
then
CI_TYPE=github-actions
CI_BRANCH="$GITHUB_REF"
@@ -246,6 +227,8 @@ then
GIT_TEST_OPTS="--github-workflow-markup"
JOBS=10
+
+ distro=$(echo "$CI_JOB_IMAGE" | tr : -)
elif test true = "$GITLAB_CI"
then
CI_TYPE=gitlab-ci
@@ -267,7 +250,7 @@ then
CI_OS_NAME=osx
JOBS=$(nproc)
;;
- *,alpine:*|*,fedora:*|*,ubuntu:*)
+ *,alpine:*|*,fedora:*|*,ubuntu:*|*,i386/ubuntu:*)
CI_OS_NAME=linux
JOBS=$(nproc)
;;
@@ -329,11 +312,6 @@ export SKIP_DASHED_BUILT_INS=YesPlease
case "$distro" in
ubuntu-*)
- if test "$jobname" = "linux-gcc-default"
- then
- break
- fi
-
# Python 2 is end of life, and Ubuntu 23.04 and newer don't actually
# have it anymore. We thus only test with Python 2 on older LTS
# releases.
@@ -345,14 +323,7 @@ ubuntu-*)
fi
MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/$PYTHON_PACKAGE"
- case "$distro" in
- ubuntu-16.04)
- # Apache is too old for HTTP/2.
- ;;
- *)
- export GIT_TEST_HTTPD=true
- ;;
- esac
+ export GIT_TEST_HTTPD=true
# The Linux build installs the defined dependency versions below.
# The OS X build installs much more recent versions, whichever
@@ -378,10 +349,7 @@ linux32)
CC=gcc
;;
linux-musl)
- CC=gcc
- MAKEFLAGS="$MAKEFLAGS PYTHON_PATH=/usr/bin/python3 USE_LIBPCRE2=Yes"
- MAKEFLAGS="$MAKEFLAGS NO_REGEX=Yes ICONV_OMITS_BOM=Yes"
- MAKEFLAGS="$MAKEFLAGS GIT_TEST_UTF8_LOCALE=C.UTF-8"
+ MESONFLAGS="$MESONFLAGS -DGIT_TEST_UTF8_LOCALE=C.UTF-8"
;;
linux-leaks|linux-reftable-leaks)
export SANITIZE=leak
diff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh
index 655687dd82..dc910e5160 100755
--- a/ci/print-test-failures.sh
+++ b/ci/print-test-failures.sh
@@ -39,11 +39,6 @@ do
test_name="${test_name##*/}"
trash_dir="trash directory.$test_name"
case "$CI_TYPE" in
- azure-pipelines)
- mkdir -p failed-test-artifacts
- mv "$trash_dir" failed-test-artifacts
- continue
- ;;
github-actions)
mkdir -p failed-test-artifacts
echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:t}/failed-test-artifacts" >>$GITHUB_ENV
diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh
index 76667a1277..1c69846723 100755
--- a/ci/run-build-and-tests.sh
+++ b/ci/run-build-and-tests.sh
@@ -13,8 +13,9 @@ esac
run_tests=t
case "$jobname" in
-linux-gcc)
+linux-breaking-changes)
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+ export WITH_BREAKING_CHANGES=YesPlease
;;
linux-TEST-vars)
export OPENSSL_SHA1_UNSAFE=YesPlease
@@ -52,8 +53,11 @@ esac
case "$jobname" in
*-meson)
group "Configure" meson setup build . \
+ --fatal-meson-warnings \
--warnlevel 2 --werror \
- --wrap-mode nofallback
+ --wrap-mode nofallback \
+ -Dfuzzers=true \
+ $MESONFLAGS
group "Build" meson compile -C build --
if test -n "$run_tests"
then
diff --git a/combine-diff.c b/combine-diff.c
index 641bc92dbd..9527f3160d 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -47,31 +47,20 @@ static struct combine_diff_path *intersect_paths(
if (!n) {
for (i = 0; i < q->nr; i++) {
- int len;
- const char *path;
if (diff_unmodified_pair(q->queue[i]))
continue;
- path = q->queue[i]->two->path;
- len = strlen(path);
- p = xmalloc(combine_diff_path_size(num_parent, len));
- p->path = (char *) &(p->parent[num_parent]);
- memcpy(p->path, path, len);
- p->path[len] = 0;
- p->next = NULL;
- memset(p->parent, 0,
- sizeof(p->parent[0]) * num_parent);
-
- oidcpy(&p->oid, &q->queue[i]->two->oid);
- p->mode = q->queue[i]->two->mode;
+ p = combine_diff_path_new(q->queue[i]->two->path,
+ strlen(q->queue[i]->two->path),
+ q->queue[i]->two->mode,
+ &q->queue[i]->two->oid,
+ num_parent);
oidcpy(&p->parent[n].oid, &q->queue[i]->one->oid);
p->parent[n].mode = q->queue[i]->one->mode;
p->parent[n].status = q->queue[i]->status;
if (combined_all_paths &&
filename_changed(p->parent[n].status)) {
- strbuf_init(&p->parent[n].path, 0);
- strbuf_addstr(&p->parent[n].path,
- q->queue[i]->one->path);
+ p->parent[n].path = xstrdup(q->queue[i]->one->path);
}
*tail = p;
tail = &p->next;
@@ -92,9 +81,7 @@ static struct combine_diff_path *intersect_paths(
/* p->path not in q->queue[]; drop it */
*tail = p->next;
for (j = 0; j < num_parent; j++)
- if (combined_all_paths &&
- filename_changed(p->parent[j].status))
- strbuf_release(&p->parent[j].path);
+ free(p->parent[j].path);
free(p);
continue;
}
@@ -110,8 +97,7 @@ static struct combine_diff_path *intersect_paths(
p->parent[n].status = q->queue[i]->status;
if (combined_all_paths &&
filename_changed(p->parent[n].status))
- strbuf_addstr(&p->parent[n].path,
- q->queue[i]->one->path);
+ p->parent[n].path = xstrdup(q->queue[i]->one->path);
tail = &p->next;
i++;
@@ -996,8 +982,9 @@ static void show_combined_header(struct combine_diff_path *elem,
if (rev->combined_all_paths) {
for (i = 0; i < num_parent; i++) {
- char *path = filename_changed(elem->parent[i].status)
- ? elem->parent[i].path.buf : elem->path;
+ const char *path = elem->parent[i].path ?
+ elem->parent[i].path :
+ elem->path;
if (elem->parent[i].status == DIFF_STATUS_ADDED)
dump_quoted_path("--- ", "", "/dev/null",
line_prefix, c_meta, c_reset);
@@ -1278,12 +1265,10 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, struct re
for (i = 0; i < num_parent; i++)
if (rev->combined_all_paths) {
- if (filename_changed(p->parent[i].status))
- write_name_quoted(p->parent[i].path.buf, stdout,
- inter_name_termination);
- else
- write_name_quoted(p->path, stdout,
- inter_name_termination);
+ const char *path = p->parent[i].path ?
+ p->parent[i].path :
+ p->path;
+ write_name_quoted(path, stdout, inter_name_termination);
}
write_name_quoted(p->path, stdout, line_termination);
}
@@ -1443,22 +1428,19 @@ static struct combine_diff_path *find_paths_multitree(
{
int i, nparent = parents->nr;
const struct object_id **parents_oid;
- struct combine_diff_path paths_head;
+ struct combine_diff_path *paths;
struct strbuf base;
ALLOC_ARRAY(parents_oid, nparent);
for (i = 0; i < nparent; i++)
parents_oid[i] = &parents->oid[i];
- /* fake list head, so worker can assume it is non-NULL */
- paths_head.next = NULL;
-
strbuf_init(&base, PATH_MAX);
- diff_tree_paths(&paths_head, oid, parents_oid, nparent, &base, opt);
+ paths = diff_tree_paths(oid, parents_oid, nparent, &base, opt);
strbuf_release(&base);
free(parents_oid);
- return paths_head.next;
+ return paths;
}
static int match_objfind(struct combine_diff_path *path,
@@ -1645,9 +1627,7 @@ void diff_tree_combined(const struct object_id *oid,
struct combine_diff_path *tmp = paths;
paths = paths->next;
for (i = 0; i < num_parent; i++)
- if (rev->combined_all_paths &&
- filename_changed(tmp->parent[i].status))
- strbuf_release(&tmp->parent[i].path);
+ free(tmp->parent[i].path);
free(tmp);
}
@@ -1667,3 +1647,25 @@ void diff_tree_combined_merge(const struct commit *commit,
diff_tree_combined(&commit->object.oid, &parents, rev);
oid_array_clear(&parents);
}
+
+struct combine_diff_path *combine_diff_path_new(const char *path,
+ size_t path_len,
+ unsigned int mode,
+ const struct object_id *oid,
+ size_t num_parents)
+{
+ struct combine_diff_path *p;
+ size_t parent_len = st_mult(sizeof(p->parent[0]), num_parents);
+
+ p = xmalloc(st_add4(sizeof(*p), path_len, 1, parent_len));
+ p->path = (char *)&(p->parent[num_parents]);
+ memcpy(p->path, path, path_len);
+ p->path[path_len] = 0;
+ p->next = NULL;
+ p->mode = mode;
+ oidcpy(&p->oid, oid);
+
+ memset(p->parent, 0, parent_len);
+
+ return p;
+}
diff --git a/common-exit.c b/common-exit.c
new file mode 100644
index 0000000000..1aaa538be3
--- /dev/null
+++ b/common-exit.c
@@ -0,0 +1,26 @@
+#include "git-compat-util.h"
+#include "trace2.h"
+
+static void check_bug_if_BUG(void)
+{
+ if (!bug_called_must_BUG)
+ return;
+ BUG("on exit(): had bug() call(s) in this process without explicit BUG_if_bug()");
+}
+
+/* We wrap exit() to call common_exit() in git-compat-util.h */
+int common_exit(const char *file, int line, int code)
+{
+ /*
+ * For non-POSIX systems: Take the lowest 8 bits of the "code"
+ * to e.g. turn -1 into 255. On a POSIX system this is
+ * redundant, see exit(3) and wait(2), but as it doesn't harm
+ * anything there we don't need to guard this with an "ifdef".
+ */
+ code &= 0xff;
+
+ check_bug_if_BUG();
+ trace2_cmd_exit_fl(file, line, code);
+
+ return code;
+}
diff --git a/common-init.c b/common-init.c
new file mode 100644
index 0000000000..5cc73f058c
--- /dev/null
+++ b/common-init.c
@@ -0,0 +1,63 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
+#include "git-compat-util.h"
+#include "common-init.h"
+#include "exec-cmd.h"
+#include "gettext.h"
+#include "attr.h"
+#include "repository.h"
+#include "setup.h"
+#include "strbuf.h"
+#include "trace2.h"
+
+/*
+ * Many parts of Git have subprograms communicate via pipe, expect the
+ * upstream of a pipe to die with SIGPIPE when the downstream of a
+ * pipe does not need to read all that is written. Some third-party
+ * programs that ignore or block SIGPIPE for their own reason forget
+ * to restore SIGPIPE handling to the default before spawning Git and
+ * break this carefully orchestrated machinery.
+ *
+ * Restore the way SIGPIPE is handled to default, which is what we
+ * expect.
+ */
+static void restore_sigpipe_to_default(void)
+{
+ sigset_t unblock;
+
+ sigemptyset(&unblock);
+ sigaddset(&unblock, SIGPIPE);
+ sigprocmask(SIG_UNBLOCK, &unblock, NULL);
+ signal(SIGPIPE, SIG_DFL);
+}
+
+void init_git(const char **argv)
+{
+ struct strbuf tmp = STRBUF_INIT;
+
+ trace2_initialize_clock();
+
+ /*
+ * Always open file descriptors 0/1/2 to avoid clobbering files
+ * in die(). It also avoids messing up when the pipes are dup'ed
+ * onto stdin/stdout/stderr in the child processes we spawn.
+ */
+ sanitize_stdfds();
+ restore_sigpipe_to_default();
+
+ git_resolve_executable_dir(argv[0]);
+
+ setlocale(LC_CTYPE, "");
+ git_setup_gettext();
+
+ initialize_repository(the_repository);
+
+ attr_start();
+
+ trace2_initialize();
+ trace2_cmd_start(argv);
+ trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
+
+ if (!strbuf_getcwd(&tmp))
+ tmp_original_cwd = strbuf_detach(&tmp, NULL);
+}
diff --git a/common-init.h b/common-init.h
new file mode 100644
index 0000000000..3e6db20cae
--- /dev/null
+++ b/common-init.h
@@ -0,0 +1,6 @@
+#ifndef COMMON_INIT_H
+#define COMMON_INIT_H
+
+void init_git(const char **argv);
+
+#endif /* COMMON_INIT_H */
diff --git a/common-main.c b/common-main.c
index 8e68ac9e42..6b7ab077b0 100644
--- a/common-main.c
+++ b/common-main.c
@@ -1,92 +1,13 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
-#include "exec-cmd.h"
-#include "gettext.h"
-#include "attr.h"
-#include "repository.h"
-#include "setup.h"
-#include "strbuf.h"
-#include "trace2.h"
-
-/*
- * Many parts of Git have subprograms communicate via pipe, expect the
- * upstream of a pipe to die with SIGPIPE when the downstream of a
- * pipe does not need to read all that is written. Some third-party
- * programs that ignore or block SIGPIPE for their own reason forget
- * to restore SIGPIPE handling to the default before spawning Git and
- * break this carefully orchestrated machinery.
- *
- * Restore the way SIGPIPE is handled to default, which is what we
- * expect.
- */
-static void restore_sigpipe_to_default(void)
-{
- sigset_t unblock;
-
- sigemptyset(&unblock);
- sigaddset(&unblock, SIGPIPE);
- sigprocmask(SIG_UNBLOCK, &unblock, NULL);
- signal(SIGPIPE, SIG_DFL);
-}
+#include "common-init.h"
int main(int argc, const char **argv)
{
int result;
- struct strbuf tmp = STRBUF_INIT;
-
- trace2_initialize_clock();
-
- /*
- * Always open file descriptors 0/1/2 to avoid clobbering files
- * in die(). It also avoids messing up when the pipes are dup'ed
- * onto stdin/stdout/stderr in the child processes we spawn.
- */
- sanitize_stdfds();
- restore_sigpipe_to_default();
-
- git_resolve_executable_dir(argv[0]);
-
- setlocale(LC_CTYPE, "");
- git_setup_gettext();
-
- initialize_repository(the_repository);
-
- attr_start();
-
- trace2_initialize();
- trace2_cmd_start(argv);
- trace2_collect_process_info(TRACE2_PROCESS_INFO_STARTUP);
-
- if (!strbuf_getcwd(&tmp))
- tmp_original_cwd = strbuf_detach(&tmp, NULL);
+ init_git(argv);
result = cmd_main(argc, argv);
/* Not exit(3), but a wrapper calling our common_exit() */
exit(result);
}
-
-static void check_bug_if_BUG(void)
-{
- if (!bug_called_must_BUG)
- return;
- BUG("on exit(): had bug() call(s) in this process without explicit BUG_if_bug()");
-}
-
-/* We wrap exit() to call common_exit() in git-compat-util.h */
-int common_exit(const char *file, int line, int code)
-{
- /*
- * For non-POSIX systems: Take the lowest 8 bits of the "code"
- * to e.g. turn -1 into 255. On a POSIX system this is
- * redundant, see exit(3) and wait(2), but as it doesn't harm
- * anything there we don't need to guard this with an "ifdef".
- */
- code &= 0xff;
-
- check_bug_if_BUG();
- trace2_cmd_exit_fl(file, line, code);
-
- return code;
-}
diff --git a/compat/zlib-compat.h b/compat/zlib-compat.h
new file mode 100644
index 0000000000..0c60e3af33
--- /dev/null
+++ b/compat/zlib-compat.h
@@ -0,0 +1,53 @@
+#ifndef COMPAT_ZLIB_H
+#define COMPAT_ZLIB_H
+
+#ifdef HAVE_ZLIB_NG
+# include <zlib-ng.h>
+
+# define z_stream zng_stream
+#define gz_header_s zng_gz_header_s
+
+# define crc32(crc, buf, len) zng_crc32(crc, buf, len)
+
+# define inflate(strm, bits) zng_inflate(strm, bits)
+# define inflateEnd(strm) zng_inflateEnd(strm)
+# define inflateInit(strm) zng_inflateInit(strm)
+# define inflateInit2(strm, bits) zng_inflateInit2(strm, bits)
+# define inflateReset(strm) zng_inflateReset(strm)
+
+# define deflate(strm, flush) zng_deflate(strm, flush)
+# define deflateBound(strm, source_len) zng_deflateBound(strm, source_len)
+# define deflateEnd(strm) zng_deflateEnd(strm)
+# define deflateInit(strm, level) zng_deflateInit(strm, level)
+# define deflateInit2(stream, level, method, window_bits, mem_level, strategy) zng_deflateInit2(stream, level, method, window_bits, mem_level, strategy)
+# define deflateReset(strm) zng_deflateReset(strm)
+# define deflateSetHeader(strm, head) zng_deflateSetHeader(strm, head)
+
+#else
+# include <zlib.h>
+
+# if defined(NO_DEFLATE_BOUND) || ZLIB_VERNUM < 0x1200
+# define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
+# endif
+
+/*
+ * zlib only gained support for setting up the gzip header in v1.2.2.1. In
+ * Git we only set the header to make archives reproducible across different
+ * operating systems, so it's fine to simply make this a no-op when using a
+ * zlib version that doesn't support this yet.
+ */
+# if ZLIB_VERNUM < 0x1221
+struct gz_header_s {
+ int os;
+};
+
+static int deflateSetHeader(z_streamp strm, struct gz_header_s *head)
+{
+ (void)(strm);
+ (void)(head);
+ return Z_OK;
+}
+# endif
+#endif /* HAVE_ZLIB_NG */
+
+#endif /* COMPAT_ZLIB_H */
diff --git a/compat/zlib-uncompress2.c b/compat/zlib-uncompress2.c
deleted file mode 100644
index 77a1b08048..0000000000
--- a/compat/zlib-uncompress2.c
+++ /dev/null
@@ -1,96 +0,0 @@
-#include "git-compat-util.h"
-
-#if ZLIB_VERNUM < 0x1290
-/* taken from zlib's uncompr.c
-
- commit cacf7f1d4e3d44d871b605da3b647f07d718623f
- Author: Mark Adler <madler@alumni.caltech.edu>
- Date: Sun Jan 15 09:18:46 2017 -0800
-
- zlib 1.2.11
-
-*/
-
-/*
- * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler
- * For conditions of distribution and use, see copyright notice in zlib.h
- */
-
-/* clang-format off */
-
-/* ===========================================================================
- Decompresses the source buffer into the destination buffer. *sourceLen is
- the byte length of the source buffer. Upon entry, *destLen is the total size
- of the destination buffer, which must be large enough to hold the entire
- uncompressed data. (The size of the uncompressed data must have been saved
- previously by the compressor and transmitted to the decompressor by some
- mechanism outside the scope of this compression library.) Upon exit,
- *destLen is the size of the decompressed data and *sourceLen is the number
- of source bytes consumed. Upon return, source + *sourceLen points to the
- first unused input byte.
-
- uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough
- memory, Z_BUF_ERROR if there was not enough room in the output buffer, or
- Z_DATA_ERROR if the input data was corrupted, including if the input data is
- an incomplete zlib stream.
-*/
-int ZEXPORT uncompress2 (
- Bytef *dest,
- uLongf *destLen,
- const Bytef *source,
- uLong *sourceLen) {
- z_stream stream;
- int err;
- const uInt max = (uInt)-1;
- uLong len, left;
- Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */
-
- len = *sourceLen;
- if (*destLen) {
- left = *destLen;
- *destLen = 0;
- }
- else {
- left = 1;
- dest = buf;
- }
-
- stream.next_in = (z_const Bytef *)source;
- stream.avail_in = 0;
- stream.zalloc = (alloc_func)0;
- stream.zfree = (free_func)0;
- stream.opaque = (voidpf)0;
-
- err = inflateInit(&stream);
- if (err != Z_OK) return err;
-
- stream.next_out = dest;
- stream.avail_out = 0;
-
- do {
- if (stream.avail_out == 0) {
- stream.avail_out = left > (uLong)max ? max : (uInt)left;
- left -= stream.avail_out;
- }
- if (stream.avail_in == 0) {
- stream.avail_in = len > (uLong)max ? max : (uInt)len;
- len -= stream.avail_in;
- }
- err = inflate(&stream, Z_NO_FLUSH);
- } while (err == Z_OK);
-
- *sourceLen -= len + stream.avail_in;
- if (dest != buf)
- *destLen = stream.total_out;
- else if (stream.total_out && err == Z_BUF_ERROR)
- left = 1;
-
- inflateEnd(&stream);
- return err == Z_STREAM_END ? Z_OK :
- err == Z_NEED_DICT ? Z_DATA_ERROR :
- err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR :
- err;
-}
-#else
-static void *dummy_variable = &dummy_variable;
-#endif
diff --git a/config.c b/config.c
index 50f2d17b39..36f76fafe5 100644
--- a/config.c
+++ b/config.c
@@ -19,6 +19,7 @@
#include "convert.h"
#include "environment.h"
#include "gettext.h"
+#include "git-zlib.h"
#include "ident.h"
#include "repository.h"
#include "lockfile.h"
diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt
index 10dc54fdcb..3179e7ff7a 100644
--- a/contrib/buildsystems/CMakeLists.txt
+++ b/contrib/buildsystems/CMakeLists.txt
@@ -1205,6 +1205,7 @@ string(REPLACE "@TEST_OUTPUT_DIRECTORY@" "" git_build_options "${git_build_optio
string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}")
string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}")
string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}")
+string(REPLACE "@WITH_BREAKING_CHANGES@" "" git_build_options "${git_build_options}")
string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}")
if(USE_VCPKG)
string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
diff --git a/contrib/libgit-rs/Cargo.lock b/contrib/libgit-rs/Cargo.lock
new file mode 100644
index 0000000000..a30c7c8d33
--- /dev/null
+++ b/contrib/libgit-rs/Cargo.lock
@@ -0,0 +1,77 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "cc"
+version = "1.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.158"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
+
+[[package]]
+name = "libgit"
+version = "0.1.0"
+dependencies = [
+ "autocfg",
+ "libgit-sys",
+]
+
+[[package]]
+name = "libgit-sys"
+version = "0.1.0"
+dependencies = [
+ "autocfg",
+ "libz-sys",
+ "make-cmd",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "make-cmd"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8ca8afbe8af1785e09636acb5a41e08a765f5f0340568716c18a8700ba3c0d3"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
diff --git a/contrib/libgit-rs/Cargo.toml b/contrib/libgit-rs/Cargo.toml
new file mode 100644
index 0000000000..c3289e69db
--- /dev/null
+++ b/contrib/libgit-rs/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "libgit"
+version = "0.1.0"
+edition = "2021"
+build = "build.rs"
+rust-version = "1.63" # TODO: Once we hit 1.84 or newer, we may want to remove Cargo.lock from
+ # version control. See https://lore.kernel.org/git/Z47jgK-oMjFRSslr@tapette.crustytoothpaste.net/
+
+
+[lib]
+path = "src/lib.rs"
+
+[dependencies]
+libgit-sys = { version = "0.1.0", path = "../libgit-sys" }
+
+[build-dependencies]
+autocfg = "1.4.0"
diff --git a/contrib/libgit-rs/README.md b/contrib/libgit-rs/README.md
new file mode 100644
index 0000000000..ff945e1ce2
--- /dev/null
+++ b/contrib/libgit-rs/README.md
@@ -0,0 +1,13 @@
+# libgit-rs
+
+Proof-of-concept Git bindings for Rust.
+
+```toml
+[dependencies]
+libgit = "0.1.0"
+```
+
+## Rust version requirements
+
+libgit-rs should support Rust versions at least as old as the version included
+in Debian stable (currently 1.63).
diff --git a/contrib/libgit-rs/build.rs b/contrib/libgit-rs/build.rs
new file mode 100644
index 0000000000..f8bd01a690
--- /dev/null
+++ b/contrib/libgit-rs/build.rs
@@ -0,0 +1,4 @@
+pub fn main() {
+ let ac = autocfg::new();
+ ac.emit_has_path("std::ffi::c_char");
+}
diff --git a/contrib/libgit-rs/src/config.rs b/contrib/libgit-rs/src/config.rs
new file mode 100644
index 0000000000..6bf04845c8
--- /dev/null
+++ b/contrib/libgit-rs/src/config.rs
@@ -0,0 +1,106 @@
+use std::ffi::{c_void, CStr, CString};
+use std::path::Path;
+
+#[cfg(has_std__ffi__c_char)]
+use std::ffi::{c_char, c_int};
+
+#[cfg(not(has_std__ffi__c_char))]
+#[allow(non_camel_case_types)]
+type c_char = i8;
+
+#[cfg(not(has_std__ffi__c_char))]
+#[allow(non_camel_case_types)]
+type c_int = i32;
+
+use libgit_sys::*;
+
+/// A ConfigSet is an in-memory cache for config-like files such as `.gitmodules` or `.gitconfig`.
+/// It does not support all config directives; notably, it will not process `include` or
+/// `includeIf` directives (but it will store them so that callers can choose whether and how to
+/// handle them).
+pub struct ConfigSet(*mut libgit_config_set);
+impl ConfigSet {
+ /// Allocate a new ConfigSet
+ pub fn new() -> Self {
+ unsafe { ConfigSet(libgit_configset_alloc()) }
+ }
+
+ /// Load the given files into the ConfigSet; conflicting directives in later files will
+ /// override those given in earlier files.
+ pub fn add_files(&mut self, files: &[&Path]) {
+ for file in files {
+ let pstr = file.to_str().expect("Invalid UTF-8");
+ let rs = CString::new(pstr).expect("Couldn't convert to CString");
+ unsafe {
+ libgit_configset_add_file(self.0, rs.as_ptr());
+ }
+ }
+ }
+
+ /// Load the value for the given key and attempt to parse it as an i32. Dies with a fatal error
+ /// if the value cannot be parsed. Returns None if the key is not present.
+ pub fn get_int(&mut self, key: &str) -> Option<i32> {
+ let key = CString::new(key).expect("Couldn't convert to CString");
+ let mut val: c_int = 0;
+ unsafe {
+ if libgit_configset_get_int(self.0, key.as_ptr(), &mut val as *mut c_int) != 0 {
+ return None;
+ }
+ }
+
+ Some(val.into())
+ }
+
+ /// Clones the value for the given key. Dies with a fatal error if the value cannot be
+ /// converted to a String. Returns None if the key is not present.
+ pub fn get_string(&mut self, key: &str) -> Option<String> {
+ let key = CString::new(key).expect("Couldn't convert key to CString");
+ let mut val: *mut c_char = std::ptr::null_mut();
+ unsafe {
+ if libgit_configset_get_string(self.0, key.as_ptr(), &mut val as *mut *mut c_char) != 0
+ {
+ return None;
+ }
+ let borrowed_str = CStr::from_ptr(val);
+ let owned_str =
+ String::from(borrowed_str.to_str().expect("Couldn't convert val to str"));
+ free(val as *mut c_void); // Free the xstrdup()ed pointer from the C side
+ Some(owned_str)
+ }
+ }
+}
+
+impl Default for ConfigSet {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl Drop for ConfigSet {
+ fn drop(&mut self) {
+ unsafe {
+ libgit_configset_free(self.0);
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn load_configs_via_configset() {
+ let mut cs = ConfigSet::new();
+ cs.add_files(&[
+ Path::new("testdata/config1"),
+ Path::new("testdata/config2"),
+ Path::new("testdata/config3"),
+ ]);
+ // ConfigSet retrieves correct value
+ assert_eq!(cs.get_int("trace2.eventTarget"), Some(1));
+ // ConfigSet respects last config value set
+ assert_eq!(cs.get_int("trace2.eventNesting"), Some(3));
+ // ConfigSet returns None for missing key
+ assert_eq!(cs.get_string("foo.bar"), None);
+ }
+}
diff --git a/contrib/libgit-rs/src/lib.rs b/contrib/libgit-rs/src/lib.rs
new file mode 100644
index 0000000000..ef68c36943
--- /dev/null
+++ b/contrib/libgit-rs/src/lib.rs
@@ -0,0 +1 @@
+pub mod config;
diff --git a/contrib/libgit-rs/testdata/config1 b/contrib/libgit-rs/testdata/config1
new file mode 100644
index 0000000000..4e9a9d25d1
--- /dev/null
+++ b/contrib/libgit-rs/testdata/config1
@@ -0,0 +1,2 @@
+[trace2]
+ eventNesting = 1
diff --git a/contrib/libgit-rs/testdata/config2 b/contrib/libgit-rs/testdata/config2
new file mode 100644
index 0000000000..b8d1eca423
--- /dev/null
+++ b/contrib/libgit-rs/testdata/config2
@@ -0,0 +1,2 @@
+[trace2]
+ eventTarget = 1
diff --git a/contrib/libgit-rs/testdata/config3 b/contrib/libgit-rs/testdata/config3
new file mode 100644
index 0000000000..ca7b9a7c38
--- /dev/null
+++ b/contrib/libgit-rs/testdata/config3
@@ -0,0 +1,2 @@
+[trace2]
+ eventNesting = 3
diff --git a/contrib/libgit-sys/Cargo.lock b/contrib/libgit-sys/Cargo.lock
new file mode 100644
index 0000000000..427a4c66b7
--- /dev/null
+++ b/contrib/libgit-sys/Cargo.lock
@@ -0,0 +1,69 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "autocfg"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
+
+[[package]]
+name = "cc"
+version = "1.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "57b6a275aa2903740dc87da01c62040406b8812552e97129a63ea8850a17c6e6"
+dependencies = [
+ "shlex",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.158"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439"
+
+[[package]]
+name = "libgit-sys"
+version = "0.1.0"
+dependencies = [
+ "autocfg",
+ "libz-sys",
+ "make-cmd",
+]
+
+[[package]]
+name = "libz-sys"
+version = "1.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d2d16453e800a8cf6dd2fc3eb4bc99b786a9b90c663b8559a5b1a041bf89e472"
+dependencies = [
+ "cc",
+ "libc",
+ "pkg-config",
+ "vcpkg",
+]
+
+[[package]]
+name = "make-cmd"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8ca8afbe8af1785e09636acb5a41e08a765f5f0340568716c18a8700ba3c0d3"
+
+[[package]]
+name = "pkg-config"
+version = "0.3.30"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec"
+
+[[package]]
+name = "shlex"
+version = "1.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
+
+[[package]]
+name = "vcpkg"
+version = "0.2.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
diff --git a/contrib/libgit-sys/Cargo.toml b/contrib/libgit-sys/Cargo.toml
new file mode 100644
index 0000000000..e0623022c3
--- /dev/null
+++ b/contrib/libgit-sys/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "libgit-sys"
+version = "0.1.0"
+edition = "2021"
+build = "build.rs"
+links = "gitpub"
+rust-version = "1.63" # TODO: Once we hit 1.84 or newer, we may want to remove Cargo.lock from
+ # version control. See https://lore.kernel.org/git/Z47jgK-oMjFRSslr@tapette.crustytoothpaste.net/
+description = "Native bindings to a portion of libgit"
+
+[lib]
+path = "src/lib.rs"
+
+[dependencies]
+libz-sys = "1.1.19"
+
+[build-dependencies]
+autocfg = "1.4.0"
+make-cmd = "0.1.0"
diff --git a/contrib/libgit-sys/README.md b/contrib/libgit-sys/README.md
new file mode 100644
index 0000000000..c061cfcaf5
--- /dev/null
+++ b/contrib/libgit-sys/README.md
@@ -0,0 +1,4 @@
+# libgit-sys
+
+A small proof-of-concept crate showing how to provide a Rust FFI to Git
+internals.
diff --git a/contrib/libgit-sys/build.rs b/contrib/libgit-sys/build.rs
new file mode 100644
index 0000000000..3ffd80ad91
--- /dev/null
+++ b/contrib/libgit-sys/build.rs
@@ -0,0 +1,35 @@
+use std::env;
+use std::path::PathBuf;
+
+pub fn main() -> std::io::Result<()> {
+ let ac = autocfg::new();
+ ac.emit_has_path("std::ffi::c_char");
+
+ let crate_root = PathBuf::from(env::var_os("CARGO_MANIFEST_DIR").unwrap());
+ let git_root = crate_root.join("../..");
+ let dst = PathBuf::from(env::var_os("OUT_DIR").unwrap());
+
+ let make_output = make_cmd::gnu_make()
+ .env("DEVELOPER", "1")
+ .env_remove("PROFILE")
+ .current_dir(git_root.clone())
+ .args([
+ "INCLUDE_LIBGIT_RS=YesPlease",
+ "contrib/libgit-sys/libgitpub.a",
+ ])
+ .output()
+ .expect("Make failed to run");
+ if !make_output.status.success() {
+ panic!(
+ "Make failed:\n stdout = {}\n stderr = {}\n",
+ String::from_utf8(make_output.stdout).unwrap(),
+ String::from_utf8(make_output.stderr).unwrap()
+ );
+ }
+ std::fs::copy(crate_root.join("libgitpub.a"), dst.join("libgitpub.a"))?;
+ println!("cargo:rustc-link-search=native={}", dst.display());
+ println!("cargo:rustc-link-lib=gitpub");
+ println!("cargo:rerun-if-changed={}", git_root.display());
+
+ Ok(())
+}
diff --git a/contrib/libgit-sys/public_symbol_export.c b/contrib/libgit-sys/public_symbol_export.c
new file mode 100644
index 0000000000..dfbb257115
--- /dev/null
+++ b/contrib/libgit-sys/public_symbol_export.c
@@ -0,0 +1,59 @@
+/*
+ * Shim to publicly export Git symbols. These must be renamed so that the
+ * original symbols can be hidden. Renaming these with a "libgit_" prefix also
+ * avoids conflicts with other libraries such as libgit2.
+ */
+
+#include "git-compat-util.h"
+#include "config.h"
+#include "contrib/libgit-sys/public_symbol_export.h"
+#include "version.h"
+
+#pragma GCC visibility push(default)
+
+struct libgit_config_set {
+ struct config_set cs;
+};
+
+struct libgit_config_set *libgit_configset_alloc(void)
+{
+ struct libgit_config_set *cs =
+ xmalloc(sizeof(struct libgit_config_set));
+ git_configset_init(&cs->cs);
+ return cs;
+}
+
+void libgit_configset_free(struct libgit_config_set *cs)
+{
+ git_configset_clear(&cs->cs);
+ free(cs);
+}
+
+int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename)
+{
+ return git_configset_add_file(&cs->cs, filename);
+}
+
+int libgit_configset_get_int(struct libgit_config_set *cs, const char *key,
+ int *dest)
+{
+ return git_configset_get_int(&cs->cs, key, dest);
+}
+
+int libgit_configset_get_string(struct libgit_config_set *cs, const char *key,
+ char **dest)
+{
+ return git_configset_get_string(&cs->cs, key, dest);
+}
+
+const char *libgit_user_agent(void)
+{
+ return git_user_agent();
+}
+
+const char *libgit_user_agent_sanitized(void)
+{
+ return git_user_agent_sanitized();
+}
+
+#pragma GCC visibility pop
diff --git a/contrib/libgit-sys/public_symbol_export.h b/contrib/libgit-sys/public_symbol_export.h
new file mode 100644
index 0000000000..701db92d53
--- /dev/null
+++ b/contrib/libgit-sys/public_symbol_export.h
@@ -0,0 +1,18 @@
+#ifndef PUBLIC_SYMBOL_EXPORT_H
+#define PUBLIC_SYMBOL_EXPORT_H
+
+struct libgit_config_set *libgit_configset_alloc(void);
+
+void libgit_configset_free(struct libgit_config_set *cs);
+
+int libgit_configset_add_file(struct libgit_config_set *cs, const char *filename);
+
+int libgit_configset_get_int(struct libgit_config_set *cs, const char *key, int *dest);
+
+int libgit_configset_get_string(struct libgit_config_set *cs, const char *key, char **dest);
+
+const char *libgit_user_agent(void);
+
+const char *libgit_user_agent_sanitized(void);
+
+#endif /* PUBLIC_SYMBOL_EXPORT_H */
diff --git a/contrib/libgit-sys/src/lib.rs b/contrib/libgit-sys/src/lib.rs
new file mode 100644
index 0000000000..4bfc650450
--- /dev/null
+++ b/contrib/libgit-sys/src/lib.rs
@@ -0,0 +1,79 @@
+use std::ffi::c_void;
+
+#[cfg(has_std__ffi__c_char)]
+use std::ffi::{c_char, c_int};
+
+#[cfg(not(has_std__ffi__c_char))]
+#[allow(non_camel_case_types)]
+pub type c_char = i8;
+
+#[cfg(not(has_std__ffi__c_char))]
+#[allow(non_camel_case_types)]
+pub type c_int = i32;
+
+extern crate libz_sys;
+
+#[allow(non_camel_case_types)]
+#[repr(C)]
+pub struct libgit_config_set {
+ _data: [u8; 0],
+ _marker: core::marker::PhantomData<(*mut u8, core::marker::PhantomPinned)>,
+}
+
+extern "C" {
+ pub fn free(ptr: *mut c_void);
+
+ pub fn libgit_user_agent() -> *const c_char;
+ pub fn libgit_user_agent_sanitized() -> *const c_char;
+
+ pub fn libgit_configset_alloc() -> *mut libgit_config_set;
+ pub fn libgit_configset_free(cs: *mut libgit_config_set);
+
+ pub fn libgit_configset_add_file(cs: *mut libgit_config_set, filename: *const c_char) -> c_int;
+
+ pub fn libgit_configset_get_int(
+ cs: *mut libgit_config_set,
+ key: *const c_char,
+ int: *mut c_int,
+ ) -> c_int;
+
+ pub fn libgit_configset_get_string(
+ cs: *mut libgit_config_set,
+ key: *const c_char,
+ dest: *mut *mut c_char,
+ ) -> c_int;
+
+}
+
+#[cfg(test)]
+mod tests {
+ use std::ffi::CStr;
+
+ use super::*;
+
+ #[test]
+ fn user_agent_starts_with_git() {
+ let c_str = unsafe { CStr::from_ptr(libgit_user_agent()) };
+ let agent = c_str
+ .to_str()
+ .expect("User agent contains invalid UTF-8 data");
+ assert!(
+ agent.starts_with("git/"),
+ r#"Expected user agent to start with "git/", got: {}"#,
+ agent
+ );
+ }
+
+ #[test]
+ fn sanitized_user_agent_starts_with_git() {
+ let c_str = unsafe { CStr::from_ptr(libgit_user_agent_sanitized()) };
+ let agent = c_str
+ .to_str()
+ .expect("Sanitized user agent contains invalid UTF-8 data");
+ assert!(
+ agent.starts_with("git/"),
+ r#"Expected user agent to start with "git/", got: {}"#,
+ agent
+ );
+ }
+}
diff --git a/csum-file.c b/csum-file.c
index 5716016e12..b58c183a4f 100644
--- a/csum-file.c
+++ b/csum-file.c
@@ -11,9 +11,10 @@
#define USE_THE_REPOSITORY_VARIABLE
#include "git-compat-util.h"
-#include "progress.h"
#include "csum-file.h"
+#include "git-zlib.h"
#include "hash.h"
+#include "progress.h"
static void verify_buffer_or_die(struct hashfile *f,
const void *buf,
@@ -50,7 +51,7 @@ void hashflush(struct hashfile *f)
if (offset) {
if (!f->skip_hash)
- the_hash_algo->unsafe_update_fn(&f->ctx, f->buffer, offset);
+ git_hash_update(&f->ctx, f->buffer, offset);
flush(f, f->buffer, offset);
f->offset = 0;
}
@@ -71,14 +72,14 @@ int finalize_hashfile(struct hashfile *f, unsigned char *result,
hashflush(f);
if (f->skip_hash)
- hashclr(f->buffer, the_repository->hash_algo);
+ hashclr(f->buffer, f->algop);
else
- the_hash_algo->unsafe_final_fn(f->buffer, &f->ctx);
+ git_hash_final(f->buffer, &f->ctx);
if (result)
- hashcpy(result, f->buffer, the_repository->hash_algo);
+ hashcpy(result, f->buffer, f->algop);
if (flags & CSUM_HASH_IN_STREAM)
- flush(f, f->buffer, the_hash_algo->rawsz);
+ flush(f, f->buffer, f->algop->rawsz);
if (flags & CSUM_FSYNC)
fsync_component_or_die(component, f->fd, f->name);
if (flags & CSUM_CLOSE) {
@@ -128,7 +129,7 @@ void hashwrite(struct hashfile *f, const void *buf, unsigned int count)
* f->offset is necessarily zero.
*/
if (!f->skip_hash)
- the_hash_algo->unsafe_update_fn(&f->ctx, buf, nr);
+ git_hash_update(&f->ctx, buf, nr);
flush(f, buf, nr);
} else {
/*
@@ -174,7 +175,9 @@ static struct hashfile *hashfd_internal(int fd, const char *name,
f->name = name;
f->do_crc = 0;
f->skip_hash = 0;
- the_hash_algo->unsafe_init_fn(&f->ctx);
+
+ f->algop = unsafe_hash_algo(the_hash_algo);
+ f->algop->init_fn(&f->ctx);
f->buffer_len = buffer_len;
f->buffer = xmalloc(buffer_len);
@@ -204,11 +207,18 @@ struct hashfile *hashfd_throughput(int fd, const char *name, struct progress *tp
return hashfd_internal(fd, name, tp, 8 * 1024);
}
+void hashfile_checkpoint_init(struct hashfile *f,
+ struct hashfile_checkpoint *checkpoint)
+{
+ memset(checkpoint, 0, sizeof(*checkpoint));
+ f->algop->init_fn(&checkpoint->ctx);
+}
+
void hashfile_checkpoint(struct hashfile *f, struct hashfile_checkpoint *checkpoint)
{
hashflush(f);
checkpoint->offset = f->total;
- the_hash_algo->unsafe_clone_fn(&checkpoint->ctx, &f->ctx);
+ git_hash_clone(&checkpoint->ctx, &f->ctx);
}
int hashfile_truncate(struct hashfile *f, struct hashfile_checkpoint *checkpoint)
@@ -219,7 +229,7 @@ int hashfile_truncate(struct hashfile *f, struct hashfile_checkpoint *checkpoint
lseek(f->fd, offset, SEEK_SET) != offset)
return -1;
f->total = offset;
- the_hash_algo->unsafe_clone_fn(&f->ctx, &checkpoint->ctx);
+ git_hash_clone(&f->ctx, &checkpoint->ctx);
f->offset = 0; /* hashflush() was called in checkpoint */
return 0;
}
@@ -239,15 +249,16 @@ uint32_t crc32_end(struct hashfile *f)
int hashfile_checksum_valid(const unsigned char *data, size_t total_len)
{
unsigned char got[GIT_MAX_RAWSZ];
- git_hash_ctx ctx;
- size_t data_len = total_len - the_hash_algo->rawsz;
+ struct git_hash_ctx ctx;
+ const struct git_hash_algo *algop = unsafe_hash_algo(the_hash_algo);
+ size_t data_len = total_len - algop->rawsz;
- if (total_len < the_hash_algo->rawsz)
+ if (total_len < algop->rawsz)
return 0; /* say "too short"? */
- the_hash_algo->unsafe_init_fn(&ctx);
- the_hash_algo->unsafe_update_fn(&ctx, data, data_len);
- the_hash_algo->unsafe_final_fn(got, &ctx);
+ algop->init_fn(&ctx);
+ git_hash_update(&ctx, data, data_len);
+ git_hash_final(got, &ctx);
- return hasheq(got, data + data_len, the_repository->hash_algo);
+ return hasheq(got, data + data_len, algop);
}
diff --git a/csum-file.h b/csum-file.h
index 7c73da0a40..ffccbf0996 100644
--- a/csum-file.h
+++ b/csum-file.h
@@ -11,7 +11,7 @@ struct hashfile {
int fd;
int check_fd;
unsigned int offset;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
off_t total;
struct progress *tp;
const char *name;
@@ -20,6 +20,7 @@ struct hashfile {
size_t buffer_len;
unsigned char *buffer;
unsigned char *check_buffer;
+ const struct git_hash_algo *algop;
/**
* If non-zero, skip_hash indicates that we should
@@ -32,9 +33,10 @@ struct hashfile {
/* Checkpoint */
struct hashfile_checkpoint {
off_t offset;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
};
+void hashfile_checkpoint_init(struct hashfile *, struct hashfile_checkpoint *);
void hashfile_checkpoint(struct hashfile *, struct hashfile_checkpoint *);
int hashfile_truncate(struct hashfile *, struct hashfile_checkpoint *);
diff --git a/diff-lib.c b/diff-lib.c
index c6d3bc4d37..353b473ed5 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -153,21 +153,8 @@ void run_diff_files(struct rev_info *revs, unsigned int option)
struct diff_filepair *pair;
unsigned int wt_mode = 0;
int num_compare_stages = 0;
- size_t path_len;
struct stat st;
- path_len = ce_namelen(ce);
-
- dpath = xmalloc(combine_diff_path_size(5, path_len));
- dpath->path = (char *) &(dpath->parent[5]);
-
- dpath->next = NULL;
- memcpy(dpath->path, ce->name, path_len);
- dpath->path[path_len] = '\0';
- oidclr(&dpath->oid, the_repository->hash_algo);
- memset(&(dpath->parent[0]), 0,
- sizeof(struct combine_diff_parent)*5);
-
changed = check_removed(ce, &st);
if (!changed)
wt_mode = ce_mode_from_stat(ce, st.st_mode);
@@ -178,7 +165,14 @@ void run_diff_files(struct rev_info *revs, unsigned int option)
}
wt_mode = 0;
}
- dpath->mode = wt_mode;
+
+ /*
+ * Allocate space for two parents, which will come from
+ * index stages #2 and #3, if present. Below we'll fill
+ * these from (stage - 2).
+ */
+ dpath = combine_diff_path_new(ce->name, ce_namelen(ce),
+ wt_mode, null_oid(), 2);
while (i < entries) {
struct cache_entry *nce = istate->cache[i];
@@ -405,16 +399,10 @@ static int show_modified(struct rev_info *revs,
if (revs->combine_merges && !cached &&
(!oideq(oid, &old_entry->oid) || !oideq(&old_entry->oid, &new_entry->oid))) {
struct combine_diff_path *p;
- int pathlen = ce_namelen(new_entry);
-
- p = xmalloc(combine_diff_path_size(2, pathlen));
- p->path = (char *) &p->parent[2];
- p->next = NULL;
- memcpy(p->path, new_entry->name, pathlen);
- p->path[pathlen] = 0;
- p->mode = mode;
- oidclr(&p->oid, the_repository->hash_algo);
- memset(p->parent, 0, 2 * sizeof(struct combine_diff_parent));
+
+ p = combine_diff_path_new(new_entry->name,
+ ce_namelen(new_entry),
+ mode, null_oid(), 2);
p->parent[0].status = DIFF_STATUS_MODIFIED;
p->parent[0].mode = new_entry->ce_mode;
oidcpy(&p->parent[0].oid, &new_entry->oid);
diff --git a/diff.c b/diff.c
index 0822ae4433..019fb893a7 100644
--- a/diff.c
+++ b/diff.c
@@ -6392,7 +6392,7 @@ static void diff_summary(struct diff_options *opt, struct diff_filepair *p)
}
struct patch_id_t {
- git_hash_ctx *ctx;
+ struct git_hash_ctx *ctx;
int patchlen;
};
@@ -6409,13 +6409,13 @@ static int remove_space(char *line, int len)
return dst - line;
}
-void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx)
+void flush_one_hunk(struct object_id *result, struct git_hash_ctx *ctx)
{
unsigned char hash[GIT_MAX_RAWSZ];
unsigned short carry = 0;
int i;
- the_hash_algo->final_fn(hash, ctx);
+ git_hash_final(hash, ctx);
the_hash_algo->init_fn(ctx);
/* 20-byte sum, with carry */
for (i = 0; i < the_hash_algo->rawsz; ++i) {
@@ -6434,22 +6434,22 @@ static int patch_id_consume(void *priv, char *line, unsigned long len)
return 0;
new_len = remove_space(line, len);
- the_hash_algo->update_fn(data->ctx, line, new_len);
+ git_hash_update(data->ctx, line, new_len);
data->patchlen += new_len;
return 0;
}
-static void patch_id_add_string(git_hash_ctx *ctx, const char *str)
+static void patch_id_add_string(struct git_hash_ctx *ctx, const char *str)
{
- the_hash_algo->update_fn(ctx, str, strlen(str));
+ git_hash_update(ctx, str, strlen(str));
}
-static void patch_id_add_mode(git_hash_ctx *ctx, unsigned mode)
+static void patch_id_add_mode(struct git_hash_ctx *ctx, unsigned mode)
{
/* large enough for 2^32 in octal */
char buf[12];
int len = xsnprintf(buf, sizeof(buf), "%06o", mode);
- the_hash_algo->update_fn(ctx, buf, len);
+ git_hash_update(ctx, buf, len);
}
/* returns 0 upon success, and writes result into oid */
@@ -6457,7 +6457,7 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oid
{
struct diff_queue_struct *q = &diff_queued_diff;
int i;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
struct patch_id_t data;
the_hash_algo->init_fn(&ctx);
@@ -6493,9 +6493,9 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oid
len2 = remove_space(p->two->path, strlen(p->two->path));
patch_id_add_string(&ctx, "diff--git");
patch_id_add_string(&ctx, "a/");
- the_hash_algo->update_fn(&ctx, p->one->path, len1);
+ git_hash_update(&ctx, p->one->path, len1);
patch_id_add_string(&ctx, "b/");
- the_hash_algo->update_fn(&ctx, p->two->path, len2);
+ git_hash_update(&ctx, p->two->path, len2);
if (p->one->mode == 0) {
patch_id_add_string(&ctx, "newfilemode");
@@ -6514,24 +6514,24 @@ static int diff_get_patch_id(struct diff_options *options, struct object_id *oid
/* don't do anything since we're only populating header info */
} else if (diff_filespec_is_binary(options->repo, p->one) ||
diff_filespec_is_binary(options->repo, p->two)) {
- the_hash_algo->update_fn(&ctx, oid_to_hex(&p->one->oid),
+ git_hash_update(&ctx, oid_to_hex(&p->one->oid),
the_hash_algo->hexsz);
- the_hash_algo->update_fn(&ctx, oid_to_hex(&p->two->oid),
+ git_hash_update(&ctx, oid_to_hex(&p->two->oid),
the_hash_algo->hexsz);
} else {
if (p->one->mode == 0) {
patch_id_add_string(&ctx, "---/dev/null");
patch_id_add_string(&ctx, "+++b/");
- the_hash_algo->update_fn(&ctx, p->two->path, len2);
+ git_hash_update(&ctx, p->two->path, len2);
} else if (p->two->mode == 0) {
patch_id_add_string(&ctx, "---a/");
- the_hash_algo->update_fn(&ctx, p->one->path, len1);
+ git_hash_update(&ctx, p->one->path, len1);
patch_id_add_string(&ctx, "+++/dev/null");
} else {
patch_id_add_string(&ctx, "---a/");
- the_hash_algo->update_fn(&ctx, p->one->path, len1);
+ git_hash_update(&ctx, p->one->path, len1);
patch_id_add_string(&ctx, "+++b/");
- the_hash_algo->update_fn(&ctx, p->two->path, len2);
+ git_hash_update(&ctx, p->two->path, len2);
}
if (fill_mmfile(options->repo, &mf1, p->one) < 0 ||
diff --git a/diff.h b/diff.h
index 6e6007c17b..0a566f5531 100644
--- a/diff.h
+++ b/diff.h
@@ -462,7 +462,7 @@ const char *diff_line_prefix(struct diff_options *);
extern const char mime_boundary_leader[];
struct combine_diff_path *diff_tree_paths(
- struct combine_diff_path *p, const struct object_id *oid,
+ const struct object_id *oid,
const struct object_id **parents_oid, int nparent,
struct strbuf *base, struct diff_options *opt);
void diff_tree_oid(const struct object_id *old_oid,
@@ -480,12 +480,20 @@ struct combine_diff_path {
char status;
unsigned int mode;
struct object_id oid;
- struct strbuf path;
+ /*
+ * This per-parent path is filled only when doing a combined
+ * diff with revs.combined_all_paths set, and only if the path
+ * differs from the post-image (e.g., a rename or copy).
+ * Otherwise it is left NULL.
+ */
+ char *path;
} parent[FLEX_ARRAY];
};
-#define combine_diff_path_size(n, l) \
- st_add4(sizeof(struct combine_diff_path), (l), 1, \
- st_mult(sizeof(struct combine_diff_parent), (n)))
+struct combine_diff_path *combine_diff_path_new(const char *path,
+ size_t path_len,
+ unsigned int mode,
+ const struct object_id *oid,
+ size_t num_parents);
void show_combined_diff(struct combine_diff_path *elem, int num_parent,
struct rev_info *);
@@ -644,7 +652,7 @@ void run_diff_index(struct rev_info *revs, unsigned int option);
int do_diff_cache(const struct object_id *, struct diff_options *);
int diff_flush_patch_id(struct diff_options *, struct object_id *, int);
-void flush_one_hunk(struct object_id *result, git_hash_ctx *ctx);
+void flush_one_hunk(struct object_id *result, struct git_hash_ctx *ctx);
int diff_result_code(struct rev_info *);
diff --git a/environment.c b/environment.c
index 8389a27270..e5b361bb5d 100644
--- a/environment.c
+++ b/environment.c
@@ -16,6 +16,7 @@
#include "convert.h"
#include "environment.h"
#include "gettext.h"
+#include "git-zlib.h"
#include "repository.h"
#include "config.h"
#include "refs.h"
diff --git a/fetch-pack.c b/fetch-pack.c
index 055e8c3643..1ed5e11dd5 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -1036,7 +1036,9 @@ static int get_pack(struct fetch_pack_args *args,
die(_("fetch-pack: unable to fork off %s"), cmd_name);
if (do_keep && (pack_lockfiles || fsck_objects)) {
int is_well_formed;
- char *pack_lockfile = index_pack_lockfile(cmd.out, &is_well_formed);
+ char *pack_lockfile = index_pack_lockfile(the_repository,
+ cmd.out,
+ &is_well_formed);
if (!is_well_formed)
die(_("fetch-pack: invalid index-pack output"));
diff --git a/generate-cmdlist.sh b/generate-cmdlist.sh
index b923a5aab8..0ed39c4c5d 100755
--- a/generate-cmdlist.sh
+++ b/generate-cmdlist.sh
@@ -76,7 +76,7 @@ print_command_list () {
break
;;
esac
- done <"$1/Documentation/$cmd.txt"
+ done <"$1/Documentation/$cmd.adoc"
printf '\t{ "%s", N_("%s"), 0' "$cmd" "$synopsis"
printf " | CAT_%s" $rest
diff --git a/generate-configlist.sh b/generate-configlist.sh
index 579422619c..dffdaada8b 100755
--- a/generate-configlist.sh
+++ b/generate-configlist.sh
@@ -13,7 +13,7 @@ print_config_list () {
cat <<EOF
static const char *config_name_list[] = {
EOF
- grep -h '^[a-zA-Z].*\..*::$' "$SOURCE_DIR"/Documentation/*config.txt "$SOURCE_DIR"/Documentation/config/*.txt |
+ grep -h '^[a-zA-Z].*\..*::$' "$SOURCE_DIR"/Documentation/*config.adoc "$SOURCE_DIR"/Documentation/config/*.adoc |
sed '/deprecated/d; s/::$//; s/, */\n/g' |
sort |
sed 's/^.*$/ "&",/'
diff --git a/generate-hooklist.sh b/generate-hooklist.sh
index e22068c2fa..e0cdf26944 100755
--- a/generate-hooklist.sh
+++ b/generate-hooklist.sh
@@ -22,7 +22,7 @@ EOF
sed -n \
-e '/^~~~~*$/ {x; s/^.*$/ "&",/; p;}' \
-e 'x' \
- <"$SOURCE_DIR"/Documentation/githooks.txt |
+ <"$SOURCE_DIR"/Documentation/githooks.adoc |
LC_ALL=C sort
cat <<EOF
diff --git a/git-compat-util.h b/git-compat-util.h
index d43dd248c4..e123288e8f 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -1539,18 +1539,6 @@ int cmd_main(int, const char **);
int common_exit(const char *file, int line, int code);
#define exit(code) exit(common_exit(__FILE__, __LINE__, (code)))
-#define z_const
-#include <zlib.h>
-
-#if ZLIB_VERNUM < 0x1290
-/*
- * This is uncompress2, which is only available in zlib >= 1.2.9
- * (released as of early 2017). See compat/zlib-uncompress2.c.
- */
-int uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source,
- uLong *sourceLen);
-#endif
-
/*
* This include must come after system headers, since it introduces macros that
* replace system names.
diff --git a/git-zlib.c b/git-zlib.c
index d43bbeb6da..651dd9e07c 100644
--- a/git-zlib.c
+++ b/git-zlib.c
@@ -59,7 +59,8 @@ static void zlib_post_call(git_zstream *s)
s->total_out = s->z.total_out;
s->total_in = s->z.total_in;
- s->next_in = s->z.next_in;
+ /* zlib-ng marks `next_in` as `const`, so we have to cast it away. */
+ s->next_in = (unsigned char *) s->z.next_in;
s->next_out = s->z.next_out;
s->avail_in -= bytes_consumed;
s->avail_out -= bytes_produced;
@@ -147,10 +148,6 @@ int git_inflate(git_zstream *strm, int flush)
return status;
}
-#if defined(NO_DEFLATE_BOUND) || ZLIB_VERNUM < 0x1200
-#define deflateBound(c,s) ((s) + (((s) + 7) >> 3) + (((s) + 63) >> 6) + 11)
-#endif
-
unsigned long git_deflate_bound(git_zstream *strm, unsigned long size)
{
return deflateBound(&strm->z, size);
diff --git a/git-zlib.h b/git-zlib.h
index d8a670aff9..1e8d9aabcb 100644
--- a/git-zlib.h
+++ b/git-zlib.h
@@ -1,6 +1,8 @@
#ifndef GIT_ZLIB_H
#define GIT_ZLIB_H
+#include "compat/zlib-compat.h"
+
typedef struct git_zstream {
z_stream z;
unsigned long avail_in;
diff --git a/git.c b/git.c
index a94dab3770..b23761480f 100644
--- a/git.c
+++ b/git.c
@@ -587,7 +587,9 @@ static struct cmd_struct commands[] = {
{ "name-rev", cmd_name_rev, RUN_SETUP },
{ "notes", cmd_notes, RUN_SETUP },
{ "pack-objects", cmd_pack_objects, RUN_SETUP },
+#ifndef WITH_BREAKING_CHANGES
{ "pack-redundant", cmd_pack_redundant, RUN_SETUP | NO_PARSEOPT },
+#endif
{ "pack-refs", cmd_pack_refs, RUN_SETUP },
{ "patch-id", cmd_patch_id, RUN_SETUP_GENTLY | NO_PARSEOPT },
{ "pickaxe", cmd_blame, RUN_SETUP },
diff --git a/hash.h b/hash.h
index 756166ce5e..4367acfec5 100644
--- a/hash.h
+++ b/hash.h
@@ -234,19 +234,20 @@ enum get_oid_result {
#endif
/* A suitably aligned type for stack allocations of hash contexts. */
-union git_hash_ctx {
- git_SHA_CTX sha1;
- git_SHA_CTX_unsafe sha1_unsafe;
-
- git_SHA256_CTX sha256;
+struct git_hash_ctx {
+ const struct git_hash_algo *algop;
+ union {
+ git_SHA_CTX sha1;
+ git_SHA_CTX_unsafe sha1_unsafe;
+ git_SHA256_CTX sha256;
+ } state;
};
-typedef union git_hash_ctx git_hash_ctx;
-typedef void (*git_hash_init_fn)(git_hash_ctx *ctx);
-typedef void (*git_hash_clone_fn)(git_hash_ctx *dst, const git_hash_ctx *src);
-typedef void (*git_hash_update_fn)(git_hash_ctx *ctx, const void *in, size_t len);
-typedef void (*git_hash_final_fn)(unsigned char *hash, git_hash_ctx *ctx);
-typedef void (*git_hash_final_oid_fn)(struct object_id *oid, git_hash_ctx *ctx);
+typedef void (*git_hash_init_fn)(struct git_hash_ctx *ctx);
+typedef void (*git_hash_clone_fn)(struct git_hash_ctx *dst, const struct git_hash_ctx *src);
+typedef void (*git_hash_update_fn)(struct git_hash_ctx *ctx, const void *in, size_t len);
+typedef void (*git_hash_final_fn)(unsigned char *hash, struct git_hash_ctx *ctx);
+typedef void (*git_hash_final_oid_fn)(struct object_id *oid, struct git_hash_ctx *ctx);
struct git_hash_algo {
/*
@@ -282,21 +283,6 @@ struct git_hash_algo {
/* The hash finalization function for object IDs. */
git_hash_final_oid_fn final_oid_fn;
- /* The non-cryptographic hash initialization function. */
- git_hash_init_fn unsafe_init_fn;
-
- /* The non-cryptographic hash context cloning function. */
- git_hash_clone_fn unsafe_clone_fn;
-
- /* The non-cryptographic hash update function. */
- git_hash_update_fn unsafe_update_fn;
-
- /* The non-cryptographic hash finalization function. */
- git_hash_final_fn unsafe_final_fn;
-
- /* The non-cryptographic hash finalization function. */
- git_hash_final_oid_fn unsafe_final_oid_fn;
-
/* The OID of the empty tree. */
const struct object_id *empty_tree;
@@ -305,9 +291,32 @@ struct git_hash_algo {
/* The all-zeros OID. */
const struct object_id *null_oid;
+
+ /* The unsafe variant of this hash function, if one exists. */
+ const struct git_hash_algo *unsafe;
};
extern const struct git_hash_algo hash_algos[GIT_HASH_NALGOS];
+static inline void git_hash_clone(struct git_hash_ctx *dst, const struct git_hash_ctx *src)
+{
+ src->algop->clone_fn(dst, src);
+}
+
+static inline void git_hash_update(struct git_hash_ctx *ctx, const void *in, size_t len)
+{
+ ctx->algop->update_fn(ctx, in, len);
+}
+
+static inline void git_hash_final(unsigned char *hash, struct git_hash_ctx *ctx)
+{
+ ctx->algop->final_fn(hash, ctx);
+}
+
+static inline void git_hash_final_oid(struct object_id *oid, struct git_hash_ctx *ctx)
+{
+ ctx->algop->final_oid_fn(oid, ctx);
+}
+
/*
* Return a GIT_HASH_* constant based on the name. Returns GIT_HASH_UNKNOWN if
* the name doesn't match a known algorithm.
@@ -320,9 +329,17 @@ int hash_algo_by_length(int len);
/* Identical, except for a pointer to struct git_hash_algo. */
static inline int hash_algo_by_ptr(const struct git_hash_algo *p)
{
- return p - hash_algos;
+ size_t i;
+ for (i = 0; i < GIT_HASH_NALGOS; i++) {
+ const struct git_hash_algo *algop = &hash_algos[i];
+ if (p == algop)
+ return i;
+ }
+ return GIT_HASH_UNKNOWN;
}
+const struct git_hash_algo *unsafe_hash_algo(const struct git_hash_algo *algop);
+
const struct object_id *null_oid(void);
static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2, const struct git_hash_algo *algop)
diff --git a/help.c b/help.c
index 5483ea8fd2..8d91afe851 100644
--- a/help.c
+++ b/help.c
@@ -552,10 +552,34 @@ struct help_unknown_cmd_config {
struct cmdnames aliases;
};
+#define AUTOCORRECT_SHOW (-4)
#define AUTOCORRECT_PROMPT (-3)
#define AUTOCORRECT_NEVER (-2)
#define AUTOCORRECT_IMMEDIATELY (-1)
+static int parse_autocorrect(const char *value)
+{
+ switch (git_parse_maybe_bool_text(value)) {
+ case 1:
+ return AUTOCORRECT_IMMEDIATELY;
+ case 0:
+ return AUTOCORRECT_SHOW;
+ default: /* other random text */
+ break;
+ }
+
+ if (!strcmp(value, "prompt"))
+ return AUTOCORRECT_PROMPT;
+ if (!strcmp(value, "never"))
+ return AUTOCORRECT_NEVER;
+ if (!strcmp(value, "immediate"))
+ return AUTOCORRECT_IMMEDIATELY;
+ if (!strcmp(value, "show"))
+ return AUTOCORRECT_SHOW;
+
+ return 0;
+}
+
static int git_unknown_cmd_config(const char *var, const char *value,
const struct config_context *ctx,
void *cb)
@@ -564,20 +588,17 @@ static int git_unknown_cmd_config(const char *var, const char *value,
const char *p;
if (!strcmp(var, "help.autocorrect")) {
- if (!value)
- return config_error_nonbool(var);
- if (!strcmp(value, "never")) {
- cfg->autocorrect = AUTOCORRECT_NEVER;
- } else if (!strcmp(value, "immediate")) {
- cfg->autocorrect = AUTOCORRECT_IMMEDIATELY;
- } else if (!strcmp(value, "prompt")) {
- cfg->autocorrect = AUTOCORRECT_PROMPT;
- } else {
- int v = git_config_int(var, value, ctx->kvi);
- cfg->autocorrect = (v < 0)
- ? AUTOCORRECT_IMMEDIATELY : v;
+ int v = parse_autocorrect(value);
+
+ if (!v) {
+ v = git_config_int(var, value, ctx->kvi);
+ if (v < 0 || v == 1)
+ v = AUTOCORRECT_IMMEDIATELY;
}
+
+ cfg->autocorrect = v;
}
+
/* Also use aliases for command lookup */
if (skip_prefix(var, "alias.", &p))
add_cmdname(&cfg->aliases, p, strlen(p));
@@ -695,7 +716,8 @@ char *help_unknown_cmd(const char *cmd)
n++)
; /* still counting */
}
- if (cfg.autocorrect && n == 1 && SIMILAR_ENOUGH(best_similarity)) {
+ if (cfg.autocorrect && cfg.autocorrect != AUTOCORRECT_SHOW && n == 1 &&
+ SIMILAR_ENOUGH(best_similarity)) {
char *assumed = xstrdup(main_cmds.names[0]->name);
fprintf_ln(stderr,
diff --git a/http-push.c b/http-push.c
index 43da1c7cd3..1b030d96f4 100644
--- a/http-push.c
+++ b/http-push.c
@@ -760,7 +760,7 @@ static void handle_lockprop_ctx(struct xml_ctx *ctx, int tag_closed)
static void handle_new_lock_ctx(struct xml_ctx *ctx, int tag_closed)
{
struct remote_lock *lock = (struct remote_lock *)ctx->userData;
- git_hash_ctx hash_ctx;
+ struct git_hash_ctx hash_ctx;
unsigned char lock_token_hash[GIT_MAX_RAWSZ];
if (tag_closed && ctx->cdata) {
@@ -774,8 +774,8 @@ static void handle_new_lock_ctx(struct xml_ctx *ctx, int tag_closed)
lock->token = xstrdup(ctx->cdata);
the_hash_algo->init_fn(&hash_ctx);
- the_hash_algo->update_fn(&hash_ctx, lock->token, strlen(lock->token));
- the_hash_algo->final_fn(lock_token_hash, &hash_ctx);
+ git_hash_update(&hash_ctx, lock->token, strlen(lock->token));
+ git_hash_final(lock_token_hash, &hash_ctx);
lock->tmpfile_suffix[0] = '_';
memcpy(lock->tmpfile_suffix + 1, hash_to_hex(lock_token_hash), the_hash_algo->hexsz);
diff --git a/http.c b/http.c
index f08b2ae474..f4504133e8 100644
--- a/http.c
+++ b/http.c
@@ -2597,8 +2597,8 @@ static size_t fwrite_sha1_file(char *ptr, size_t eltsize, size_t nmemb,
freq->stream.next_out = expn;
freq->stream.avail_out = sizeof(expn);
freq->zret = git_inflate(&freq->stream, Z_SYNC_FLUSH);
- the_hash_algo->update_fn(&freq->c, expn,
- sizeof(expn) - freq->stream.avail_out);
+ git_hash_update(&freq->c, expn,
+ sizeof(expn) - freq->stream.avail_out);
} while (freq->stream.avail_in && freq->zret == Z_OK);
return nmemb;
}
@@ -2763,7 +2763,7 @@ int finish_http_object_request(struct http_object_request *freq)
return -1;
}
- the_hash_algo->final_oid_fn(&freq->real_oid, &freq->c);
+ git_hash_final_oid(&freq->real_oid, &freq->c);
if (freq->zret != Z_STREAM_END) {
unlink_or_warn(freq->tmpfile.buf);
return -1;
diff --git a/http.h b/http.h
index 46e334c2c2..36202139f4 100644
--- a/http.h
+++ b/http.h
@@ -228,7 +228,7 @@ struct http_object_request {
long http_code;
struct object_id oid;
struct object_id real_oid;
- git_hash_ctx c;
+ struct git_hash_ctx c;
git_zstream stream;
int zret;
int rename;
diff --git a/meson.build b/meson.build
index 548eac62b2..0df3872c6a 100644
--- a/meson.build
+++ b/meson.build
@@ -170,7 +170,22 @@
project('git', 'c',
meson_version: '>=0.61.0',
- version: 'v2.47.GIT',
+ # The version is only of cosmetic nature, so if we cannot find a shell yet we
+ # simply don't set up a version at all. This may be the case for example on
+ # Windows systems, where we first have to bootstrap the host environment.
+ version: find_program('sh', required: false).found() ? run_command(
+ 'GIT-VERSION-GEN', meson.current_source_dir(), '--format=@GIT_VERSION@',
+ capture: true,
+ check: true,
+ ).stdout().strip() : 'unknown',
+ default_options: [
+ # Git requires C99 with GNU extensions, which of course isn't supported by
+ # MSVC. Funny enough, C99 doesn't work with MSVC either, as it has only
+ # learned to define __STDC_VERSION__ with C11 and later. We thus require
+ # GNU C99 and fall back to C11. Meson only learned to handle the fallback
+ # with version 1.3.0, so on older versions we use GNU C99 unconditionally.
+ 'c_std=' + (meson.version().version_compare('>=1.3.0') ? 'gnu99,c11' : 'gnu99'),
+ ],
)
fs = import('fs')
@@ -245,10 +260,11 @@ libgit_sources = [
'commit-graph.c',
'commit-reach.c',
'commit.c',
+ 'common-exit.c',
+ 'common-init.c',
'compat/nonblock.c',
'compat/obstack.c',
'compat/terminal.c',
- 'compat/zlib-uncompress2.c',
'config.c',
'connect.c',
'connected.c',
@@ -481,6 +497,13 @@ libgit_sources = [
'xdiff/xutils.c',
]
+libgit_sources += custom_target(
+ input: 'command-list.txt',
+ output: 'command-list.h',
+ command: [shell, meson.current_source_dir() + '/generate-cmdlist.sh', meson.current_source_dir(), '@OUTPUT@'],
+ env: script_environment,
+)
+
builtin_sources = [
'builtin/add.c',
'builtin/am.c',
@@ -608,14 +631,7 @@ builtin_sources = [
'builtin/write-tree.c',
]
-libgit_sources += custom_target(
- input: 'command-list.txt',
- output: 'command-list.h',
- command: [shell, meson.current_source_dir() + '/generate-cmdlist.sh', meson.current_source_dir(), '@OUTPUT@'],
- env: script_environment,
-)
-
-libgit_sources += custom_target(
+builtin_sources += custom_target(
output: 'config-list.h',
command: [
shell,
@@ -626,8 +642,8 @@ libgit_sources += custom_target(
env: script_environment,
)
-libgit_sources += custom_target(
- input: 'Documentation/githooks.txt',
+builtin_sources += custom_target(
+ input: 'Documentation/githooks.adoc',
output: 'hook-list.h',
command: [
shell,
@@ -651,10 +667,16 @@ build_options_config.set('GIT_TEST_CMP_USE_COPIED_CONTEXT', '')
build_options_config.set('GIT_TEST_INDEX_VERSION', '')
build_options_config.set('GIT_TEST_OPTS', '')
build_options_config.set('GIT_TEST_PERL_FATAL_WARNINGS', '')
-build_options_config.set('GIT_TEST_UTF8_LOCALE', '')
+build_options_config.set_quoted('GIT_TEST_UTF8_LOCALE', get_option('test_utf8_locale'))
build_options_config.set_quoted('LOCALEDIR', fs.as_posix(get_option('prefix') / get_option('localedir')))
build_options_config.set('GITWEBDIR', fs.as_posix(get_option('prefix') / get_option('datadir') / 'gitweb'))
+if get_option('breaking_changes')
+ build_options_config.set('WITH_BREAKING_CHANGES', 'YesPlease')
+else
+ build_options_config.set('WITH_BREAKING_CHANGES', '')
+endif
+
if get_option('sane_tool_path') != ''
build_options_config.set_quoted('BROKEN_PATH_FIX', 's|^\# @BROKEN_PATH_FIX@$|git_broken_path_fix "' + get_option('sane_tool_path') + '"|')
else
@@ -778,11 +800,23 @@ else
build_options_config.set('NO_PERL_CPAN_FALLBACKS', '')
endif
-zlib = dependency('zlib', default_options: ['default_library=static', 'tests=disabled'])
-if zlib.version().version_compare('<1.2.0')
- libgit_c_args += '-DNO_DEFLATE_BOUND'
+zlib_backend = get_option('zlib_backend')
+if zlib_backend in ['auto', 'zlib-ng']
+ zlib_ng = dependency('zlib-ng', required: zlib_backend == 'zlib-ng')
+ if zlib_ng.found()
+ zlib_backend = 'zlib-ng'
+ libgit_c_args += '-DHAVE_ZLIB_NG'
+ libgit_dependencies += zlib_ng
+ endif
+endif
+if zlib_backend in ['auto', 'zlib']
+ zlib = dependency('zlib', default_options: ['default_library=static', 'tests=disabled'])
+ if zlib.version().version_compare('<1.2.0')
+ libgit_c_args += '-DNO_DEFLATE_BOUND'
+ endif
+ zlib_backend = 'zlib'
+ libgit_dependencies += zlib
endif
-libgit_dependencies += zlib
threads = dependency('threads', required: false)
if threads.found()
@@ -1325,6 +1359,7 @@ if not meson.is_cross_build() and fs.exists('/dev/tty')
libgit_c_args += '-DHAVE_DEV_TTY'
endif
+csprng_backend = get_option('csprng_backend')
https_backend = get_option('https_backend')
sha1_backend = get_option('sha1_backend')
sha1_unsafe_backend = get_option('sha1_unsafe_backend')
@@ -1336,7 +1371,7 @@ if https_backend == 'auto' and security_framework.found()
https_backend = 'CommonCrypto'
endif
-openssl_required = 'openssl' in [https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
+openssl_required = 'openssl' in [csprng_backend, https_backend, sha1_backend, sha1_unsafe_backend, sha256_backend]
openssl = dependency('openssl', required: openssl_required, default_options: ['default_library=static'])
if https_backend == 'auto' and openssl.found()
https_backend = 'openssl'
@@ -1421,18 +1456,30 @@ else
error('Unhandled SHA256 backend ' + sha256_backend)
endif
-if compiler.has_header_symbol('stdlib.h', 'arc4random_buf')
+# Backends are ordered to reflect our preference for more secure and faster
+# ones over the ones that are less so.
+if csprng_backend in ['auto', 'arc4random'] and compiler.has_header_symbol('stdlib.h', 'arc4random_buf', required: csprng_backend == 'arc4random')
libgit_c_args += '-DHAVE_ARC4RANDOM'
-elif compiler.has_header_symbol('bsd/stdlib.h', 'arc4random_buf')
+ csprng_backend = 'arc4random'
+elif csprng_backend in ['auto', 'arc4random_bsd'] and compiler.has_header_symbol('bsd/stdlib.h', 'arc4random_buf', required: csprng_backend == 'arc4random_bsd')
libgit_c_args += '-DHAVE_ARC4RANDOM_BSD'
-elif compiler.has_function('getrandom', prefix: '#include <sys/random.h>')
+ csprng_backend = 'arc4random_bsd'
+elif csprng_backend in ['auto', 'getrandom'] and compiler.has_header_symbol('sys/random.h', 'getrandom', required: csprng_backend == 'getrandom')
libgit_c_args += '-DHAVE_GETRANDOM'
-elif compiler.has_function('getentropy', prefix: '#include <unistd.h>')
+ csprng_backend = 'getrandom'
+elif csprng_backend in ['auto', 'getentropy'] and compiler.has_header_symbol('unistd.h', 'getentropy', required: csprng_backend == 'getentropy')
libgit_c_args += '-DHAVE_GETENTROPY'
-elif compiler.has_function('RtlGenRandom', prefix: '#include <windows.h>\n#include <ntsecapi.h>')
+ csprng_backend = 'getentropy'
+elif csprng_backend in ['auto', 'rtlgenrandom'] and compiler.has_header_symbol('ntsecapi.h', 'RtlGenRandom', prefix: '#include <windows.h>', required: csprng_backend == 'rtlgenrandom')
libgit_c_args += '-DHAVE_RTLGENRANDOM'
-elif openssl.found()
+ csprng_backend = 'rtlgenrandom'
+elif csprng_backend in ['auto', 'openssl'] and openssl.found()
libgit_c_args += '-DHAVE_OPENSSL_CSPRNG'
+ csprng_backend = 'openssl'
+elif csprng_backend in ['auto', 'urandom']
+ csprng_backend = 'urandom'
+else
+ error('Unsupported CSPRNG backend: ' + csprng_backend)
endif
if get_option('runtime_prefix')
@@ -1900,6 +1947,10 @@ if get_option('tests')
subdir('t')
endif
+if get_option('fuzzers')
+ subdir('oss-fuzz')
+endif
+
subdir('bin-wrappers')
if get_option('docs') != []
subdir('Documentation')
@@ -1935,6 +1986,27 @@ configure_file(
configuration: build_options_config,
)
+# Development environments can be used via `meson devenv -C <builddir>`. This
+# allows you to execute test scripts directly with the built Git version and
+# puts the built version of Git in your PATH.
+devenv = environment()
+devenv.set('GIT_BUILD_DIR', meson.current_build_dir())
+devenv.prepend('PATH', meson.current_build_dir() / 'bin-wrappers')
+meson.add_devenv(devenv)
+
+# Generate the 'version' file in the distribution tarball. This is used via
+# `meson dist -C <builddir>` to populate the source archive with the Git
+# version that the archive is being generated from.
+meson.add_dist_script(
+ shell,
+ '-c',
+ '"$1" "$2" "$3" --format="@GIT_VERSION@" "$MESON_DIST_ROOT/version"',
+ 'GIT-VERSION-GEN',
+ shell,
+ meson.current_source_dir() / 'GIT-VERSION-GEN',
+ meson.current_source_dir(),
+)
+
summary({
'curl': curl.found(),
'expat': expat.found(),
@@ -1948,8 +2020,10 @@ summary({
}, section: 'Auto-detected features')
summary({
+ 'csprng': csprng_backend,
'https': https_backend,
'sha1': sha1_backend,
'sha1_unsafe': sha1_unsafe_backend,
'sha256': sha256_backend,
+ 'zlib': zlib_backend,
}, section: 'Backends')
diff --git a/meson_options.txt b/meson_options.txt
index c0d72d85a3..5c12e9055e 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -49,6 +49,8 @@ option('regex', type: 'feature', value: 'auto',
description: 'Use the system-provided regex library instead of the bundled one.')
# Backends.
+option('csprng_backend', type: 'combo', value: 'auto', choices: ['auto', 'arc4random', 'arc4random_bsd', 'getrandom', 'getentropy', 'rtlgenrandom', 'openssl', 'urandom'],
+ description: 'The backend to use for generating cryptographically-secure pseudo-random numbers.')
option('https_backend', type: 'combo', value: 'auto', choices: ['auto', 'openssl', 'CommonCrypto', 'none'],
description: 'The HTTPS backend to use when connecting to remotes.')
option('sha1_backend', type: 'combo', choices: ['openssl', 'block', 'sha1dc', 'CommonCrypto'], value: 'sha1dc',
@@ -57,8 +59,12 @@ option('sha1_unsafe_backend', type: 'combo', choices: ['openssl', 'block', 'Comm
description: 'The backend used for hashing data with the SHA1 object format in case no cryptographic security is needed.')
option('sha256_backend', type: 'combo', choices: ['openssl', 'nettle', 'gcrypt', 'block'], value: 'block',
description: 'The backend used for hashing objects with the SHA256 object format.')
+option('zlib_backend', type: 'combo', choices: ['auto', 'zlib', 'zlib-ng'], value: 'auto',
+ description: 'The backend used for compressing objects and other data.')
# Build tweaks.
+option('breaking_changes', type: 'boolean', value: false,
+ description: 'Enable upcoming breaking changes.')
option('macos_use_homebrew_gettext', type: 'boolean', value: true,
description: 'Use gettext from Homebrew instead of the slightly-broken system-provided one.')
@@ -97,3 +103,7 @@ option('tests', type: 'boolean', value: true,
description: 'Enable building tests. This requires Perl, but is separate from the "perl" option such that you can build tests without Perl features enabled.')
option('test_output_directory', type: 'string',
description: 'Path to the directory used to store test outputs')
+option('test_utf8_locale', type: 'string',
+ description: 'Name of a UTF-8 locale used for testing.')
+option('fuzzers', type: 'boolean', value: false,
+ description: 'Enable building fuzzers.')
diff --git a/midx-write.c b/midx-write.c
index b3827b936b..61b59d557d 100644
--- a/midx-write.c
+++ b/midx-write.c
@@ -658,8 +658,8 @@ static void write_midx_reverse_index(char *midx_name, unsigned char *midx_hash,
strbuf_addf(&buf, "%s-%s.rev", midx_name, hash_to_hex_algop(midx_hash,
ctx->repo->hash_algo));
- tmp_file = write_rev_file_order(NULL, ctx->pack_order, ctx->entries_nr,
- midx_hash, WRITE_REV);
+ tmp_file = write_rev_file_order(ctx->repo->hash_algo, NULL, ctx->pack_order,
+ ctx->entries_nr, midx_hash, WRITE_REV);
if (finalize_object_file(tmp_file, buf.buf))
die(_("cannot store reverse index file"));
diff --git a/object-file.c b/object-file.c
index aeca61b8ae..00c3a4b910 100644
--- a/object-file.c
+++ b/object-file.c
@@ -86,84 +86,90 @@ static const struct object_id null_oid_sha256 = {
.algo = GIT_HASH_SHA256,
};
-static void git_hash_sha1_init(git_hash_ctx *ctx)
+static void git_hash_sha1_init(struct git_hash_ctx *ctx)
{
- git_SHA1_Init(&ctx->sha1);
+ ctx->algop = &hash_algos[GIT_HASH_SHA1];
+ git_SHA1_Init(&ctx->state.sha1);
}
-static void git_hash_sha1_clone(git_hash_ctx *dst, const git_hash_ctx *src)
+static void git_hash_sha1_clone(struct git_hash_ctx *dst, const struct git_hash_ctx *src)
{
- git_SHA1_Clone(&dst->sha1, &src->sha1);
+ dst->algop = src->algop;
+ git_SHA1_Clone(&dst->state.sha1, &src->state.sha1);
}
-static void git_hash_sha1_update(git_hash_ctx *ctx, const void *data, size_t len)
+static void git_hash_sha1_update(struct git_hash_ctx *ctx, const void *data, size_t len)
{
- git_SHA1_Update(&ctx->sha1, data, len);
+ git_SHA1_Update(&ctx->state.sha1, data, len);
}
-static void git_hash_sha1_final(unsigned char *hash, git_hash_ctx *ctx)
+static void git_hash_sha1_final(unsigned char *hash, struct git_hash_ctx *ctx)
{
- git_SHA1_Final(hash, &ctx->sha1);
+ git_SHA1_Final(hash, &ctx->state.sha1);
}
-static void git_hash_sha1_final_oid(struct object_id *oid, git_hash_ctx *ctx)
+static void git_hash_sha1_final_oid(struct object_id *oid, struct git_hash_ctx *ctx)
{
- git_SHA1_Final(oid->hash, &ctx->sha1);
+ git_SHA1_Final(oid->hash, &ctx->state.sha1);
memset(oid->hash + GIT_SHA1_RAWSZ, 0, GIT_MAX_RAWSZ - GIT_SHA1_RAWSZ);
oid->algo = GIT_HASH_SHA1;
}
-static void git_hash_sha1_init_unsafe(git_hash_ctx *ctx)
+static void git_hash_sha1_init_unsafe(struct git_hash_ctx *ctx)
{
- git_SHA1_Init_unsafe(&ctx->sha1_unsafe);
+ ctx->algop = unsafe_hash_algo(&hash_algos[GIT_HASH_SHA1]);
+ git_SHA1_Init_unsafe(&ctx->state.sha1_unsafe);
}
-static void git_hash_sha1_clone_unsafe(git_hash_ctx *dst, const git_hash_ctx *src)
+static void git_hash_sha1_clone_unsafe(struct git_hash_ctx *dst, const struct git_hash_ctx *src)
{
- git_SHA1_Clone_unsafe(&dst->sha1_unsafe, &src->sha1_unsafe);
+ dst->algop = src->algop;
+ git_SHA1_Clone_unsafe(&dst->state.sha1_unsafe, &src->state.sha1_unsafe);
}
-static void git_hash_sha1_update_unsafe(git_hash_ctx *ctx, const void *data,
+static void git_hash_sha1_update_unsafe(struct git_hash_ctx *ctx, const void *data,
size_t len)
{
- git_SHA1_Update_unsafe(&ctx->sha1_unsafe, data, len);
+ git_SHA1_Update_unsafe(&ctx->state.sha1_unsafe, data, len);
}
-static void git_hash_sha1_final_unsafe(unsigned char *hash, git_hash_ctx *ctx)
+static void git_hash_sha1_final_unsafe(unsigned char *hash, struct git_hash_ctx *ctx)
{
- git_SHA1_Final_unsafe(hash, &ctx->sha1_unsafe);
+ git_SHA1_Final_unsafe(hash, &ctx->state.sha1_unsafe);
}
-static void git_hash_sha1_final_oid_unsafe(struct object_id *oid, git_hash_ctx *ctx)
+static void git_hash_sha1_final_oid_unsafe(struct object_id *oid, struct git_hash_ctx *ctx)
{
- git_SHA1_Final_unsafe(oid->hash, &ctx->sha1_unsafe);
+ git_SHA1_Final_unsafe(oid->hash, &ctx->state.sha1_unsafe);
memset(oid->hash + GIT_SHA1_RAWSZ, 0, GIT_MAX_RAWSZ - GIT_SHA1_RAWSZ);
oid->algo = GIT_HASH_SHA1;
}
-static void git_hash_sha256_init(git_hash_ctx *ctx)
+static void git_hash_sha256_init(struct git_hash_ctx *ctx)
{
- git_SHA256_Init(&ctx->sha256);
+ ctx->algop = unsafe_hash_algo(&hash_algos[GIT_HASH_SHA256]);
+ git_SHA256_Init(&ctx->state.sha256);
}
-static void git_hash_sha256_clone(git_hash_ctx *dst, const git_hash_ctx *src)
+static void git_hash_sha256_clone(struct git_hash_ctx *dst, const struct git_hash_ctx *src)
{
- git_SHA256_Clone(&dst->sha256, &src->sha256);
+ dst->algop = src->algop;
+ git_SHA256_Clone(&dst->state.sha256, &src->state.sha256);
}
-static void git_hash_sha256_update(git_hash_ctx *ctx, const void *data, size_t len)
+static void git_hash_sha256_update(struct git_hash_ctx *ctx, const void *data, size_t len)
{
- git_SHA256_Update(&ctx->sha256, data, len);
+ git_SHA256_Update(&ctx->state.sha256, data, len);
}
-static void git_hash_sha256_final(unsigned char *hash, git_hash_ctx *ctx)
+static void git_hash_sha256_final(unsigned char *hash, struct git_hash_ctx *ctx)
{
- git_SHA256_Final(hash, &ctx->sha256);
+ git_SHA256_Final(hash, &ctx->state.sha256);
}
-static void git_hash_sha256_final_oid(struct object_id *oid, git_hash_ctx *ctx)
+static void git_hash_sha256_final_oid(struct object_id *oid, struct git_hash_ctx *ctx)
{
- git_SHA256_Final(oid->hash, &ctx->sha256);
+ git_SHA256_Final(oid->hash, &ctx->state.sha256);
/*
* This currently does nothing, so the compiler should optimize it out,
* but keep it in case we extend the hash size again.
@@ -172,18 +178,18 @@ static void git_hash_sha256_final_oid(struct object_id *oid, git_hash_ctx *ctx)
oid->algo = GIT_HASH_SHA256;
}
-static void git_hash_unknown_init(git_hash_ctx *ctx UNUSED)
+static void git_hash_unknown_init(struct git_hash_ctx *ctx UNUSED)
{
BUG("trying to init unknown hash");
}
-static void git_hash_unknown_clone(git_hash_ctx *dst UNUSED,
- const git_hash_ctx *src UNUSED)
+static void git_hash_unknown_clone(struct git_hash_ctx *dst UNUSED,
+ const struct git_hash_ctx *src UNUSED)
{
BUG("trying to clone unknown hash");
}
-static void git_hash_unknown_update(git_hash_ctx *ctx UNUSED,
+static void git_hash_unknown_update(struct git_hash_ctx *ctx UNUSED,
const void *data UNUSED,
size_t len UNUSED)
{
@@ -191,17 +197,33 @@ static void git_hash_unknown_update(git_hash_ctx *ctx UNUSED,
}
static void git_hash_unknown_final(unsigned char *hash UNUSED,
- git_hash_ctx *ctx UNUSED)
+ struct git_hash_ctx *ctx UNUSED)
{
BUG("trying to finalize unknown hash");
}
static void git_hash_unknown_final_oid(struct object_id *oid UNUSED,
- git_hash_ctx *ctx UNUSED)
+ struct git_hash_ctx *ctx UNUSED)
{
BUG("trying to finalize unknown hash");
}
+static const struct git_hash_algo sha1_unsafe_algo = {
+ .name = "sha1",
+ .format_id = GIT_SHA1_FORMAT_ID,
+ .rawsz = GIT_SHA1_RAWSZ,
+ .hexsz = GIT_SHA1_HEXSZ,
+ .blksz = GIT_SHA1_BLKSZ,
+ .init_fn = git_hash_sha1_init_unsafe,
+ .clone_fn = git_hash_sha1_clone_unsafe,
+ .update_fn = git_hash_sha1_update_unsafe,
+ .final_fn = git_hash_sha1_final_unsafe,
+ .final_oid_fn = git_hash_sha1_final_oid_unsafe,
+ .empty_tree = &empty_tree_oid,
+ .empty_blob = &empty_blob_oid,
+ .null_oid = &null_oid_sha1,
+};
+
const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
{
.name = NULL,
@@ -214,11 +236,6 @@ const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
.update_fn = git_hash_unknown_update,
.final_fn = git_hash_unknown_final,
.final_oid_fn = git_hash_unknown_final_oid,
- .unsafe_init_fn = git_hash_unknown_init,
- .unsafe_clone_fn = git_hash_unknown_clone,
- .unsafe_update_fn = git_hash_unknown_update,
- .unsafe_final_fn = git_hash_unknown_final,
- .unsafe_final_oid_fn = git_hash_unknown_final_oid,
.empty_tree = NULL,
.empty_blob = NULL,
.null_oid = NULL,
@@ -234,11 +251,7 @@ const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
.update_fn = git_hash_sha1_update,
.final_fn = git_hash_sha1_final,
.final_oid_fn = git_hash_sha1_final_oid,
- .unsafe_init_fn = git_hash_sha1_init_unsafe,
- .unsafe_clone_fn = git_hash_sha1_clone_unsafe,
- .unsafe_update_fn = git_hash_sha1_update_unsafe,
- .unsafe_final_fn = git_hash_sha1_final_unsafe,
- .unsafe_final_oid_fn = git_hash_sha1_final_oid_unsafe,
+ .unsafe = &sha1_unsafe_algo,
.empty_tree = &empty_tree_oid,
.empty_blob = &empty_blob_oid,
.null_oid = &null_oid_sha1,
@@ -254,11 +267,6 @@ const struct git_hash_algo hash_algos[GIT_HASH_NALGOS] = {
.update_fn = git_hash_sha256_update,
.final_fn = git_hash_sha256_final,
.final_oid_fn = git_hash_sha256_final_oid,
- .unsafe_init_fn = git_hash_sha256_init,
- .unsafe_clone_fn = git_hash_sha256_clone,
- .unsafe_update_fn = git_hash_sha256_update,
- .unsafe_final_fn = git_hash_sha256_final,
- .unsafe_final_oid_fn = git_hash_sha256_final_oid,
.empty_tree = &empty_tree_oid_sha256,
.empty_blob = &empty_blob_oid_sha256,
.null_oid = &null_oid_sha256,
@@ -305,6 +313,15 @@ int hash_algo_by_length(int len)
return GIT_HASH_UNKNOWN;
}
+const struct git_hash_algo *unsafe_hash_algo(const struct git_hash_algo *algop)
+{
+ /* If we have a faster "unsafe" implementation, use that. */
+ if (algop->unsafe)
+ return algop->unsafe;
+ /* Otherwise use the default one. */
+ return algop;
+}
+
/*
* This is meant to hold a *small* number of objects that you would
* want repo_read_object_file() to be able to return, but yet you do not want
@@ -1169,7 +1186,7 @@ int stream_object_signature(struct repository *r, const struct object_id *oid)
unsigned long size;
enum object_type obj_type;
struct git_istream *st;
- git_hash_ctx c;
+ struct git_hash_ctx c;
char hdr[MAX_HEADER_LEN];
int hdrlen;
@@ -1182,7 +1199,7 @@ int stream_object_signature(struct repository *r, const struct object_id *oid)
/* Sha1.. */
r->hash_algo->init_fn(&c);
- r->hash_algo->update_fn(&c, hdr, hdrlen);
+ git_hash_update(&c, hdr, hdrlen);
for (;;) {
char buf[1024 * 16];
ssize_t readlen = read_istream(st, buf, sizeof(buf));
@@ -1193,9 +1210,9 @@ int stream_object_signature(struct repository *r, const struct object_id *oid)
}
if (!readlen)
break;
- r->hash_algo->update_fn(&c, buf, readlen);
+ git_hash_update(&c, buf, readlen);
}
- r->hash_algo->final_oid_fn(&real_oid, &c);
+ git_hash_final_oid(&real_oid, &c);
close_istream(st);
return !oideq(oid, &real_oid) ? -1 : 0;
}
@@ -1934,15 +1951,15 @@ void *read_object_with_reference(struct repository *r,
}
}
-static void hash_object_body(const struct git_hash_algo *algo, git_hash_ctx *c,
+static void hash_object_body(const struct git_hash_algo *algo, struct git_hash_ctx *c,
const void *buf, unsigned long len,
struct object_id *oid,
char *hdr, int *hdrlen)
{
algo->init_fn(c);
- algo->update_fn(c, hdr, *hdrlen);
- algo->update_fn(c, buf, len);
- algo->final_oid_fn(oid, c);
+ git_hash_update(c, hdr, *hdrlen);
+ git_hash_update(c, buf, len);
+ git_hash_final_oid(oid, c);
}
static void write_object_file_prepare(const struct git_hash_algo *algo,
@@ -1950,7 +1967,7 @@ static void write_object_file_prepare(const struct git_hash_algo *algo,
enum object_type type, struct object_id *oid,
char *hdr, int *hdrlen)
{
- git_hash_ctx c;
+ struct git_hash_ctx c;
/* Generate the header */
*hdrlen = format_object_header(hdr, *hdrlen, type, len);
@@ -1964,7 +1981,7 @@ static void write_object_file_prepare_literally(const struct git_hash_algo *algo
const char *type, struct object_id *oid,
char *hdr, int *hdrlen)
{
- git_hash_ctx c;
+ struct git_hash_ctx c;
*hdrlen = format_object_header_literally(hdr, *hdrlen, type, len);
hash_object_body(algo, &c, buf, len, oid, hdr, hdrlen);
@@ -2195,7 +2212,7 @@ static int start_loose_object_common(struct strbuf *tmp_file,
const char *filename, unsigned flags,
git_zstream *stream,
unsigned char *buf, size_t buflen,
- git_hash_ctx *c, git_hash_ctx *compat_c,
+ struct git_hash_ctx *c, struct git_hash_ctx *compat_c,
char *hdr, int hdrlen)
{
struct repository *repo = the_repository;
@@ -2229,9 +2246,9 @@ static int start_loose_object_common(struct strbuf *tmp_file,
stream->avail_in = hdrlen;
while (git_deflate(stream, 0) == Z_OK)
; /* nothing */
- algo->update_fn(c, hdr, hdrlen);
+ git_hash_update(c, hdr, hdrlen);
if (compat && compat_c)
- compat->update_fn(compat_c, hdr, hdrlen);
+ git_hash_update(compat_c, hdr, hdrlen);
return fd;
}
@@ -2240,21 +2257,20 @@ static int start_loose_object_common(struct strbuf *tmp_file,
* Common steps for the inner git_deflate() loop for writing loose
* objects. Returns what git_deflate() returns.
*/
-static int write_loose_object_common(git_hash_ctx *c, git_hash_ctx *compat_c,
+static int write_loose_object_common(struct git_hash_ctx *c, struct git_hash_ctx *compat_c,
git_zstream *stream, const int flush,
unsigned char *in0, const int fd,
unsigned char *compressed,
const size_t compressed_len)
{
struct repository *repo = the_repository;
- const struct git_hash_algo *algo = repo->hash_algo;
const struct git_hash_algo *compat = repo->compat_hash_algo;
int ret;
ret = git_deflate(stream, flush ? Z_FINISH : 0);
- algo->update_fn(c, in0, stream->next_in - in0);
+ git_hash_update(c, in0, stream->next_in - in0);
if (compat && compat_c)
- compat->update_fn(compat_c, in0, stream->next_in - in0);
+ git_hash_update(compat_c, in0, stream->next_in - in0);
if (write_in_full(fd, compressed, stream->next_out - compressed) < 0)
die_errno(_("unable to write loose object file"));
stream->next_out = compressed;
@@ -2269,21 +2285,20 @@ static int write_loose_object_common(git_hash_ctx *c, git_hash_ctx *compat_c,
* - End the compression of zlib stream.
* - Get the calculated oid to "oid".
*/
-static int end_loose_object_common(git_hash_ctx *c, git_hash_ctx *compat_c,
+static int end_loose_object_common(struct git_hash_ctx *c, struct git_hash_ctx *compat_c,
git_zstream *stream, struct object_id *oid,
struct object_id *compat_oid)
{
struct repository *repo = the_repository;
- const struct git_hash_algo *algo = repo->hash_algo;
const struct git_hash_algo *compat = repo->compat_hash_algo;
int ret;
ret = git_deflate_end_gently(stream);
if (ret != Z_OK)
return ret;
- algo->final_oid_fn(oid, c);
+ git_hash_final_oid(oid, c);
if (compat && compat_c)
- compat->final_oid_fn(compat_oid, compat_c);
+ git_hash_final_oid(compat_oid, compat_c);
return Z_OK;
}
@@ -2295,7 +2310,7 @@ static int write_loose_object(const struct object_id *oid, char *hdr,
int fd, ret;
unsigned char compressed[4096];
git_zstream stream;
- git_hash_ctx c;
+ struct git_hash_ctx c;
struct object_id parano_oid;
static struct strbuf tmp_file = STRBUF_INIT;
static struct strbuf filename = STRBUF_INIT;
@@ -2375,7 +2390,7 @@ int stream_loose_object(struct input_stream *in_stream, size_t len,
int fd, ret, err = 0, flush = 0;
unsigned char compressed[4096];
git_zstream stream;
- git_hash_ctx c, compat_c;
+ struct git_hash_ctx c, compat_c;
struct strbuf tmp_file = STRBUF_INIT;
struct strbuf filename = STRBUF_INIT;
int dirlen;
@@ -3035,14 +3050,14 @@ static int check_stream_oid(git_zstream *stream,
const char *path,
const struct object_id *expected_oid)
{
- git_hash_ctx c;
+ struct git_hash_ctx c;
struct object_id real_oid;
unsigned char buf[4096];
unsigned long total_read;
int status = Z_OK;
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, hdr, stream->total_out);
+ git_hash_update(&c, hdr, stream->total_out);
/*
* We already read some bytes into hdr, but the ones up to the NUL
@@ -3062,7 +3077,7 @@ static int check_stream_oid(git_zstream *stream,
if (size - total_read < stream->avail_out)
stream->avail_out = size - total_read;
status = git_inflate(stream, Z_FINISH);
- the_hash_algo->update_fn(&c, buf, stream->next_out - buf);
+ git_hash_update(&c, buf, stream->next_out - buf);
total_read += stream->next_out - buf;
}
git_inflate_end(stream);
@@ -3077,7 +3092,7 @@ static int check_stream_oid(git_zstream *stream,
return -1;
}
- the_hash_algo->final_oid_fn(&real_oid, &c);
+ git_hash_final_oid(&real_oid, &c);
if (!oideq(expected_oid, &real_oid)) {
error(_("hash mismatch for %s (expected %s)"), path,
oid_to_hex(expected_oid));
diff --git a/oss-fuzz/meson.build b/oss-fuzz/meson.build
new file mode 100644
index 0000000000..ed79665501
--- /dev/null
+++ b/oss-fuzz/meson.build
@@ -0,0 +1,20 @@
+fuzz_programs = [
+ 'fuzz-commit-graph.c',
+ 'fuzz-config.c',
+ 'fuzz-credential-from-url-gently.c',
+ 'fuzz-date.c',
+ 'fuzz-pack-headers.c',
+ 'fuzz-pack-idx.c',
+ 'fuzz-parse-attr-line.c',
+ 'fuzz-url-decode-mem.c',
+]
+
+foreach fuzz_program : fuzz_programs
+ executable(fs.stem(fuzz_program),
+ sources: [
+ 'dummy-cmd-main.c',
+ fuzz_program,
+ ],
+ dependencies: [libgit, common_main],
+ )
+endforeach
diff --git a/pack-check.c b/pack-check.c
index 8d9f6da7ce..d0aeb5ec41 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -58,7 +58,7 @@ static int verify_packfile(struct repository *r,
{
off_t index_size = p->index_size;
const unsigned char *index_base = p->index_data;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
unsigned char hash[GIT_MAX_RAWSZ], *pack_sig;
off_t offset = 0, pack_sig_ofs = 0;
uint32_t nr_objects, i;
@@ -77,9 +77,9 @@ static int verify_packfile(struct repository *r,
pack_sig_ofs = p->pack_size - r->hash_algo->rawsz;
if (offset > pack_sig_ofs)
remaining -= (unsigned int)(offset - pack_sig_ofs);
- r->hash_algo->update_fn(&ctx, in, remaining);
+ git_hash_update(&ctx, in, remaining);
} while (offset < pack_sig_ofs);
- r->hash_algo->final_fn(hash, &ctx);
+ git_hash_final(hash, &ctx);
pack_sig = use_pack(p, w_curs, pack_sig_ofs, NULL);
if (!hasheq(hash, pack_sig, the_repository->hash_algo))
err = error("%s pack checksum mismatch",
diff --git a/pack-objects.h b/pack-objects.h
index 3f6f504203..d73e3843c9 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -208,6 +208,34 @@ static inline uint32_t pack_name_hash(const char *name)
return hash;
}
+static inline uint32_t pack_name_hash_v2(const unsigned char *name)
+{
+ uint32_t hash = 0, base = 0, c;
+
+ if (!name)
+ return 0;
+
+ while ((c = *name++)) {
+ if (isspace(c))
+ continue;
+ if (c == '/') {
+ base = (base >> 6) ^ hash;
+ hash = 0;
+ } else {
+ /*
+ * 'c' is only a single byte. Reverse it and move
+ * it to the top of the hash, moving the rest to
+ * less-significant bits.
+ */
+ c = (c & 0xF0) >> 4 | (c & 0x0F) << 4;
+ c = (c & 0xCC) >> 2 | (c & 0x33) << 2;
+ c = (c & 0xAA) >> 1 | (c & 0x55) << 1;
+ hash = (hash >> 2) + (c << 24);
+ }
+ }
+ return (base >> 6) ^ hash;
+}
+
static inline enum object_type oe_type(const struct object_entry *e)
{
return e->type_valid ? e->type_ : OBJ_BAD;
diff --git a/pack-write.c b/pack-write.c
index 98a8c0e785..d61e29ba4e 100644
--- a/pack-write.c
+++ b/pack-write.c
@@ -1,5 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
#include "git-compat-util.h"
#include "environment.h"
#include "gettext.h"
@@ -56,7 +54,8 @@ static int need_large_offset(off_t offset, const struct pack_idx_option *opts)
* The *sha1 contains the pack content SHA1 hash.
* The objects array passed in will be sorted by SHA1 on exit.
*/
-const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects,
+const char *write_idx_file(const struct git_hash_algo *hash_algo,
+ const char *index_name, struct pack_idx_entry **objects,
int nr_objects, const struct pack_idx_option *opts,
const unsigned char *sha1)
{
@@ -130,7 +129,7 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec
struct pack_idx_entry *obj = *list++;
if (index_version < 2)
hashwrite_be32(f, obj->offset);
- hashwrite(f, obj->oid.hash, the_hash_algo->rawsz);
+ hashwrite(f, obj->oid.hash, hash_algo->rawsz);
if ((opts->flags & WRITE_IDX_STRICT) &&
(i && oideq(&list[-2]->oid, &obj->oid)))
die("The same object %s appears twice in the pack",
@@ -172,7 +171,7 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec
}
}
- hashwrite(f, sha1, the_hash_algo->rawsz);
+ hashwrite(f, sha1, hash_algo->rawsz);
finalize_hashfile(f, NULL, FSYNC_COMPONENT_PACK_METADATA,
CSUM_HASH_IN_STREAM | CSUM_CLOSE |
((opts->flags & WRITE_IDX_VERIFY) ? 0 : CSUM_FSYNC));
@@ -193,11 +192,12 @@ static int pack_order_cmp(const void *va, const void *vb, void *ctx)
return 0;
}
-static void write_rev_header(struct hashfile *f)
+static void write_rev_header(const struct git_hash_algo *hash_algo,
+ struct hashfile *f)
{
hashwrite_be32(f, RIDX_SIGNATURE);
hashwrite_be32(f, RIDX_VERSION);
- hashwrite_be32(f, oid_version(the_hash_algo));
+ hashwrite_be32(f, oid_version(hash_algo));
}
static void write_rev_index_positions(struct hashfile *f,
@@ -209,12 +209,14 @@ static void write_rev_index_positions(struct hashfile *f,
hashwrite_be32(f, pack_order[i]);
}
-static void write_rev_trailer(struct hashfile *f, const unsigned char *hash)
+static void write_rev_trailer(const struct git_hash_algo *hash_algo,
+ struct hashfile *f, const unsigned char *hash)
{
- hashwrite(f, hash, the_hash_algo->rawsz);
+ hashwrite(f, hash, hash_algo->rawsz);
}
-char *write_rev_file(const char *rev_name,
+char *write_rev_file(const struct git_hash_algo *hash_algo,
+ const char *rev_name,
struct pack_idx_entry **objects,
uint32_t nr_objects,
const unsigned char *hash,
@@ -232,15 +234,16 @@ char *write_rev_file(const char *rev_name,
pack_order[i] = i;
QSORT_S(pack_order, nr_objects, pack_order_cmp, objects);
- ret = write_rev_file_order(rev_name, pack_order, nr_objects, hash,
- flags);
+ ret = write_rev_file_order(hash_algo, rev_name, pack_order, nr_objects,
+ hash, flags);
free(pack_order);
return ret;
}
-char *write_rev_file_order(const char *rev_name,
+char *write_rev_file_order(const struct git_hash_algo *hash_algo,
+ const char *rev_name,
uint32_t *pack_order,
uint32_t nr_objects,
const unsigned char *hash,
@@ -279,10 +282,10 @@ char *write_rev_file_order(const char *rev_name,
return NULL;
}
- write_rev_header(f);
+ write_rev_header(hash_algo, f);
write_rev_index_positions(f, pack_order, nr_objects);
- write_rev_trailer(f, hash);
+ write_rev_trailer(hash_algo, f, hash);
if (adjust_shared_perm(path) < 0)
die(_("failed to make %s readable"), path);
@@ -294,11 +297,12 @@ char *write_rev_file_order(const char *rev_name,
return path;
}
-static void write_mtimes_header(struct hashfile *f)
+static void write_mtimes_header(const struct git_hash_algo *hash_algo,
+ struct hashfile *f)
{
hashwrite_be32(f, MTIMES_SIGNATURE);
hashwrite_be32(f, MTIMES_VERSION);
- hashwrite_be32(f, oid_version(the_hash_algo));
+ hashwrite_be32(f, oid_version(hash_algo));
}
/*
@@ -318,12 +322,14 @@ static void write_mtimes_objects(struct hashfile *f,
}
}
-static void write_mtimes_trailer(struct hashfile *f, const unsigned char *hash)
+static void write_mtimes_trailer(const struct git_hash_algo *hash_algo,
+ struct hashfile *f, const unsigned char *hash)
{
- hashwrite(f, hash, the_hash_algo->rawsz);
+ hashwrite(f, hash, hash_algo->rawsz);
}
-static char *write_mtimes_file(struct packing_data *to_pack,
+static char *write_mtimes_file(const struct git_hash_algo *hash_algo,
+ struct packing_data *to_pack,
struct pack_idx_entry **objects,
uint32_t nr_objects,
const unsigned char *hash)
@@ -340,9 +346,9 @@ static char *write_mtimes_file(struct packing_data *to_pack,
mtimes_name = strbuf_detach(&tmp_file, NULL);
f = hashfd(fd, mtimes_name);
- write_mtimes_header(f);
+ write_mtimes_header(hash_algo, f);
write_mtimes_objects(f, to_pack, objects, nr_objects);
- write_mtimes_trailer(f, hash);
+ write_mtimes_trailer(hash_algo, f, hash);
if (adjust_shared_perm(mtimes_name) < 0)
die(_("failed to make %s readable"), mtimes_name);
@@ -380,7 +386,8 @@ off_t write_pack_header(struct hashfile *f, uint32_t nr_entries)
* partial_pack_sha1 can refer to the same buffer if the caller is not
* interested in the resulting SHA1 of pack data above partial_pack_offset.
*/
-void fixup_pack_header_footer(int pack_fd,
+void fixup_pack_header_footer(const struct git_hash_algo *hash_algo,
+ int pack_fd,
unsigned char *new_pack_hash,
const char *pack_name,
uint32_t object_count,
@@ -388,13 +395,13 @@ void fixup_pack_header_footer(int pack_fd,
off_t partial_pack_offset)
{
int aligned_sz, buf_sz = 8 * 1024;
- git_hash_ctx old_hash_ctx, new_hash_ctx;
+ struct git_hash_ctx old_hash_ctx, new_hash_ctx;
struct pack_header hdr;
char *buf;
ssize_t read_result;
- the_hash_algo->init_fn(&old_hash_ctx);
- the_hash_algo->init_fn(&new_hash_ctx);
+ hash_algo->init_fn(&old_hash_ctx);
+ hash_algo->init_fn(&new_hash_ctx);
if (lseek(pack_fd, 0, SEEK_SET) != 0)
die_errno("Failed seeking to start of '%s'", pack_name);
@@ -406,9 +413,9 @@ void fixup_pack_header_footer(int pack_fd,
pack_name);
if (lseek(pack_fd, 0, SEEK_SET) != 0)
die_errno("Failed seeking to start of '%s'", pack_name);
- the_hash_algo->update_fn(&old_hash_ctx, &hdr, sizeof(hdr));
+ git_hash_update(&old_hash_ctx, &hdr, sizeof(hdr));
hdr.hdr_entries = htonl(object_count);
- the_hash_algo->update_fn(&new_hash_ctx, &hdr, sizeof(hdr));
+ git_hash_update(&new_hash_ctx, &hdr, sizeof(hdr));
write_or_die(pack_fd, &hdr, sizeof(hdr));
partial_pack_offset -= sizeof(hdr);
@@ -423,7 +430,7 @@ void fixup_pack_header_footer(int pack_fd,
break;
if (n < 0)
die_errno("Failed to checksum '%s'", pack_name);
- the_hash_algo->update_fn(&new_hash_ctx, buf, n);
+ git_hash_update(&new_hash_ctx, buf, n);
aligned_sz -= n;
if (!aligned_sz)
@@ -432,13 +439,13 @@ void fixup_pack_header_footer(int pack_fd,
if (!partial_pack_hash)
continue;
- the_hash_algo->update_fn(&old_hash_ctx, buf, n);
+ git_hash_update(&old_hash_ctx, buf, n);
partial_pack_offset -= n;
if (partial_pack_offset == 0) {
unsigned char hash[GIT_MAX_RAWSZ];
- the_hash_algo->final_fn(hash, &old_hash_ctx);
+ git_hash_final(hash, &old_hash_ctx);
if (!hasheq(hash, partial_pack_hash,
- the_repository->hash_algo))
+ hash_algo))
die("Unexpected checksum for %s "
"(disk corruption?)", pack_name);
/*
@@ -446,7 +453,7 @@ void fixup_pack_header_footer(int pack_fd,
* pack, which also means making partial_pack_offset
* big enough not to matter anymore.
*/
- the_hash_algo->init_fn(&old_hash_ctx);
+ hash_algo->init_fn(&old_hash_ctx);
partial_pack_offset = ~partial_pack_offset;
partial_pack_offset -= MSB(partial_pack_offset, 1);
}
@@ -454,16 +461,16 @@ void fixup_pack_header_footer(int pack_fd,
free(buf);
if (partial_pack_hash)
- the_hash_algo->final_fn(partial_pack_hash, &old_hash_ctx);
- the_hash_algo->final_fn(new_pack_hash, &new_hash_ctx);
- write_or_die(pack_fd, new_pack_hash, the_hash_algo->rawsz);
+ git_hash_final(partial_pack_hash, &old_hash_ctx);
+ git_hash_final(new_pack_hash, &new_hash_ctx);
+ write_or_die(pack_fd, new_pack_hash, hash_algo->rawsz);
fsync_component_or_die(FSYNC_COMPONENT_PACK, pack_fd, pack_name);
}
-char *index_pack_lockfile(int ip_out, int *is_well_formed)
+char *index_pack_lockfile(struct repository *r, int ip_out, int *is_well_formed)
{
char packname[GIT_MAX_HEXSZ + 6];
- const int len = the_hash_algo->hexsz + 6;
+ const int len = r->hash_algo->hexsz + 6;
/*
* The first thing we expect from index-pack's output
@@ -480,7 +487,7 @@ char *index_pack_lockfile(int ip_out, int *is_well_formed)
packname[len-1] = 0;
if (skip_prefix(packname, "keep\t", &name))
return xstrfmt("%s/pack/pack-%s.keep",
- repo_get_object_directory(the_repository), name);
+ repo_get_object_directory(r), name);
return NULL;
}
if (is_well_formed)
@@ -546,7 +553,8 @@ void rename_tmp_packfile_idx(struct strbuf *name_buffer,
rename_tmp_packfile(name_buffer, *idx_tmp_name, "idx");
}
-void stage_tmp_packfiles(struct strbuf *name_buffer,
+void stage_tmp_packfiles(const struct git_hash_algo *hash_algo,
+ struct strbuf *name_buffer,
const char *pack_tmp_name,
struct pack_idx_entry **written_list,
uint32_t nr_written,
@@ -561,17 +569,17 @@ void stage_tmp_packfiles(struct strbuf *name_buffer,
if (adjust_shared_perm(pack_tmp_name))
die_errno("unable to make temporary pack file readable");
- *idx_tmp_name = (char *)write_idx_file(NULL, written_list, nr_written,
- pack_idx_opts, hash);
+ *idx_tmp_name = (char *)write_idx_file(hash_algo, NULL, written_list,
+ nr_written, pack_idx_opts, hash);
if (adjust_shared_perm(*idx_tmp_name))
die_errno("unable to make temporary index file readable");
- rev_tmp_name = write_rev_file(NULL, written_list, nr_written, hash,
- pack_idx_opts->flags);
+ rev_tmp_name = write_rev_file(hash_algo, NULL, written_list, nr_written,
+ hash, pack_idx_opts->flags);
if (pack_idx_opts->flags & WRITE_MTIMES) {
- mtimes_tmp_name = write_mtimes_file(to_pack, written_list,
- nr_written,
+ mtimes_tmp_name = write_mtimes_file(hash_algo, to_pack,
+ written_list, nr_written,
hash);
}
diff --git a/pack.h b/pack.h
index 78f8d8b213..9f1194ac13 100644
--- a/pack.h
+++ b/pack.h
@@ -87,20 +87,37 @@ struct progress;
/* Note, the data argument could be NULL if object type is blob */
typedef int (*verify_fn)(const struct object_id *, enum object_type, unsigned long, void*, int*);
-const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects, int nr_objects, const struct pack_idx_option *, const unsigned char *sha1);
+const char *write_idx_file(const struct git_hash_algo *hash_algo,
+ const char *index_name,
+ struct pack_idx_entry **objects,
+ int nr_objects,
+ const struct pack_idx_option *,
+ const unsigned char *sha1);
int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);
int verify_pack_index(struct packed_git *);
int verify_pack(struct repository *, struct packed_git *, verify_fn fn, struct progress *, uint32_t);
off_t write_pack_header(struct hashfile *f, uint32_t);
-void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
-char *index_pack_lockfile(int fd, int *is_well_formed);
+void fixup_pack_header_footer(const struct git_hash_algo *, int,
+ unsigned char *, const char *, uint32_t,
+ unsigned char *, off_t);
+char *index_pack_lockfile(struct repository *r, int fd, int *is_well_formed);
struct ref;
void write_promisor_file(const char *promisor_name, struct ref **sought, int nr_sought);
-char *write_rev_file(const char *rev_name, struct pack_idx_entry **objects, uint32_t nr_objects, const unsigned char *hash, unsigned flags);
-char *write_rev_file_order(const char *rev_name, uint32_t *pack_order, uint32_t nr_objects, const unsigned char *hash, unsigned flags);
+char *write_rev_file(const struct git_hash_algo *hash_algo,
+ const char *rev_name,
+ struct pack_idx_entry **objects,
+ uint32_t nr_objects,
+ const unsigned char *hash,
+ unsigned flags);
+char *write_rev_file_order(const struct git_hash_algo *hash_algo,
+ const char *rev_name,
+ uint32_t *pack_order,
+ uint32_t nr_objects,
+ const unsigned char *hash,
+ unsigned flags);
/*
* The "hdr" output buffer should be at least this big, which will handle sizes
@@ -118,7 +135,8 @@ int read_pack_header(int fd, struct pack_header *);
struct packing_data;
struct hashfile *create_tmp_packfile(char **pack_tmp_name);
-void stage_tmp_packfiles(struct strbuf *name_buffer,
+void stage_tmp_packfiles(const struct git_hash_algo *hash_algo,
+ struct strbuf *name_buffer,
const char *pack_tmp_name,
struct pack_idx_entry **written_list,
uint32_t nr_written,
diff --git a/parse-options.h b/parse-options.h
index 39f0886254..fca944d9a9 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -436,6 +436,15 @@ static inline void die_for_incompatible_opt3(int opt1, const char *opt1_name,
0, "");
}
+static inline void die_for_incompatible_opt2(int opt1, const char *opt1_name,
+ int opt2, const char *opt2_name)
+{
+ die_for_incompatible_opt4(opt1, opt1_name,
+ opt2, opt2_name,
+ 0, "",
+ 0, "");
+}
+
/*
* Use these assertions for callbacks that expect to be called with NONEG and
* NOARG respectively, and do not otherwise handle the "unset" and "arg"
diff --git a/read-cache.c b/read-cache.c
index d54be2c172..7ef01c3806 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1717,7 +1717,7 @@ int verify_ce_order;
static int verify_hdr(const struct cache_header *hdr, unsigned long size)
{
- git_hash_ctx c;
+ struct git_hash_ctx c;
unsigned char hash[GIT_MAX_RAWSZ];
int hdr_version;
unsigned char *start, *end;
@@ -1739,8 +1739,8 @@ static int verify_hdr(const struct cache_header *hdr, unsigned long size)
return 0;
the_hash_algo->init_fn(&c);
- the_hash_algo->update_fn(&c, hdr, size - the_hash_algo->rawsz);
- the_hash_algo->final_fn(hash, &c);
+ git_hash_update(&c, hdr, size - the_hash_algo->rawsz);
+ git_hash_final(hash, &c);
if (!hasheq(hash, start, the_repository->hash_algo))
return error(_("bad index file sha1 signature"));
return 0;
@@ -2002,7 +2002,7 @@ static struct index_entry_offset_table *read_ieot_extension(const char *mmap, si
static void write_ieot_extension(struct strbuf *sb, struct index_entry_offset_table *ieot);
static size_t read_eoie_extension(const char *mmap, size_t mmap_size);
-static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, size_t offset);
+static void write_eoie_extension(struct strbuf *sb, struct git_hash_ctx *eoie_context, size_t offset);
struct load_index_extensions
{
@@ -2566,7 +2566,7 @@ int repo_index_has_changes(struct repository *repo,
}
static int write_index_ext_header(struct hashfile *f,
- git_hash_ctx *eoie_f,
+ struct git_hash_ctx *eoie_f,
unsigned int ext,
unsigned int sz)
{
@@ -2576,8 +2576,8 @@ static int write_index_ext_header(struct hashfile *f,
if (eoie_f) {
ext = htonl(ext);
sz = htonl(sz);
- the_hash_algo->update_fn(eoie_f, &ext, sizeof(ext));
- the_hash_algo->update_fn(eoie_f, &sz, sizeof(sz));
+ git_hash_update(eoie_f, &ext, sizeof(ext));
+ git_hash_update(eoie_f, &sz, sizeof(sz));
}
return 0;
}
@@ -2831,7 +2831,7 @@ static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
{
uint64_t start = getnanotime();
struct hashfile *f;
- git_hash_ctx *eoie_c = NULL;
+ struct git_hash_ctx *eoie_c = NULL;
struct cache_header hdr;
int i, err = 0, removed, extended, hdr_version;
struct cache_entry **cache = istate->cache;
@@ -3579,7 +3579,7 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
uint32_t extsize;
size_t offset, src_offset;
unsigned char hash[GIT_MAX_RAWSZ];
- git_hash_ctx c;
+ struct git_hash_ctx c;
/* ensure we have an index big enough to contain an EOIE extension */
if (mmap_size < sizeof(struct cache_header) + EOIE_SIZE_WITH_HEADER + the_hash_algo->rawsz)
@@ -3634,12 +3634,12 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
if (src_offset + 8 + extsize < src_offset)
return 0;
- the_hash_algo->update_fn(&c, mmap + src_offset, 8);
+ git_hash_update(&c, mmap + src_offset, 8);
src_offset += 8;
src_offset += extsize;
}
- the_hash_algo->final_fn(hash, &c);
+ git_hash_final(hash, &c);
if (!hasheq(hash, (const unsigned char *)index, the_repository->hash_algo))
return 0;
@@ -3650,7 +3650,7 @@ static size_t read_eoie_extension(const char *mmap, size_t mmap_size)
return offset;
}
-static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context, size_t offset)
+static void write_eoie_extension(struct strbuf *sb, struct git_hash_ctx *eoie_context, size_t offset)
{
uint32_t buffer;
unsigned char hash[GIT_MAX_RAWSZ];
@@ -3660,7 +3660,7 @@ static void write_eoie_extension(struct strbuf *sb, git_hash_ctx *eoie_context,
strbuf_add(sb, &buffer, sizeof(uint32_t));
/* hash */
- the_hash_algo->final_fn(hash, eoie_context);
+ git_hash_final(hash, eoie_context);
strbuf_add(sb, hash, the_hash_algo->rawsz);
}
diff --git a/refs.c b/refs.c
index 37b8cfb90c..f4094a326a 100644
--- a/refs.c
+++ b/refs.c
@@ -1345,6 +1345,13 @@ int ref_transaction_update_reflog(struct ref_transaction *transaction,
update->flags &= ~REF_HAVE_OLD;
update->index = index;
+ /*
+ * Reference backends may need to know the max index to optimize
+ * their writes. So we store the max_index on the transaction level.
+ */
+ if (index > transaction->max_index)
+ transaction->max_index = index;
+
return 0;
}
diff --git a/refs/refs-internal.h b/refs/refs-internal.h
index 16550862d3..aaab711bb9 100644
--- a/refs/refs-internal.h
+++ b/refs/refs-internal.h
@@ -203,6 +203,7 @@ struct ref_transaction {
enum ref_transaction_state state;
void *backend_data;
unsigned int flags;
+ unsigned int max_index;
};
/*
diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c
index 00d95a9a2f..d39a14c5a4 100644
--- a/refs/reftable-backend.c
+++ b/refs/reftable-backend.c
@@ -942,6 +942,7 @@ struct write_transaction_table_arg {
size_t updates_nr;
size_t updates_alloc;
size_t updates_expected;
+ unsigned int max_index;
};
struct reftable_transaction_data {
@@ -1019,6 +1020,7 @@ static int prepare_transaction_update(struct write_transaction_table_arg **out,
arg->updates_nr = 0;
arg->updates_alloc = 0;
arg->updates_expected = 0;
+ arg->max_index = 0;
}
arg->updates_expected++;
@@ -1428,7 +1430,6 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
struct reftable_log_record *logs = NULL;
struct ident_split committer_ident = {0};
size_t logs_nr = 0, logs_alloc = 0, i;
- uint64_t max_update_index = ts;
const char *committer_info;
int ret = 0;
@@ -1438,7 +1439,12 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
QSORT(arg->updates, arg->updates_nr, transaction_update_cmp);
- reftable_writer_set_limits(writer, ts, ts);
+ /*
+ * During reflog migration, we add indexes for a single reflog with
+ * multiple entries. Each entry will contain a different update_index,
+ * so set the limits accordingly.
+ */
+ reftable_writer_set_limits(writer, ts, ts + arg->max_index);
for (i = 0; i < arg->updates_nr; i++) {
struct reftable_transaction_update *tx_update = &arg->updates[i];
@@ -1540,12 +1546,6 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
*/
log->update_index = ts + u->index;
- /*
- * Note the max update_index so the limit can be set later on.
- */
- if (log->update_index > max_update_index)
- max_update_index = log->update_index;
-
log->refname = xstrdup(u->refname);
memcpy(log->value.update.new_hash,
u->new_oid.hash, GIT_MAX_RAWSZ);
@@ -1609,8 +1609,6 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data
* and log blocks.
*/
if (logs) {
- reftable_writer_set_limits(writer, ts, max_update_index);
-
ret = reftable_writer_add_logs(writer, logs, logs_nr);
if (ret < 0)
goto done;
@@ -1632,6 +1630,8 @@ static int reftable_be_transaction_finish(struct ref_store *ref_store UNUSED,
int ret = 0;
for (size_t i = 0; i < tx_data->args_nr; i++) {
+ tx_data->args[i].max_index = transaction->max_index;
+
ret = reftable_addition_add(tx_data->args[i].addition,
write_transaction_table, &tx_data->args[i]);
if (ret < 0)
diff --git a/refspec.c b/refspec.c
index 6d86e04442..3d6cf4dc92 100644
--- a/refspec.c
+++ b/refspec.c
@@ -5,9 +5,11 @@
#include "gettext.h"
#include "hash.h"
#include "hex.h"
+#include "string-list.h"
#include "strvec.h"
#include "refs.h"
#include "refspec.h"
+#include "remote.h"
#include "strbuf.h"
/*
@@ -236,16 +238,6 @@ int valid_fetch_refspec(const char *fetch_refspec_str)
return ret;
}
-int valid_remote_name(const char *name)
-{
- int result;
- struct strbuf refspec = STRBUF_INIT;
- strbuf_addf(&refspec, "refs/heads/test:refs/remotes/%s/test", name);
- result = valid_fetch_refspec(refspec.buf);
- strbuf_release(&refspec);
- return result;
-}
-
void refspec_ref_prefixes(const struct refspec *rs,
struct strvec *ref_prefixes)
{
@@ -276,3 +268,204 @@ void refspec_ref_prefixes(const struct refspec *rs,
}
}
}
+
+int match_name_with_pattern(const char *key, const char *name,
+ const char *value, char **result)
+{
+ const char *kstar = strchr(key, '*');
+ size_t klen;
+ size_t ksuffixlen;
+ size_t namelen;
+ int ret;
+ if (!kstar)
+ die(_("key '%s' of pattern had no '*'"), key);
+ klen = kstar - key;
+ ksuffixlen = strlen(kstar + 1);
+ namelen = strlen(name);
+ ret = !strncmp(name, key, klen) && namelen >= klen + ksuffixlen &&
+ !memcmp(name + namelen - ksuffixlen, kstar + 1, ksuffixlen);
+ if (ret && value) {
+ struct strbuf sb = STRBUF_INIT;
+ const char *vstar = strchr(value, '*');
+ if (!vstar)
+ die(_("value '%s' of pattern has no '*'"), value);
+ strbuf_add(&sb, value, vstar - value);
+ strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
+ strbuf_addstr(&sb, vstar + 1);
+ *result = strbuf_detach(&sb, NULL);
+ }
+ return ret;
+}
+
+static int refspec_match(const struct refspec_item *refspec,
+ const char *name)
+{
+ if (refspec->pattern)
+ return match_name_with_pattern(refspec->src, name, NULL, NULL);
+
+ return !strcmp(refspec->src, name);
+}
+
+int refname_matches_negative_refspec_item(const char *refname, struct refspec *rs)
+{
+ int i;
+
+ for (i = 0; i < rs->nr; i++) {
+ if (rs->items[i].negative && refspec_match(&rs->items[i], refname))
+ return 1;
+ }
+ return 0;
+}
+
+static int refspec_find_negative_match(struct refspec *rs, struct refspec_item *query)
+{
+ int i, matched_negative = 0;
+ int find_src = !query->src;
+ struct string_list reversed = STRING_LIST_INIT_DUP;
+ const char *needle = find_src ? query->dst : query->src;
+
+ /*
+ * Check whether the queried ref matches any negative refpsec. If so,
+ * then we should ultimately treat this as not matching the query at
+ * all.
+ *
+ * Note that negative refspecs always match the source, but the query
+ * item uses the destination. To handle this, we apply pattern
+ * refspecs in reverse to figure out if the query source matches any
+ * of the negative refspecs.
+ *
+ * The first loop finds and expands all positive refspecs
+ * matched by the queried ref.
+ *
+ * The second loop checks if any of the results of the first loop
+ * match any negative refspec.
+ */
+ for (i = 0; i < rs->nr; i++) {
+ struct refspec_item *refspec = &rs->items[i];
+ char *expn_name;
+
+ if (refspec->negative)
+ continue;
+
+ /* Note the reversal of src and dst */
+ if (refspec->pattern) {
+ const char *key = refspec->dst ? refspec->dst : refspec->src;
+ const char *value = refspec->src;
+
+ if (match_name_with_pattern(key, needle, value, &expn_name))
+ string_list_append_nodup(&reversed, expn_name);
+ } else if (refspec->matching) {
+ /* For the special matching refspec, any query should match */
+ string_list_append(&reversed, needle);
+ } else if (!refspec->src) {
+ BUG("refspec->src should not be null here");
+ } else if (!strcmp(needle, refspec->src)) {
+ string_list_append(&reversed, refspec->src);
+ }
+ }
+
+ for (i = 0; !matched_negative && i < reversed.nr; i++) {
+ if (refname_matches_negative_refspec_item(reversed.items[i].string, rs))
+ matched_negative = 1;
+ }
+
+ string_list_clear(&reversed, 0);
+
+ return matched_negative;
+}
+
+void refspec_find_all_matches(struct refspec *rs,
+ struct refspec_item *query,
+ struct string_list *results)
+{
+ int i;
+ int find_src = !query->src;
+
+ if (find_src && !query->dst)
+ BUG("refspec_find_all_matches: need either src or dst");
+
+ if (refspec_find_negative_match(rs, query))
+ return;
+
+ for (i = 0; i < rs->nr; i++) {
+ struct refspec_item *refspec = &rs->items[i];
+ const char *key = find_src ? refspec->dst : refspec->src;
+ const char *value = find_src ? refspec->src : refspec->dst;
+ const char *needle = find_src ? query->dst : query->src;
+ char **result = find_src ? &query->src : &query->dst;
+
+ if (!refspec->dst || refspec->negative)
+ continue;
+ if (refspec->pattern) {
+ if (match_name_with_pattern(key, needle, value, result))
+ string_list_append_nodup(results, *result);
+ } else if (!strcmp(needle, key)) {
+ string_list_append(results, value);
+ }
+ }
+}
+
+int refspec_find_match(struct refspec *rs, struct refspec_item *query)
+{
+ int i;
+ int find_src = !query->src;
+ const char *needle = find_src ? query->dst : query->src;
+ char **result = find_src ? &query->src : &query->dst;
+
+ if (find_src && !query->dst)
+ BUG("refspec_find_match: need either src or dst");
+
+ if (refspec_find_negative_match(rs, query))
+ return -1;
+
+ for (i = 0; i < rs->nr; i++) {
+ struct refspec_item *refspec = &rs->items[i];
+ const char *key = find_src ? refspec->dst : refspec->src;
+ const char *value = find_src ? refspec->src : refspec->dst;
+
+ if (!refspec->dst || refspec->negative)
+ continue;
+ if (refspec->pattern) {
+ if (match_name_with_pattern(key, needle, value, result)) {
+ query->force = refspec->force;
+ return 0;
+ }
+ } else if (!strcmp(needle, key)) {
+ *result = xstrdup(value);
+ query->force = refspec->force;
+ return 0;
+ }
+ }
+ return -1;
+}
+
+struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs)
+{
+ struct ref **tail;
+
+ for (tail = &ref_map; *tail; ) {
+ struct ref *ref = *tail;
+
+ if (refname_matches_negative_refspec_item(ref->name, rs)) {
+ *tail = ref->next;
+ free(ref->peer_ref);
+ free(ref);
+ } else
+ tail = &ref->next;
+ }
+
+ return ref_map;
+}
+
+char *apply_refspecs(struct refspec *rs, const char *name)
+{
+ struct refspec_item query;
+
+ memset(&query, 0, sizeof(struct refspec_item));
+ query.src = (char *)name;
+
+ if (refspec_find_match(rs, &query))
+ return NULL;
+
+ return query.dst;
+}
diff --git a/refspec.h b/refspec.h
index 69d693c87d..f62f83a7ee 100644
--- a/refspec.h
+++ b/refspec.h
@@ -30,6 +30,8 @@ struct refspec_item {
char *raw;
};
+struct string_list;
+
#define REFSPEC_FETCH 1
#define REFSPEC_PUSH 0
@@ -61,7 +63,6 @@ void refspec_appendn(struct refspec *rs, const char **refspecs, int nr);
void refspec_clear(struct refspec *rs);
int valid_fetch_refspec(const char *refspec);
-int valid_remote_name(const char *name);
struct strvec;
/*
@@ -71,4 +72,39 @@ struct strvec;
void refspec_ref_prefixes(const struct refspec *rs,
struct strvec *ref_prefixes);
+int refname_matches_negative_refspec_item(const char *refname, struct refspec *rs);
+
+/*
+ * Checks whether a name matches a pattern and optionally generates a result.
+ * Returns 1 if the name matches the pattern, 0 otherwise.
+ */
+int match_name_with_pattern(const char *key, const char *name,
+ const char *value, char **result);
+
+/*
+ * Queries a refspec for a match and updates the query item.
+ * Returns 0 on success, -1 if no match is found or negative refspec matches.
+ */
+int refspec_find_match(struct refspec *rs, struct refspec_item *query);
+
+/*
+ * Queries a refspec for all matches and appends results to the provided string
+ * list.
+ */
+void refspec_find_all_matches(struct refspec *rs,
+ struct refspec_item *query,
+ struct string_list *results);
+
+/*
+ * Remove all entries in the input list which match any negative refspec in
+ * the refspec list.
+ */
+struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs);
+
+/*
+ * Search for a refspec that matches the given name and return the
+ * corresponding destination (dst) if a match is found, NULL otherwise.
+ */
+char *apply_refspecs(struct refspec *rs, const char *name);
+
#endif /* REFSPEC_H */
diff --git a/reftable/block.c b/reftable/block.c
index 8ac865ce78..b14a8f1259 100644
--- a/reftable/block.c
+++ b/reftable/block.c
@@ -13,7 +13,6 @@ https://developers.google.com/open-source/licenses/bsd
#include "record.h"
#include "reftable-error.h"
#include "system.h"
-#include <zlib.h>
size_t header_size(int version)
{
diff --git a/reftable/system.h b/reftable/system.h
index 7d5f803eeb..d02eacea8f 100644
--- a/reftable/system.h
+++ b/reftable/system.h
@@ -12,6 +12,7 @@ https://developers.google.com/open-source/licenses/bsd
/* This header glues the reftable library to the rest of Git */
#include "git-compat-util.h"
+#include "compat/zlib-compat.h"
/*
* An implementation-specific temporary file. By making this specific to the
diff --git a/remote.c b/remote.c
index 0f6fba8562..c1cf363cca 100644
--- a/remote.c
+++ b/remote.c
@@ -294,6 +294,7 @@ static void add_instead_of(struct rewrite *rewrite, const char *instead_of)
rewrite->instead_of_nr++;
}
+#ifndef WITH_BREAKING_CHANGES
static const char *skip_spaces(const char *s)
{
while (isspace(*s))
@@ -301,6 +302,21 @@ static const char *skip_spaces(const char *s)
return s;
}
+static void warn_about_deprecated_remote_type(const char *type,
+ const struct remote *remote)
+{
+ warning(_("reading remote from \"%s/%s\", which is nominated for removal.\n"
+ "\n"
+ "If you still use the \"remotes/\" directory it is recommended to\n"
+ "migrate to config-based remotes:\n"
+ "\n"
+ "\tgit remote rename %s %s\n"
+ "\n"
+ "If you cannot, please let us know why you still need to use it by\n"
+ "sending an e-mail to <git@vger.kernel.org>."),
+ type, remote->name, remote->name, remote->name);
+}
+
static void read_remotes_file(struct remote_state *remote_state,
struct remote *remote)
{
@@ -309,6 +325,9 @@ static void read_remotes_file(struct remote_state *remote_state,
if (!f)
return;
+
+ warn_about_deprecated_remote_type("remotes", remote);
+
remote->configured_in_repo = 1;
remote->origin = REMOTE_REMOTES;
while (strbuf_getline(&buf, f) != EOF) {
@@ -338,6 +357,8 @@ static void read_branches_file(struct remote_state *remote_state,
if (!f)
return;
+ warn_about_deprecated_remote_type("branches", remote);
+
strbuf_getline_lf(&buf, f);
fclose(f);
strbuf_trim(&buf);
@@ -375,6 +396,7 @@ static void read_branches_file(struct remote_state *remote_state,
strbuf_release(&buf);
free(to_free);
}
+#endif /* WITH_BREAKING_CHANGES */
static int handle_config(const char *key, const char *value,
const struct config_context *ctx, void *cb)
@@ -591,6 +613,7 @@ static void read_config(struct repository *repo, int early)
alias_all_urls(repo->remote_state);
}
+#ifndef WITH_BREAKING_CHANGES
static int valid_remote_nick(const char *name)
{
if (!name[0] || is_dot_or_dotdot(name))
@@ -602,6 +625,7 @@ static int valid_remote_nick(const char *name)
return 0;
return 1;
}
+#endif /* WITH_BREAKING_CHANGES */
static const char *remotes_remote_for_branch(struct remote_state *remote_state,
struct branch *branch,
@@ -744,12 +768,14 @@ remotes_remote_get_1(struct remote_state *remote_state, const char *name,
&name_given);
ret = make_remote(remote_state, name, 0);
+#ifndef WITH_BREAKING_CHANGES
if (valid_remote_nick(name) && have_git_dir()) {
if (!valid_remote(ret))
read_remotes_file(remote_state, ret);
if (!valid_remote(ret))
read_branches_file(remote_state, ret);
}
+#endif /* WITH_BREAKING_CHANGES */
if (name_given && !valid_remote(ret))
add_url_alias(remote_state, ret, name);
if (!valid_remote(ret))
@@ -907,210 +933,9 @@ void ref_push_report_free(struct ref_push_report *report)
}
}
-static int match_name_with_pattern(const char *key, const char *name,
- const char *value, char **result)
-{
- const char *kstar = strchr(key, '*');
- size_t klen;
- size_t ksuffixlen;
- size_t namelen;
- int ret;
- if (!kstar)
- die(_("key '%s' of pattern had no '*'"), key);
- klen = kstar - key;
- ksuffixlen = strlen(kstar + 1);
- namelen = strlen(name);
- ret = !strncmp(name, key, klen) && namelen >= klen + ksuffixlen &&
- !memcmp(name + namelen - ksuffixlen, kstar + 1, ksuffixlen);
- if (ret && value) {
- struct strbuf sb = STRBUF_INIT;
- const char *vstar = strchr(value, '*');
- if (!vstar)
- die(_("value '%s' of pattern has no '*'"), value);
- strbuf_add(&sb, value, vstar - value);
- strbuf_add(&sb, name + klen, namelen - klen - ksuffixlen);
- strbuf_addstr(&sb, vstar + 1);
- *result = strbuf_detach(&sb, NULL);
- }
- return ret;
-}
-
-static int refspec_match(const struct refspec_item *refspec,
- const char *name)
-{
- if (refspec->pattern)
- return match_name_with_pattern(refspec->src, name, NULL, NULL);
-
- return !strcmp(refspec->src, name);
-}
-
-int omit_name_by_refspec(const char *name, struct refspec *rs)
-{
- int i;
-
- for (i = 0; i < rs->nr; i++) {
- if (rs->items[i].negative && refspec_match(&rs->items[i], name))
- return 1;
- }
- return 0;
-}
-
-struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs)
-{
- struct ref **tail;
-
- for (tail = &ref_map; *tail; ) {
- struct ref *ref = *tail;
-
- if (omit_name_by_refspec(ref->name, rs)) {
- *tail = ref->next;
- free(ref->peer_ref);
- free(ref);
- } else
- tail = &ref->next;
- }
-
- return ref_map;
-}
-
-static int query_matches_negative_refspec(struct refspec *rs, struct refspec_item *query)
-{
- int i, matched_negative = 0;
- int find_src = !query->src;
- struct string_list reversed = STRING_LIST_INIT_DUP;
- const char *needle = find_src ? query->dst : query->src;
-
- /*
- * Check whether the queried ref matches any negative refpsec. If so,
- * then we should ultimately treat this as not matching the query at
- * all.
- *
- * Note that negative refspecs always match the source, but the query
- * item uses the destination. To handle this, we apply pattern
- * refspecs in reverse to figure out if the query source matches any
- * of the negative refspecs.
- *
- * The first loop finds and expands all positive refspecs
- * matched by the queried ref.
- *
- * The second loop checks if any of the results of the first loop
- * match any negative refspec.
- */
- for (i = 0; i < rs->nr; i++) {
- struct refspec_item *refspec = &rs->items[i];
- char *expn_name;
-
- if (refspec->negative)
- continue;
-
- /* Note the reversal of src and dst */
- if (refspec->pattern) {
- const char *key = refspec->dst ? refspec->dst : refspec->src;
- const char *value = refspec->src;
-
- if (match_name_with_pattern(key, needle, value, &expn_name))
- string_list_append_nodup(&reversed, expn_name);
- } else if (refspec->matching) {
- /* For the special matching refspec, any query should match */
- string_list_append(&reversed, needle);
- } else if (!refspec->src) {
- BUG("refspec->src should not be null here");
- } else if (!strcmp(needle, refspec->src)) {
- string_list_append(&reversed, refspec->src);
- }
- }
-
- for (i = 0; !matched_negative && i < reversed.nr; i++) {
- if (omit_name_by_refspec(reversed.items[i].string, rs))
- matched_negative = 1;
- }
-
- string_list_clear(&reversed, 0);
-
- return matched_negative;
-}
-
-static void query_refspecs_multiple(struct refspec *rs,
- struct refspec_item *query,
- struct string_list *results)
-{
- int i;
- int find_src = !query->src;
-
- if (find_src && !query->dst)
- BUG("query_refspecs_multiple: need either src or dst");
-
- if (query_matches_negative_refspec(rs, query))
- return;
-
- for (i = 0; i < rs->nr; i++) {
- struct refspec_item *refspec = &rs->items[i];
- const char *key = find_src ? refspec->dst : refspec->src;
- const char *value = find_src ? refspec->src : refspec->dst;
- const char *needle = find_src ? query->dst : query->src;
- char **result = find_src ? &query->src : &query->dst;
-
- if (!refspec->dst || refspec->negative)
- continue;
- if (refspec->pattern) {
- if (match_name_with_pattern(key, needle, value, result))
- string_list_append_nodup(results, *result);
- } else if (!strcmp(needle, key)) {
- string_list_append(results, value);
- }
- }
-}
-
-int query_refspecs(struct refspec *rs, struct refspec_item *query)
-{
- int i;
- int find_src = !query->src;
- const char *needle = find_src ? query->dst : query->src;
- char **result = find_src ? &query->src : &query->dst;
-
- if (find_src && !query->dst)
- BUG("query_refspecs: need either src or dst");
-
- if (query_matches_negative_refspec(rs, query))
- return -1;
-
- for (i = 0; i < rs->nr; i++) {
- struct refspec_item *refspec = &rs->items[i];
- const char *key = find_src ? refspec->dst : refspec->src;
- const char *value = find_src ? refspec->src : refspec->dst;
-
- if (!refspec->dst || refspec->negative)
- continue;
- if (refspec->pattern) {
- if (match_name_with_pattern(key, needle, value, result)) {
- query->force = refspec->force;
- return 0;
- }
- } else if (!strcmp(needle, key)) {
- *result = xstrdup(value);
- query->force = refspec->force;
- return 0;
- }
- }
- return -1;
-}
-
-char *apply_refspecs(struct refspec *rs, const char *name)
-{
- struct refspec_item query;
-
- memset(&query, 0, sizeof(struct refspec_item));
- query.src = (char *)name;
-
- if (query_refspecs(rs, &query))
- return NULL;
-
- return query.dst;
-}
-
int remote_find_tracking(struct remote *remote, struct refspec_item *refspec)
{
- return query_refspecs(&remote->fetch, refspec);
+ return refspec_find_match(&remote->fetch, refspec);
}
static struct ref *alloc_ref_with_prefix(const char *prefix, size_t prefixlen,
@@ -1234,7 +1059,7 @@ int count_refspec_match(const char *pattern,
}
}
-static void tail_link_ref(struct ref *ref, struct ref ***tail)
+void tail_link_ref(struct ref *ref, struct ref ***tail)
{
**tail = ref;
while (ref->next)
@@ -2535,7 +2360,7 @@ static int get_stale_heads_cb(const char *refname, const char *referent UNUSED,
memset(&query, 0, sizeof(struct refspec_item));
query.dst = (char *)refname;
- query_refspecs_multiple(info->rs, &query, &matches);
+ refspec_find_all_matches(info->rs, &query, &matches);
if (matches.nr == 0)
goto clean_exit; /* No matches */
@@ -3003,3 +2828,13 @@ char *relative_url(const char *remote_url, const char *url,
free(out);
return strbuf_detach(&sb, NULL);
}
+
+int valid_remote_name(const char *name)
+{
+ int result;
+ struct strbuf refspec = STRBUF_INIT;
+ strbuf_addf(&refspec, "refs/heads/test:refs/remotes/%s/test", name);
+ result = valid_fetch_refspec(refspec.buf);
+ strbuf_release(&refspec);
+ return result;
+}
diff --git a/remote.h b/remote.h
index bda10dd5c8..6be5031f64 100644
--- a/remote.h
+++ b/remote.h
@@ -21,8 +21,10 @@ struct transport_ls_refs_options;
enum {
REMOTE_UNCONFIGURED = 0,
REMOTE_CONFIG,
+#ifndef WITH_BREAKING_CHANGES
REMOTE_REMOTES,
REMOTE_BRANCHES
+#endif /* WITH_BREAKING_CHANGES */
};
struct rewrite {
@@ -219,6 +221,11 @@ struct ref *alloc_ref(const char *name);
struct ref *copy_ref(const struct ref *ref);
struct ref *copy_ref_list(const struct ref *ref);
int count_refspec_match(const char *, struct ref *refs, struct ref **matched_ref);
+/*
+ * Put a ref in the tail and prepare tail for adding another one.
+ * *tail is the pointer to the tail of the list of refs.
+ */
+void tail_link_ref(struct ref *ref, struct ref ***tail);
int check_ref_type(const struct ref *ref, int flags);
@@ -261,21 +268,6 @@ int resolve_remote_symref(struct ref *ref, struct ref *list);
*/
struct ref *ref_remove_duplicates(struct ref *ref_map);
-/*
- * Check whether a name matches any negative refspec in rs. Returns 1 if the
- * name matches at least one negative refspec, and 0 otherwise.
- */
-int omit_name_by_refspec(const char *name, struct refspec *rs);
-
-/*
- * Remove all entries in the input list which match any negative refspec in
- * the refspec list.
- */
-struct ref *apply_negative_refspecs(struct ref *ref_map, struct refspec *rs);
-
-int query_refspecs(struct refspec *rs, struct refspec_item *query);
-char *apply_refspecs(struct refspec *rs, const char *name);
-
int check_push_refs(struct ref *src, struct refspec *rs);
int match_push_refs(struct ref *src, struct ref **dst,
struct refspec *rs, int flags);
@@ -461,4 +453,6 @@ void apply_push_cas(struct push_cas_option *, struct remote *, struct ref *);
char *relative_url(const char *remote_url, const char *url,
const char *up_path);
+int valid_remote_name(const char *name);
+
#endif
diff --git a/rerere.c b/rerere.c
index e7fa6426b3..c42cee618b 100644
--- a/rerere.c
+++ b/rerere.c
@@ -358,7 +358,7 @@ static void rerere_strbuf_putconflict(struct strbuf *buf, int ch, size_t size)
}
static int handle_conflict(struct strbuf *out, struct rerere_io *io,
- int marker_size, git_hash_ctx *ctx)
+ int marker_size, struct git_hash_ctx *ctx)
{
enum {
RR_SIDE_1 = 0, RR_SIDE_2, RR_ORIGINAL
@@ -396,12 +396,12 @@ static int handle_conflict(struct strbuf *out, struct rerere_io *io,
strbuf_addbuf(out, &two);
rerere_strbuf_putconflict(out, '>', marker_size);
if (ctx) {
- the_hash_algo->update_fn(ctx, one.buf ?
- one.buf : "",
- one.len + 1);
- the_hash_algo->update_fn(ctx, two.buf ?
- two.buf : "",
- two.len + 1);
+ git_hash_update(ctx, one.buf ?
+ one.buf : "",
+ one.len + 1);
+ git_hash_update(ctx, two.buf ?
+ two.buf : "",
+ two.len + 1);
}
break;
} else if (hunk == RR_SIDE_1)
@@ -432,7 +432,7 @@ static int handle_conflict(struct strbuf *out, struct rerere_io *io,
*/
static int handle_path(unsigned char *hash, struct rerere_io *io, int marker_size)
{
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
struct strbuf buf = STRBUF_INIT, out = STRBUF_INIT;
int has_conflicts = 0;
if (hash)
@@ -453,7 +453,7 @@ static int handle_path(unsigned char *hash, struct rerere_io *io, int marker_siz
strbuf_release(&out);
if (hash)
- the_hash_algo->final_fn(hash, &ctx);
+ git_hash_final(hash, &ctx);
return has_conflicts;
}
diff --git a/scalar.c b/scalar.c
index f24bcd0169..da42b4be0c 100644
--- a/scalar.c
+++ b/scalar.c
@@ -409,6 +409,7 @@ void load_builtin_commands(const char *prefix UNUSED,
static int cmd_clone(int argc, const char **argv)
{
const char *branch = NULL;
+ char *branch_to_free = NULL;
int full_clone = 0, single_branch = 0, show_progress = isatty(2);
int src = 1, tags = 1;
struct option clone_options[] = {
@@ -490,7 +491,7 @@ static int cmd_clone(int argc, const char **argv)
/* common-main already logs `argv` */
trace2_def_repo(the_repository);
- if (!branch && !(branch = remote_default_branch(url))) {
+ if (!branch && !(branch = branch_to_free = remote_default_branch(url))) {
res = error(_("failed to get default branch for '%s'"), url);
goto cleanup;
}
@@ -552,6 +553,7 @@ static int cmd_clone(int argc, const char **argv)
res = register_dir();
cleanup:
+ free(branch_to_free);
free(enlistment);
free(dir);
strbuf_release(&buf);
diff --git a/setup.c b/setup.c
index 8a488f3e7c..7da7aa8984 100644
--- a/setup.c
+++ b/setup.c
@@ -2517,7 +2517,9 @@ static void repository_format_configure(struct repository_format *repo_fmt,
int env_algo = hash_algo_by_name(env);
if (env_algo == GIT_HASH_UNKNOWN)
die(_("unknown hash algorithm '%s'"), env);
- repo_fmt->hash_algo = env_algo;
+ if (repo_fmt->version < 0 ||
+ repo_fmt->hash_algo == GIT_HASH_UNKNOWN)
+ repo_fmt->hash_algo = env_algo;
} else if (cfg.hash != GIT_HASH_UNKNOWN) {
repo_fmt->hash_algo = cfg.hash;
}
@@ -2534,7 +2536,9 @@ static void repository_format_configure(struct repository_format *repo_fmt,
ref_format = ref_storage_format_by_name(env);
if (ref_format == REF_STORAGE_FORMAT_UNKNOWN)
die(_("unknown ref storage format '%s'"), env);
- repo_fmt->ref_storage_format = ref_format;
+ if (repo_fmt->version < 0 ||
+ repo_fmt->ref_storage_format == REF_STORAGE_FORMAT_UNKNOWN)
+ repo_fmt->ref_storage_format = ref_format;
} else if (cfg.ref_format != REF_STORAGE_FORMAT_UNKNOWN) {
repo_fmt->ref_storage_format = cfg.ref_format;
}
diff --git a/t/Makefile b/t/Makefile
index daa5fcae86..2994eb5fa9 100644
--- a/t/Makefile
+++ b/t/Makefile
@@ -177,3 +177,18 @@ perf:
.PHONY: pre-clean $(T) aggregate-results clean valgrind perf \
check-chainlint clean-chainlint test-chainlint $(UNIT_TESTS)
+
+.PHONY: libgit-sys-test libgit-rs-test
+libgit-sys-test:
+ $(QUIET)(\
+ cd ../contrib/libgit-sys && \
+ cargo test \
+ )
+libgit-rs-test:
+ $(QUIET)(\
+ cd ../contrib/libgit-rs && \
+ cargo test \
+ )
+ifdef INCLUDE_LIBGIT_RS
+all:: libgit-sys-test libgit-rs-test
+endif
diff --git a/t/README b/t/README
index e84824dc00..53e5b4a710 100644
--- a/t/README
+++ b/t/README
@@ -471,6 +471,10 @@ a test and then fails then the whole test run will abort. This can help to make
sure the expected tests are executed and not silently skipped when their
dependency breaks or is simply not present in a new environment.
+GIT_TEST_NAME_HASH_VERSION=<int>, when set, causes 'git pack-objects' to
+assume '--name-hash-version=<n>'.
+
+
Naming Tests
------------
diff --git a/t/helper/meson.build b/t/helper/meson.build
index f502d1aaa3..1d6154ce97 100644
--- a/t/helper/meson.build
+++ b/t/helper/meson.build
@@ -34,6 +34,7 @@ test_tool_sources = [
'test-match-trees.c',
'test-mergesort.c',
'test-mktemp.c',
+ 'test-name-hash.c',
'test-online-cpus.c',
'test-pack-mtimes.c',
'test-parse-options.c',
diff --git a/t/helper/test-hash-speed.c b/t/helper/test-hash-speed.c
index 80df1aae66..fbf67fe6bd 100644
--- a/t/helper/test-hash-speed.c
+++ b/t/helper/test-hash-speed.c
@@ -3,16 +3,16 @@
#define NUM_SECONDS 3
-static inline void compute_hash(const struct git_hash_algo *algo, git_hash_ctx *ctx, uint8_t *final, const void *p, size_t len)
+static inline void compute_hash(const struct git_hash_algo *algo, struct git_hash_ctx *ctx, uint8_t *final, const void *p, size_t len)
{
algo->init_fn(ctx);
- algo->update_fn(ctx, p, len);
- algo->final_fn(final, ctx);
+ git_hash_update(ctx, p, len);
+ git_hash_final(final, ctx);
}
int cmd__hash_speed(int ac, const char **av)
{
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
unsigned char hash[GIT_MAX_RAWSZ];
clock_t initial, start, end;
unsigned bufsizes[] = { 64, 256, 1024, 8192, 16384 };
diff --git a/t/helper/test-hash.c b/t/helper/test-hash.c
index 45d829c908..f0ee61c8b4 100644
--- a/t/helper/test-hash.c
+++ b/t/helper/test-hash.c
@@ -1,14 +1,16 @@
#include "test-tool.h"
#include "hex.h"
-int cmd_hash_impl(int ac, const char **av, int algo)
+int cmd_hash_impl(int ac, const char **av, int algo, int unsafe)
{
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
unsigned char hash[GIT_MAX_HEXSZ];
unsigned bufsz = 8192;
int binary = 0;
char *buffer;
const struct git_hash_algo *algop = &hash_algos[algo];
+ if (unsafe)
+ algop = unsafe_hash_algo(algop);
if (ac == 2) {
if (!strcmp(av[1], "-b"))
@@ -46,9 +48,9 @@ int cmd_hash_impl(int ac, const char **av, int algo)
}
if (this_sz == 0)
break;
- algop->update_fn(&ctx, buffer, this_sz);
+ git_hash_update(&ctx, buffer, this_sz);
}
- algop->final_fn(hash, &ctx);
+ git_hash_final(hash, &ctx);
if (binary)
fwrite(hash, 1, algop->rawsz, stdout);
diff --git a/t/helper/test-name-hash.c b/t/helper/test-name-hash.c
new file mode 100644
index 0000000000..af1d52de10
--- /dev/null
+++ b/t/helper/test-name-hash.c
@@ -0,0 +1,23 @@
+/*
+ * test-name-hash.c: Read a list of paths over stdin and report on their
+ * name-hash and full name-hash.
+ */
+
+#include "test-tool.h"
+#include "git-compat-util.h"
+#include "pack-objects.h"
+#include "strbuf.h"
+
+int cmd__name_hash(int argc UNUSED, const char **argv UNUSED)
+{
+ struct strbuf line = STRBUF_INIT;
+
+ while (!strbuf_getline(&line, stdin)) {
+ printf("%10u ", pack_name_hash(line.buf));
+ printf("%10u ", pack_name_hash_v2((unsigned const char *)line.buf));
+ printf("%s\n", line.buf);
+ }
+
+ strbuf_release(&line);
+ return 0;
+}
diff --git a/t/helper/test-sha1.c b/t/helper/test-sha1.c
index e60d000c03..349540c4df 100644
--- a/t/helper/test-sha1.c
+++ b/t/helper/test-sha1.c
@@ -3,7 +3,7 @@
int cmd__sha1(int ac, const char **av)
{
- return cmd_hash_impl(ac, av, GIT_HASH_SHA1);
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA1, 0);
}
int cmd__sha1_is_sha1dc(int argc UNUSED, const char **argv UNUSED)
@@ -13,3 +13,8 @@ int cmd__sha1_is_sha1dc(int argc UNUSED, const char **argv UNUSED)
#endif
return 1;
}
+
+int cmd__sha1_unsafe(int ac, const char **av)
+{
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA1, 1);
+}
diff --git a/t/helper/test-sha1.sh b/t/helper/test-sha1.sh
index 84594885c7..bf387d3db1 100755
--- a/t/helper/test-sha1.sh
+++ b/t/helper/test-sha1.sh
@@ -3,25 +3,31 @@
dd if=/dev/zero bs=1048576 count=100 2>/dev/null |
/usr/bin/time t/helper/test-tool sha1 >/dev/null
+dd if=/dev/zero bs=1048576 count=100 2>/dev/null |
+/usr/bin/time t/helper/test-tool sha1-unsafe >/dev/null
+
while read expect cnt pfx
do
case "$expect" in '#'*) continue ;; esac
- actual=$(
- {
- test -z "$pfx" || echo "$pfx"
- dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
- perl -pe 'y/\000/g/'
- } | ./t/helper/test-tool sha1 $cnt
- )
- if test "$expect" = "$actual"
- then
- echo "OK: $expect $cnt $pfx"
- else
- echo >&2 "OOPS: $cnt"
- echo >&2 "expect: $expect"
- echo >&2 "actual: $actual"
- exit 1
- fi
+ for sha1 in sha1 sha1-unsafe
+ do
+ actual=$(
+ {
+ test -z "$pfx" || echo "$pfx"
+ dd if=/dev/zero bs=1048576 count=$cnt 2>/dev/null |
+ perl -pe 'y/\000/g/'
+ } | ./t/helper/test-tool $sha1 $cnt
+ )
+ if test "$expect" = "$actual"
+ then
+ echo "OK ($sha1): $expect $cnt $pfx"
+ else
+ echo >&2 "OOPS ($sha1): $cnt"
+ echo >&2 "expect ($sha1): $expect"
+ echo >&2 "actual ($sha1): $actual"
+ exit 1
+ fi
+ done
done <<EOF
da39a3ee5e6b4b0d3255bfef95601890afd80709 0
3f786850e387550fdab836ed7e6dc881de23001b 0 a
diff --git a/t/helper/test-sha256.c b/t/helper/test-sha256.c
index 2fb20438f3..7fd0aa1fcd 100644
--- a/t/helper/test-sha256.c
+++ b/t/helper/test-sha256.c
@@ -3,5 +3,5 @@
int cmd__sha256(int ac, const char **av)
{
- return cmd_hash_impl(ac, av, GIT_HASH_SHA256);
+ return cmd_hash_impl(ac, av, GIT_HASH_SHA256, 0);
}
diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c
index 69a9ffa1eb..50dc4dac4e 100644
--- a/t/helper/test-tool.c
+++ b/t/helper/test-tool.c
@@ -44,6 +44,7 @@ static struct test_cmd cmds[] = {
{ "match-trees", cmd__match_trees },
{ "mergesort", cmd__mergesort },
{ "mktemp", cmd__mktemp },
+ { "name-hash", cmd__name_hash },
{ "online-cpus", cmd__online_cpus },
{ "pack-mtimes", cmd__pack_mtimes },
{ "parse-options", cmd__parse_options },
@@ -71,6 +72,7 @@ static struct test_cmd cmds[] = {
{ "serve-v2", cmd__serve_v2 },
{ "sha1", cmd__sha1 },
{ "sha1-is-sha1dc", cmd__sha1_is_sha1dc },
+ { "sha1-unsafe", cmd__sha1_unsafe },
{ "sha256", cmd__sha256 },
{ "sigchain", cmd__sigchain },
{ "simple-ipc", cmd__simple_ipc },
diff --git a/t/helper/test-tool.h b/t/helper/test-tool.h
index 9cfc5da6e5..6d62a5b53d 100644
--- a/t/helper/test-tool.h
+++ b/t/helper/test-tool.h
@@ -37,6 +37,7 @@ int cmd__lazy_init_name_hash(int argc, const char **argv);
int cmd__match_trees(int argc, const char **argv);
int cmd__mergesort(int argc, const char **argv);
int cmd__mktemp(int argc, const char **argv);
+int cmd__name_hash(int argc, const char **argv);
int cmd__online_cpus(int argc, const char **argv);
int cmd__pack_mtimes(int argc, const char **argv);
int cmd__parse_options(int argc, const char **argv);
@@ -64,6 +65,7 @@ int cmd__scrap_cache_tree(int argc, const char **argv);
int cmd__serve_v2(int argc, const char **argv);
int cmd__sha1(int argc, const char **argv);
int cmd__sha1_is_sha1dc(int argc, const char **argv);
+int cmd__sha1_unsafe(int argc, const char **argv);
int cmd__sha256(int argc, const char **argv);
int cmd__sigchain(int argc, const char **argv);
int cmd__simple_ipc(int argc, const char **argv);
@@ -82,6 +84,6 @@ int cmd__windows_named_pipe(int argc, const char **argv);
#endif
int cmd__write_cache(int argc, const char **argv);
-int cmd_hash_impl(int ac, const char **av, int algo);
+int cmd_hash_impl(int ac, const char **av, int algo, int unsafe);
#endif
diff --git a/t/meson.build b/t/meson.build
index 35f25ca4a1..a03ebc81fd 100644
--- a/t/meson.build
+++ b/t/meson.build
@@ -1,9 +1,13 @@
clar_test_suites = [
'unit-tests/u-ctype.c',
+ 'unit-tests/u-example-decorate.c',
'unit-tests/u-hash.c',
+ 'unit-tests/u-hashmap.c',
'unit-tests/u-mem-pool.c',
'unit-tests/u-prio-queue.c',
'unit-tests/u-reftable-tree.c',
+ 'unit-tests/u-strbuf.c',
+ 'unit-tests/u-strcmp-offset.c',
'unit-tests/u-strvec.c',
]
@@ -44,8 +48,6 @@ clar_unit_tests = executable('unit-tests',
test('unit-tests', clar_unit_tests)
unit_test_programs = [
- 'unit-tests/t-example-decorate.c',
- 'unit-tests/t-hashmap.c',
'unit-tests/t-oid-array.c',
'unit-tests/t-oidmap.c',
'unit-tests/t-oidtree.c',
@@ -57,8 +59,6 @@ unit_test_programs = [
'unit-tests/t-reftable-readwrite.c',
'unit-tests/t-reftable-record.c',
'unit-tests/t-reftable-stack.c',
- 'unit-tests/t-strbuf.c',
- 'unit-tests/t-strcmp-offset.c',
'unit-tests/t-trailer.c',
'unit-tests/t-urlmatch-normalization.c',
]
@@ -721,6 +721,7 @@ integration_tests = [
't5617-clone-submodules-remote.sh',
't5618-alternate-refs.sh',
't5619-clone-local-ambiguous-transport.sh',
+ 't5621-clone-revision.sh',
't5700-protocol-v1.sh',
't5701-git-serve.sh',
't5702-protocol-v2.sh',
diff --git a/t/perf/p5313-pack-objects.sh b/t/perf/p5313-pack-objects.sh
new file mode 100755
index 0000000000..be5229a0ec
--- /dev/null
+++ b/t/perf/p5313-pack-objects.sh
@@ -0,0 +1,70 @@
+#!/bin/sh
+
+test_description='Tests pack performance using bitmaps'
+. ./perf-lib.sh
+
+GIT_TEST_PASSING_SANITIZE_LEAK=0
+export GIT_TEST_PASSING_SANITIZE_LEAK
+
+test_perf_large_repo
+
+test_expect_success 'create rev input' '
+ cat >in-thin <<-EOF &&
+ $(git rev-parse HEAD)
+ ^$(git rev-parse HEAD~1)
+ EOF
+
+ cat >in-big <<-EOF &&
+ $(git rev-parse HEAD)
+ ^$(git rev-parse HEAD~1000)
+ EOF
+
+ cat >in-shallow <<-EOF
+ $(git rev-parse HEAD)
+ --shallow $(git rev-parse HEAD)
+ EOF
+'
+
+for version in 1 2
+do
+ export version
+
+ test_perf "thin pack with version $version" '
+ git pack-objects --thin --stdout --revs --sparse \
+ --name-hash-version=$version <in-thin >out
+ '
+
+ test_size "thin pack size with version $version" '
+ test_file_size out
+ '
+
+ test_perf "big pack with version $version" '
+ git pack-objects --stdout --revs --sparse \
+ --name-hash-version=$version <in-big >out
+ '
+
+ test_size "big pack size with version $version" '
+ test_file_size out
+ '
+
+ test_perf "shallow fetch pack with version $version" '
+ git pack-objects --stdout --revs --sparse --shallow \
+ --name-hash-version=$version <in-shallow >out
+ '
+
+ test_size "shallow pack size with version $version" '
+ test_file_size out
+ '
+
+ test_perf "repack with version $version" '
+ git repack -adf --name-hash-version=$version
+ '
+
+ test_size "repack size with version $version" '
+ gitdir=$(git rev-parse --git-dir) &&
+ pack=$(ls $gitdir/objects/pack/pack-*.pack) &&
+ test_file_size "$pack"
+ '
+done
+
+test_done
diff --git a/t/perf/p5314-name-hash.sh b/t/perf/p5314-name-hash.sh
new file mode 100755
index 0000000000..4ef0ba7711
--- /dev/null
+++ b/t/perf/p5314-name-hash.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+test_description='Tests pack performance using bitmaps'
+. ./perf-lib.sh
+
+GIT_TEST_PASSING_SANITIZE_LEAK=0
+export GIT_TEST_PASSING_SANITIZE_LEAK
+
+test_perf_large_repo
+
+test_size 'paths at head' '
+ git ls-tree -r --name-only HEAD >path-list &&
+ wc -l <path-list &&
+ test-tool name-hash <path-list >name-hashes
+'
+
+for version in 1 2
+do
+ test_size "distinct hash value: v$version" '
+ awk "{ print \$$version; }" <name-hashes | sort | \
+ uniq -c >name-hash-count &&
+ wc -l <name-hash-count
+ '
+
+ test_size "maximum multiplicity: v$version" '
+ sort -nr <name-hash-count | head -n 1 | \
+ awk "{ print \$1; }"
+ '
+done
+
+test_done
diff --git a/t/t0001-init.sh b/t/t0001-init.sh
index 72a0c2e7d4..c49d9e0d38 100755
--- a/t/t0001-init.sh
+++ b/t/t0001-init.sh
@@ -586,6 +586,18 @@ test_expect_success 'GIT_DEFAULT_HASH overrides init.defaultObjectFormat' '
echo sha256 >expected
'
+for hash in sha1 sha256
+do
+ test_expect_success "reinit repository with GIT_DEFAULT_HASH=$hash does not change format" '
+ test_when_finished "rm -rf repo" &&
+ git init repo &&
+ git -C repo rev-parse --show-object-format >expect &&
+ GIT_DEFAULT_HASH=$hash git init repo &&
+ git -C repo rev-parse --show-object-format >actual &&
+ test_cmp expect actual
+ '
+done
+
test_expect_success 'extensions.objectFormat is not allowed with repo version 0' '
test_when_finished "rm -rf explicit-v0" &&
git init --object-format=sha256 explicit-v0 &&
@@ -697,6 +709,15 @@ do
git -C refformat rev-parse --show-ref-format >actual &&
test_cmp expect actual
'
+
+ test_expect_success "reinit repository with GIT_DEFAULT_REF_FORMAT=$format does not change format" '
+ test_when_finished "rm -rf refformat" &&
+ git init refformat &&
+ git -C refformat rev-parse --show-ref-format >expect &&
+ GIT_DEFAULT_REF_FORMAT=$format git init refformat &&
+ git -C refformat rev-parse --show-ref-format >actual &&
+ test_cmp expect actual
+ '
done
test_expect_success "--ref-format= overrides GIT_DEFAULT_REF_FORMAT" '
@@ -861,15 +882,6 @@ test_expect_success 're-init with includeIf.onbranch condition' '
test_cmp expect actual
'
-test_expect_success 're-init with includeIf.onbranch condition' '
- test_when_finished "rm -rf repo" &&
- git init repo &&
- git -c includeIf.onbranch:nonexistent.path=/does/not/exist init repo &&
- echo $GIT_DEFAULT_REF_FORMAT >expect &&
- git -C repo rev-parse --show-ref-format >actual &&
- test_cmp expect actual
-'
-
test_expect_success 're-init skips non-matching includeIf.onbranch' '
test_when_finished "rm -rf repo config" &&
cat >config <<-EOF &&
diff --git a/t/t0060-path-utils.sh b/t/t0060-path-utils.sh
index dbb2e73bcd..8545cdfab5 100755
--- a/t/t0060-path-utils.sh
+++ b/t/t0060-path-utils.sh
@@ -592,17 +592,19 @@ test_lazy_prereq CAN_EXEC_IN_PWD '
./git rev-parse
'
+test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'setup runtime prefix' '
+ mkdir -p pretend/bin &&
+ cp "$GIT_EXEC_PATH"/git$X pretend/bin/
+'
+
test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD 'RUNTIME_PREFIX works' '
- mkdir -p pretend/bin pretend/libexec/git-core &&
+ mkdir -p pretend/libexec/git-core &&
echo "echo HERE" | write_script pretend/libexec/git-core/git-here &&
- cp "$GIT_EXEC_PATH"/git$X pretend/bin/ &&
GIT_EXEC_PATH= ./pretend/bin/git here >actual &&
echo HERE >expect &&
test_cmp expect actual'
test_expect_success !VALGRIND,RUNTIME_PREFIX,CAN_EXEC_IN_PWD '%(prefix)/ works' '
- mkdir -p pretend/bin &&
- cp "$GIT_EXEC_PATH"/git$X pretend/bin/ &&
git config yes.path "%(prefix)/yes" &&
GIT_EXEC_PATH= ./pretend/bin/git config --path yes.path >actual &&
echo "$(pwd)/pretend/yes" >expect &&
diff --git a/t/t0450/txt-help-mismatches b/t/t0450/txt-help-mismatches
index 28003f18c9..c4a15fd0cb 100644
--- a/t/t0450/txt-help-mismatches
+++ b/t/t0450/txt-help-mismatches
@@ -45,7 +45,6 @@ rebase
remote
remote-ext
remote-fd
-repack
reset
restore
rev-parse
diff --git a/t/t1460-refs-migrate.sh b/t/t1460-refs-migrate.sh
index ceb0c4977d..a6d9b35a46 100755
--- a/t/t1460-refs-migrate.sh
+++ b/t/t1460-refs-migrate.sh
@@ -244,6 +244,18 @@ do
done
done
+test_expect_success 'multiple reftable blocks with multiple entries' '
+ test_when_finished "rm -rf repo" &&
+ git init --ref-format=files repo &&
+ test_commit -C repo first &&
+ printf "create refs/heads/ref-%d HEAD\n" $(test_seq 5000) >stdin &&
+ git -C repo update-ref --stdin <stdin &&
+ test_commit -C repo second &&
+ printf "update refs/heads/ref-%d HEAD\n" $(test_seq 3000) >stdin &&
+ git -C repo update-ref --stdin <stdin &&
+ test_migration repo reftable
+'
+
test_expect_success 'migrating from files format deletes backend files' '
test_when_finished "rm -rf repo" &&
git init --ref-format=files repo &&
diff --git a/t/t4100-apply-stat.sh b/t/t4100-apply-stat.sh
index 146e73d8f5..a5664f3eb3 100755
--- a/t/t4100-apply-stat.sh
+++ b/t/t4100-apply-stat.sh
@@ -38,4 +38,17 @@ incomplete (1)
incomplete (2)
EOF
+test_expect_success 'applying a hunk header which overflows fails' '
+ cat >patch <<-\EOF &&
+ diff -u a/file b/file
+ --- a/file
+ +++ b/file
+ @@ -98765432109876543210 +98765432109876543210 @@
+ -a
+ +b
+ EOF
+ test_must_fail git apply patch 2>err &&
+ echo "error: corrupt patch at line 4" >expect &&
+ test_cmp expect err
+'
test_done
diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh
index d1d6248558..5ac8d39094 100755
--- a/t/t5300-pack-object.sh
+++ b/t/t5300-pack-object.sh
@@ -689,4 +689,38 @@ do
'
done
+test_expect_success 'valid and invalid --name-hash-versions' '
+ sane_unset GIT_TEST_NAME_HASH_VERSION &&
+
+ # Valid values are hard to verify other than "do not fail".
+ # Performance tests will be more valuable to validate these versions.
+ # Negative values are converted to version 1.
+ for value in -1 1 2
+ do
+ git pack-objects base --all --name-hash-version=$value || return 1
+ done &&
+
+ # Invalid values have clear post-conditions.
+ for value in 0 3
+ do
+ test_must_fail git pack-objects base --all --name-hash-version=$value 2>err &&
+ test_grep "invalid --name-hash-version option" err || return 1
+ done
+'
+
+# The following test is not necessarily a permanent choice, but since we do not
+# have a "name hash version" bit in the .bitmap file format, we cannot write the
+# hash values into the .bitmap file without risking breakage later.
+#
+# TODO: Make these compatible in the future and replace this test with the
+# expected behavior when both are specified.
+test_expect_success '--name-hash-version=2 and --write-bitmap-index are incompatible' '
+ git pack-objects base --all --name-hash-version=2 --write-bitmap-index 2>err &&
+ test_grep "currently, --write-bitmap-index requires --name-hash-version=1" err &&
+
+ # --stdout option silently removes --write-bitmap-index
+ git pack-objects --stdout --all --name-hash-version=2 --write-bitmap-index >out 2>err &&
+ ! test_grep "currently, --write-bitmap-index requires --name-hash-version=1" err
+'
+
test_done
diff --git a/t/t5310-pack-bitmaps.sh b/t/t5310-pack-bitmaps.sh
index eabfcd7ff6..621bbbdd26 100755
--- a/t/t5310-pack-bitmaps.sh
+++ b/t/t5310-pack-bitmaps.sh
@@ -26,6 +26,36 @@ has_any () {
grep -Ff "$1" "$2"
}
+# Since name-hash values are stored in the .bitmap files, add a test
+# that checks that the name-hash calculations are stable across versions.
+# Not exhaustive, but these hashing algorithms would be hard to change
+# without causing deviations here.
+test_expect_success 'name-hash value stability' '
+ cat >names <<-\EOF &&
+ first
+ second
+ third
+ a/one-long-enough-for-collisions
+ b/two-long-enough-for-collisions
+ many/parts/to/this/path/enough/to/collide/in/v2
+ enough/parts/to/this/path/enough/to/collide/in/v2
+ EOF
+
+ test-tool name-hash <names >out &&
+
+ cat >expect <<-\EOF &&
+ 2582249472 1763573760 first
+ 2289942528 1188134912 second
+ 2300837888 1130758144 third
+ 2544516325 3963087891 a/one-long-enough-for-collisions
+ 2544516325 4013419539 b/two-long-enough-for-collisions
+ 1420111091 1709547268 many/parts/to/this/path/enough/to/collide/in/v2
+ 1420111091 1709547268 enough/parts/to/this/path/enough/to/collide/in/v2
+ EOF
+
+ test_cmp expect out
+'
+
test_bitmap_cases () {
writeLookupTable=false
for i in "$@"
@@ -419,7 +449,10 @@ test_bitmap_cases () {
cat >expect <<-\EOF &&
error: missing value for '\''pack.preferbitmaptips'\''
EOF
- git repack -adb 2>actual &&
+
+ # Disable name hash version adjustment due to stderr comparison.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git repack -adb 2>actual &&
test_cmp expect actual
)
'
diff --git a/t/t5323-pack-redundant.sh b/t/t5323-pack-redundant.sh
index 8dbbcc5e51..688cd9706c 100755
--- a/t/t5323-pack-redundant.sh
+++ b/t/t5323-pack-redundant.sh
@@ -36,6 +36,12 @@ relationship between packs and objects is as follows:
. ./test-lib.sh
+if ! test_have_prereq WITHOUT_BREAKING_CHANGES
+then
+ skip_all='skipping git-pack-redundant tests; built with breaking changes'
+ test_done
+fi
+
main_repo=main.git
shared_repo=shared.git
diff --git a/t/t5333-pseudo-merge-bitmaps.sh b/t/t5333-pseudo-merge-bitmaps.sh
index 1dd6284756..3905cb6e4f 100755
--- a/t/t5333-pseudo-merge-bitmaps.sh
+++ b/t/t5333-pseudo-merge-bitmaps.sh
@@ -208,7 +208,8 @@ test_expect_success 'bitmapPseudoMerge.stableThreshold creates stable groups' '
'
test_expect_success 'out of order thresholds are rejected' '
- test_must_fail git \
+ # Disable the test var to remove a stderr message.
+ test_must_fail env GIT_TEST_NAME_HASH_VERSION=1 git \
-c bitmapPseudoMerge.test.pattern="refs/*" \
-c bitmapPseudoMerge.test.threshold=1.month.ago \
-c bitmapPseudoMerge.test.stableThreshold=1.week.ago \
diff --git a/t/t5401-update-hooks.sh b/t/t5401-update-hooks.sh
index 723d1e17ec..17a46fd3ba 100755
--- a/t/t5401-update-hooks.sh
+++ b/t/t5401-update-hooks.sh
@@ -64,14 +64,14 @@ test_expect_success 'updated as expected' '
'
test_expect_success 'hooks ran' '
- test -f victim.git/pre-receive.args &&
- test -f victim.git/pre-receive.stdin &&
- test -f victim.git/update.args &&
- test -f victim.git/update.stdin &&
- test -f victim.git/post-receive.args &&
- test -f victim.git/post-receive.stdin &&
- test -f victim.git/post-update.args &&
- test -f victim.git/post-update.stdin
+ test_path_is_file victim.git/pre-receive.args &&
+ test_path_is_file victim.git/pre-receive.stdin &&
+ test_path_is_file victim.git/update.args &&
+ test_path_is_file victim.git/update.stdin &&
+ test_path_is_file victim.git/post-receive.args &&
+ test_path_is_file victim.git/post-receive.stdin &&
+ test_path_is_file victim.git/post-update.args &&
+ test_path_is_file victim.git/post-update.stdin
'
test_expect_success 'pre-receive hook input' '
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index 519f7973e3..93a6662df7 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -1113,7 +1113,7 @@ Pull: refs/heads/main:refs/heads/origin
Pull: refs/heads/next:refs/heads/origin2
EOF
-test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/remotes' '
git clone one five &&
origin_url=$(pwd)/one &&
(
@@ -1139,7 +1139,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
)
'
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/branches' '
git clone --template= one six &&
origin_url=$(pwd)/one &&
(
@@ -1155,7 +1155,7 @@ test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
)
'
-test_expect_success 'migrate a remote from named file in $GIT_DIR/branches (2)' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'migrate a remote from named file in $GIT_DIR/branches (2)' '
git clone --template= one seven &&
(
cd seven &&
diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh
index 2d9587059f..4680e0f644 100755
--- a/t/t5510-fetch.sh
+++ b/t/t5510-fetch.sh
@@ -34,14 +34,11 @@ test_expect_success "clone and setup child repos" '
git clone . three &&
(
cd three &&
- git config branch.main.remote two &&
- git config branch.main.merge refs/heads/one &&
- mkdir -p .git/remotes &&
- cat >.git/remotes/two <<-\EOF
- URL: ../two/.git/
- Pull: refs/heads/main:refs/heads/two
- Pull: refs/heads/one:refs/heads/one
- EOF
+ git config set remote.two.url ../two/.git/ &&
+ git config set remote.two.fetch refs/heads/main:refs/heads/two &&
+ git config set --append remote.two.fetch refs/heads/one:refs/heads/one &&
+ git config set branch.main.remote two &&
+ git config set branch.main.merge refs/heads/one
) &&
git clone . bundle &&
git clone . seven
@@ -1240,7 +1237,12 @@ test_expect_success 'all boundary commits are excluded' '
test_tick &&
git merge otherside &&
ad=$(git log --no-walk --format=%ad HEAD) &&
- git bundle create twoside-boundary.bdl main --since="$ad" &&
+
+ # If the a different name hash function is used here, then no delta
+ # pair is found and the bundle does not expand to three objects
+ # when fixing the thin object.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git bundle create twoside-boundary.bdl main --since="$ad" &&
test_bundle_object_count --thin twoside-boundary.bdl 3
'
diff --git a/t/t5515-fetch-merge-logic.sh b/t/t5515-fetch-merge-logic.sh
index 320d26796d..4e6026c611 100755
--- a/t/t5515-fetch-merge-logic.sh
+++ b/t/t5515-fetch-merge-logic.sh
@@ -104,28 +104,31 @@ test_expect_success setup '
git config remote.config-glob.fetch refs/heads/*:refs/remotes/rem/* &&
remotes="$remotes config-glob" &&
- mkdir -p .git/remotes &&
- cat >.git/remotes/remote-explicit <<-\EOF &&
- URL: ../.git/
- Pull: refs/heads/main:remotes/rem/main
- Pull: refs/heads/one:remotes/rem/one
- Pull: two:remotes/rem/two
- Pull: refs/heads/three:remotes/rem/three
- EOF
- remotes="$remotes remote-explicit" &&
-
- cat >.git/remotes/remote-glob <<-\EOF &&
- URL: ../.git/
- Pull: refs/heads/*:refs/remotes/rem/*
- EOF
- remotes="$remotes remote-glob" &&
-
- mkdir -p .git/branches &&
- echo "../.git" > .git/branches/branches-default &&
- remotes="$remotes branches-default" &&
-
- echo "../.git#one" > .git/branches/branches-one &&
- remotes="$remotes branches-one" &&
+ if test_have_prereq WITHOUT_BREAKING_CHANGES
+ then
+ mkdir -p .git/remotes &&
+ cat >.git/remotes/remote-explicit <<-\EOF &&
+ URL: ../.git/
+ Pull: refs/heads/main:remotes/rem/main
+ Pull: refs/heads/one:remotes/rem/one
+ Pull: two:remotes/rem/two
+ Pull: refs/heads/three:remotes/rem/three
+ EOF
+ remotes="$remotes remote-explicit" &&
+
+ cat >.git/remotes/remote-glob <<-\EOF &&
+ URL: ../.git/
+ Pull: refs/heads/*:refs/remotes/rem/*
+ EOF
+ remotes="$remotes remote-glob" &&
+
+ mkdir -p .git/branches &&
+ echo "../.git" > .git/branches/branches-default &&
+ remotes="$remotes branches-default" &&
+
+ echo "../.git#one" > .git/branches/branches-one &&
+ remotes="$remotes branches-one"
+ fi &&
for remote in $remotes ; do
git config branch.br-$remote.remote $remote &&
diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh
index 041d7d806f..85ed049627 100755
--- a/t/t5516-fetch-push.sh
+++ b/t/t5516-fetch-push.sh
@@ -975,7 +975,7 @@ test_expect_success 'allow push to HEAD of non-bare repository (config)' '
! grep "warning: updating the current branch" stderr
'
-test_expect_success 'fetch with branches' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'fetch with branches' '
mk_empty testrepo &&
git branch second $the_first_commit &&
git checkout second &&
@@ -991,7 +991,7 @@ test_expect_success 'fetch with branches' '
git checkout main
'
-test_expect_success 'fetch with branches containing #' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'fetch with branches containing #' '
mk_empty testrepo &&
mkdir testrepo/.git/branches &&
echo "..#second" > testrepo/.git/branches/branch2 &&
@@ -1005,7 +1005,7 @@ test_expect_success 'fetch with branches containing #' '
git checkout main
'
-test_expect_success 'push with branches' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'push with branches' '
mk_empty testrepo &&
git checkout second &&
@@ -1022,7 +1022,7 @@ test_expect_success 'push with branches' '
)
'
-test_expect_success 'push with branches containing #' '
+test_expect_success WITHOUT_BREAKING_CHANGES 'push with branches containing #' '
mk_empty testrepo &&
test_when_finished "rm -rf .git/branches" &&
@@ -1211,18 +1211,16 @@ test_expect_success 'push --porcelain --dry-run rejected' '
'
test_expect_success 'push --prune' '
- mk_test testrepo heads/main heads/second heads/foo heads/bar &&
+ mk_test testrepo heads/main heads/foo heads/bar &&
git push --prune testrepo : &&
check_push_result testrepo $the_commit heads/main &&
- check_push_result testrepo $the_first_commit heads/second &&
! check_push_result testrepo $the_first_commit heads/foo heads/bar
'
test_expect_success 'push --prune refspec' '
- mk_test testrepo tmp/main tmp/second tmp/foo tmp/bar &&
+ mk_test testrepo tmp/main tmp/foo tmp/bar &&
git push --prune testrepo "refs/heads/*:refs/tmp/*" &&
check_push_result testrepo $the_commit tmp/main &&
- check_push_result testrepo $the_first_commit tmp/second &&
! check_push_result testrepo $the_first_commit tmp/foo tmp/bar
'
diff --git a/t/t5621-clone-revision.sh b/t/t5621-clone-revision.sh
new file mode 100755
index 0000000000..db3b8cff55
--- /dev/null
+++ b/t/t5621-clone-revision.sh
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+test_description='tests for git clone --revision'
+GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
+export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
+
+. ./test-lib.sh
+
+test_expect_success 'setup' '
+ test_commit --no-tag "initial commit" README "Hello" &&
+ test_commit --annotate "second commit" README "Hello world" v1.0 &&
+ test_commit --no-tag "third commit" README "Hello world!" &&
+ git switch -c feature v1.0 &&
+ test_commit --no-tag "feature commit" README "Hello world!" &&
+ git switch main
+'
+
+test_expect_success 'clone with --revision being a branch' '
+ test_when_finished "rm -rf dst" &&
+ git clone --revision=refs/heads/feature . dst &&
+ git rev-parse refs/heads/feature >expect &&
+ git -C dst rev-parse HEAD >actual &&
+ test_must_fail git -C dst symbolic-ref -q HEAD >/dev/null &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch
+'
+
+test_expect_success 'clone with --depth and --revision being a branch' '
+ test_when_finished "rm -rf dst" &&
+ git clone --no-local --depth=1 --revision=refs/heads/feature . dst &&
+ git rev-parse refs/heads/feature >expect &&
+ git -C dst rev-parse HEAD >actual &&
+ test_must_fail git -C dst symbolic-ref -q HEAD >/dev/null &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch &&
+ git -C dst rev-list HEAD >actual &&
+ test_line_count = 1 actual
+'
+
+test_expect_success 'clone with --revision being a tag' '
+ test_when_finished "rm -rf dst" &&
+ git clone --revision=refs/tags/v1.0 . dst &&
+ git rev-parse refs/tags/v1.0^{} >expect &&
+ git -C dst rev-parse HEAD >actual &&
+ test_must_fail git -C dst symbolic-ref -q HEAD >/dev/null &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch
+'
+
+test_expect_success 'clone with --revision being HEAD' '
+ test_when_finished "rm -rf dst" &&
+ git clone --revision=HEAD . dst &&
+ git rev-parse HEAD >expect &&
+ git -C dst rev-parse HEAD >actual &&
+ test_must_fail git -C dst symbolic-ref -q HEAD >/dev/null &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch
+'
+
+test_expect_success 'clone with --revision being a raw commit hash' '
+ test_when_finished "rm -rf dst" &&
+ oid=$(git rev-parse refs/heads/feature) &&
+ git clone --revision=$oid . dst &&
+ echo $oid >expect &&
+ git -C dst rev-parse HEAD >actual &&
+ test_must_fail git -C dst symbolic-ref -q HEAD >/dev/null &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch
+'
+
+test_expect_success 'clone with --revision and --bare' '
+ test_when_finished "rm -rf dst" &&
+ git clone --revision=refs/heads/main --bare . dst &&
+ oid=$(git rev-parse refs/heads/main) &&
+ git -C dst cat-file -t $oid >actual &&
+ echo "commit" >expect &&
+ test_cmp expect actual &&
+ git -C dst for-each-ref refs >expect &&
+ test_must_be_empty expect &&
+ test_must_fail git -C dst config remote.origin.fetch
+'
+
+test_expect_success 'clone with --revision being a short raw commit hash' '
+ test_when_finished "rm -rf dst" &&
+ oid=$(git rev-parse --short refs/heads/feature) &&
+ test_must_fail git clone --revision=$oid . dst 2>err &&
+ test_grep "fatal: Remote revision $oid not found in upstream origin" err
+'
+
+test_expect_success 'clone with --revision being a tree hash' '
+ test_when_finished "rm -rf dst" &&
+ oid=$(git rev-parse refs/heads/feature^{tree}) &&
+ test_must_fail git clone --revision=$oid . dst 2>err &&
+ test_grep "error: object $oid is a tree, not a commit" err
+'
+
+test_expect_success 'clone with --revision being the parent of a ref fails' '
+ test_when_finished "rm -rf dst" &&
+ test_must_fail git clone --revision=refs/heads/main^ . dst
+'
+
+test_expect_success 'clone with --revision and --branch fails' '
+ test_when_finished "rm -rf dst" &&
+ test_must_fail git clone --revision=refs/heads/main --branch=main . dst
+'
+
+test_expect_success 'clone with --revision and --mirror fails' '
+ test_when_finished "rm -rf dst" &&
+ test_must_fail git clone --revision=refs/heads/main --mirror . dst
+'
+
+test_done
diff --git a/t/t6020-bundle-misc.sh b/t/t6020-bundle-misc.sh
index 4ce62feaa2..b3807e8f35 100755
--- a/t/t6020-bundle-misc.sh
+++ b/t/t6020-bundle-misc.sh
@@ -246,7 +246,11 @@ test_expect_success 'create bundle with --since option' '
EOF
test_cmp expect actual &&
- git bundle create since.bdl \
+ # If a different name hash function is used, then one fewer
+ # delta base is found and this counts a different number
+ # of objects after performing --fix-thin.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git bundle create since.bdl \
--since "Thu Apr 7 15:27:00 2005 -0700" \
--all &&
diff --git a/t/t6423-merge-rename-directories.sh b/t/t6423-merge-rename-directories.sh
index 88d1cf2cde..94080c65d1 100755
--- a/t/t6423-merge-rename-directories.sh
+++ b/t/t6423-merge-rename-directories.sh
@@ -5071,7 +5071,8 @@ test_expect_success '12i: Directory rename causes rename-to-self' '
test_path_is_file source/bar &&
test_path_is_file source/baz &&
- git ls-files | uniq >tracked &&
+ git ls-files >actual &&
+ uniq <actual >tracked &&
test_line_count = 3 tracked &&
git status --porcelain -uno >actual &&
@@ -5129,7 +5130,8 @@ test_expect_success '12j: Directory rename to root causes rename-to-self' '
test_path_is_file bar &&
test_path_is_file baz &&
- git ls-files | uniq >tracked &&
+ git ls-files >actual &&
+ uniq <actual >tracked &&
test_line_count = 3 tracked &&
git status --porcelain -uno >actual &&
@@ -5187,7 +5189,8 @@ test_expect_success '12k: Directory rename with sibling causes rename-to-self' '
test_path_is_file dirA/bar &&
test_path_is_file dirA/baz &&
- git ls-files | uniq >tracked &&
+ git ls-files >actual &&
+ uniq <actual >tracked &&
test_line_count = 3 tracked &&
git status --porcelain -uno >actual &&
diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh
index 5378455968..bef472cb8d 100755
--- a/t/t6500-gc.sh
+++ b/t/t6500-gc.sh
@@ -338,6 +338,39 @@ test_expect_success 'gc.maxCruftSize sets appropriate repack options' '
test_subcommand $cruft_max_size_opts --max-cruft-size=3145728 <trace2.txt
'
+test_expect_success '--expire-to sets repack --expire-to' '
+ rm -rf expired &&
+ mkdir expired &&
+ expire_to="$(pwd)/expired/pack" &&
+ GIT_TRACE2_EVENT=$(pwd)/trace2.txt git -C cruft--max-size gc --cruft --expire-to="$expire_to" &&
+ test_subcommand $cruft_max_size_opts --expire-to="$expire_to" <trace2.txt
+'
+
+test_expect_success '--expire-to with --prune=now sets repack --expire-to' '
+ rm -rf expired &&
+ mkdir expired &&
+ expire_to="$(pwd)/expired/pack" &&
+ GIT_TRACE2_EVENT=$(pwd)/trace2.txt git -C cruft--max-size gc --cruft --prune=now --expire-to="$expire_to" &&
+ test_subcommand git repack -d -l --cruft --cruft-expiration=now --expire-to="$expire_to" <trace2.txt
+'
+
+
+test_expect_success '--expire-to with --no-cruft sets repack -A' '
+ rm -rf expired &&
+ mkdir expired &&
+ expire_to="$(pwd)/expired/pack" &&
+ GIT_TRACE2_EVENT=$(pwd)/trace2.txt git -C cruft--max-size gc --no-cruft --expire-to="$expire_to" &&
+ test_subcommand git repack -d -l -A --unpack-unreachable=2.weeks.ago <trace2.txt
+'
+
+test_expect_success '--expire-to with --no-cruft sets repack -a' '
+ rm -rf expired &&
+ mkdir expired &&
+ expire_to="$(pwd)/expired/pack" &&
+ GIT_TRACE2_EVENT=$(pwd)/trace2.txt git -C cruft--max-size gc --no-cruft --prune=now --expire-to="$expire_to" &&
+ test_subcommand git repack -d -l -a <trace2.txt
+'
+
run_and_wait_for_gc () {
# We read stdout from gc for the side effect of waiting until the
# background gc process exits, closing its fd 9. Furthermore, the
diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
index 297c6c3b5c..c562bad042 100755
--- a/t/t7406-submodule-update.sh
+++ b/t/t7406-submodule-update.sh
@@ -1093,7 +1093,9 @@ test_expect_success 'submodule update --quiet passes quietness to fetch with a s
) &&
git clone super4 super5 &&
(cd super5 &&
- git submodule update --quiet --init --depth=1 submodule3 >out 2>err &&
+ # This test var can mess with the stderr output checked in this test.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git submodule update --quiet --init --depth=1 submodule3 >out 2>err &&
test_must_be_empty out &&
test_must_be_empty err
) &&
diff --git a/t/t7422-submodule-output.sh b/t/t7422-submodule-output.sh
index f21e920367..023a5cbdc4 100755
--- a/t/t7422-submodule-output.sh
+++ b/t/t7422-submodule-output.sh
@@ -167,10 +167,45 @@ do
done
test_expect_success !MINGW 'git submodule status --recursive propagates SIGPIPE' '
- { git submodule status --recursive 2>err; echo $?>status; } |
- grep -q X/S &&
- test_must_be_empty err &&
- test_match_signal 13 "$(cat status)"
+ # The test setup is somewhat involved because triggering a SIGPIPE is
+ # racy with buffered pipes. To avoid the raciness we thus need to make
+ # sure that the subprocess in question fills the buffers completely,
+ # which requires a couple thousand submodules in total.
+ test_when_finished "rm -rf submodule repo" &&
+ git init submodule &&
+ (
+ cd submodule &&
+ test_commit initial &&
+
+ COMMIT=$(git rev-parse HEAD) &&
+ for i in $(test_seq 2000)
+ do
+ printf "[submodule \"sm-$i\"]\npath = recursive-submodule-path-$i\n" "$i" ||
+ return 1
+ done >gitmodules &&
+ BLOB=$(git hash-object -w --stdin <gitmodules) &&
+
+ printf "100644 blob $BLOB\t.gitmodules\n" >tree &&
+ for i in $(test_seq 2000)
+ do
+ printf "160000 commit $COMMIT\trecursive-submodule-path-%d\n" "$i" ||
+ return 1
+ done >>tree &&
+ TREE=$(git mktree <tree) &&
+
+ COMMIT=$(git commit-tree "$TREE") &&
+ git reset --hard "$COMMIT"
+ ) &&
+
+ git init repo &&
+ (
+ cd repo &&
+ GIT_ALLOW_PROTOCOL=file git submodule add "$(pwd)"/../submodule &&
+ { git submodule status --recursive 2>err; echo $?>status; } |
+ grep -q recursive-submodule-path-1 &&
+ test_must_be_empty err &&
+ test_match_signal 13 "$(cat status)"
+ )
'
test_done
diff --git a/t/t7700-repack.sh b/t/t7700-repack.sh
index be1188e736..611755cc13 100755
--- a/t/t7700-repack.sh
+++ b/t/t7700-repack.sh
@@ -308,7 +308,10 @@ test_expect_success 'no bitmaps created if .keep files present' '
keep=${pack%.pack}.keep &&
test_when_finished "rm -f \"\$keep\"" &&
>"$keep" &&
- git -C bare.git repack -ad 2>stderr &&
+
+ # Disable --name-hash-version test due to stderr comparison.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git -C bare.git repack -ad 2>stderr &&
test_must_be_empty stderr &&
find bare.git/objects/pack/ -type f -name "*.bitmap" >actual &&
test_must_be_empty actual
@@ -319,7 +322,10 @@ test_expect_success 'auto-bitmaps do not complain if unavailable' '
blob=$(test-tool genrandom big $((1024*1024)) |
git -C bare.git hash-object -w --stdin) &&
git -C bare.git update-ref refs/tags/big $blob &&
- git -C bare.git repack -ad 2>stderr &&
+
+ # Disable --name-hash-version test due to stderr comparison.
+ GIT_TEST_NAME_HASH_VERSION=1 \
+ git -C bare.git repack -ad 2>stderr &&
test_must_be_empty stderr &&
find bare.git/objects/pack -type f -name "*.bitmap" >actual &&
test_must_be_empty actual
@@ -776,6 +782,12 @@ test_expect_success 'repack -ad cleans up old .tmp-* packs' '
test_must_be_empty tmpfiles
'
+test_expect_success '--name-hash-version option passes through to pack-objects' '
+ GIT_TRACE2_EVENT="$(pwd)/hash-trace.txt" \
+ git repack -a --name-hash-version=2 &&
+ test_subcommand_flex git pack-objects --name-hash-version=2 <hash-trace.txt
+'
+
test_expect_success 'setup for update-server-info' '
git init update-server-info &&
test_commit -C update-server-info message
diff --git a/t/t7701-repack-unpack-unreachable.sh b/t/t7701-repack-unpack-unreachable.sh
index 5715f4d69a..5559d4ccb4 100755
--- a/t/t7701-repack-unpack-unreachable.sh
+++ b/t/t7701-repack-unpack-unreachable.sh
@@ -195,4 +195,20 @@ test_expect_success 'repack -k packs unreachable loose objects' '
git cat-file -p $sha1
'
+test_expect_success 'repack -k packs unreachable loose objects without existing packfiles' '
+ test_when_finished "rm -rf repo" &&
+ git init repo &&
+ (
+ cd repo &&
+
+ oid=$(echo would-be-deleted-loose | git hash-object -w --stdin) &&
+ objpath=.git/objects/$(echo $sha1 | sed "s,..,&/,") &&
+ test_path_is_file $objpath &&
+
+ git repack -ad --keep-unreachable &&
+ test_path_is_missing $objpath &&
+ git cat-file -p $oid
+ )
+'
+
test_done
diff --git a/t/t9003-help-autocorrect.sh b/t/t9003-help-autocorrect.sh
index 85a5074b5e..8da318d2b5 100755
--- a/t/t9003-help-autocorrect.sh
+++ b/t/t9003-help-autocorrect.sh
@@ -28,15 +28,18 @@ test_expect_success 'setup' '
test_cmp expect actual
'
-test_expect_success 'autocorrect showing candidates' '
- git config help.autocorrect 0 &&
+for show in false no off 0 show
+do
+ test_expect_success 'autocorrect showing candidates' '
+ git config help.autocorrect $show &&
- test_must_fail git lfg 2>actual &&
- grep "^ lgf" actual &&
+ test_must_fail git lfg 2>actual &&
+ grep "^ lgf" actual &&
- test_must_fail git distimdist 2>actual &&
- grep "^ distimdistim" actual
-'
+ test_must_fail git distimdist 2>actual &&
+ grep "^ distimdistim" actual
+ '
+done
for immediate in -1 immediate
do
diff --git a/t/test-lib-functions.sh b/t/test-lib-functions.sh
index 14d511f509..b93736e0d5 100644
--- a/t/test-lib-functions.sh
+++ b/t/test-lib-functions.sh
@@ -1896,6 +1896,32 @@ test_subcommand () {
fi
}
+# Check that the given subcommand was run with the given set of
+# arguments in order (but with possible extra arguments).
+#
+# test_subcommand_flex [!] <command> <args>... < <trace>
+#
+# If the first parameter passed is !, this instead checks that
+# the given command was not called.
+#
+test_subcommand_flex () {
+ local negate=
+ if test "$1" = "!"
+ then
+ negate=t
+ shift
+ fi
+
+ local expr="$(printf '"%s".*' "$@")"
+
+ if test -n "$negate"
+ then
+ ! grep "\[$expr\]"
+ else
+ grep "\[$expr\]"
+ fi
+}
+
# Check that the given command was invoked as part of the
# trace2-format trace on stdin.
#
diff --git a/t/test-lib.sh b/t/test-lib.sh
index 9f27a49995..9001ed3a64 100644
--- a/t/test-lib.sh
+++ b/t/test-lib.sh
@@ -1862,6 +1862,10 @@ test_lazy_prereq CURL '
curl --version
'
+test_lazy_prereq WITHOUT_BREAKING_CHANGES '
+ test -z "$WITH_BREAKING_CHANGES"
+'
+
# SHA1 is a test if the hash algorithm in use is SHA-1. This is both for tests
# which will not work with other hash algorithms and tests that work but don't
# test anything meaningful (e.g. special values which cause short collisions).
diff --git a/t/unit-tests/t-example-decorate.c b/t/unit-tests/t-example-decorate.c
deleted file mode 100644
index bfc776e223..0000000000
--- a/t/unit-tests/t-example-decorate.c
+++ /dev/null
@@ -1,74 +0,0 @@
-#define USE_THE_REPOSITORY_VARIABLE
-
-#include "test-lib.h"
-#include "object.h"
-#include "decorate.h"
-#include "repository.h"
-
-struct test_vars {
- struct object *one, *two, *three;
- struct decoration n;
- int decoration_a, decoration_b;
-};
-
-static void t_add(struct test_vars *vars)
-{
- void *ret = add_decoration(&vars->n, vars->one, &vars->decoration_a);
-
- check(ret == NULL);
- ret = add_decoration(&vars->n, vars->two, NULL);
- check(ret == NULL);
-}
-
-static void t_readd(struct test_vars *vars)
-{
- void *ret = add_decoration(&vars->n, vars->one, NULL);
-
- check(ret == &vars->decoration_a);
- ret = add_decoration(&vars->n, vars->two, &vars->decoration_b);
- check(ret == NULL);
-}
-
-static void t_lookup(struct test_vars *vars)
-{
- void *ret = lookup_decoration(&vars->n, vars->one);
-
- check(ret == NULL);
- ret = lookup_decoration(&vars->n, vars->two);
- check(ret == &vars->decoration_b);
- ret = lookup_decoration(&vars->n, vars->three);
- check(ret == NULL);
-}
-
-static void t_loop(struct test_vars *vars)
-{
- int objects_noticed = 0;
-
- for (size_t i = 0; i < vars->n.size; i++) {
- if (vars->n.entries[i].base)
- objects_noticed++;
- }
- check_int(objects_noticed, ==, 2);
-}
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
- struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } };
- struct test_vars vars = { 0 };
-
- vars.one = lookup_unknown_object(the_repository, &one_oid);
- vars.two = lookup_unknown_object(the_repository, &two_oid);
- vars.three = lookup_unknown_object(the_repository, &three_oid);
-
- TEST(t_add(&vars),
- "Add 2 objects, one with a non-NULL decoration and one with a NULL decoration.");
- TEST(t_readd(&vars),
- "When re-adding an already existing object, the old decoration is returned.");
- TEST(t_lookup(&vars),
- "Lookup returns the added declarations, or NULL if the object was never added.");
- TEST(t_loop(&vars), "The user can also loop through all entries.");
-
- clear_decoration(&vars.n, NULL);
-
- return test_done();
-}
diff --git a/t/unit-tests/t-strbuf.c b/t/unit-tests/t-strbuf.c
deleted file mode 100644
index 3f4044d697..0000000000
--- a/t/unit-tests/t-strbuf.c
+++ /dev/null
@@ -1,122 +0,0 @@
-#include "test-lib.h"
-#include "strbuf.h"
-
-/* wrapper that supplies tests with an empty, initialized strbuf */
-static void setup(void (*f)(struct strbuf*, const void*),
- const void *data)
-{
- struct strbuf buf = STRBUF_INIT;
-
- f(&buf, data);
- strbuf_release(&buf);
- check_uint(buf.len, ==, 0);
- check_uint(buf.alloc, ==, 0);
-}
-
-/* wrapper that supplies tests with a populated, initialized strbuf */
-static void setup_populated(void (*f)(struct strbuf*, const void*),
- const char *init_str, const void *data)
-{
- struct strbuf buf = STRBUF_INIT;
-
- strbuf_addstr(&buf, init_str);
- check_uint(buf.len, ==, strlen(init_str));
- f(&buf, data);
- strbuf_release(&buf);
- check_uint(buf.len, ==, 0);
- check_uint(buf.alloc, ==, 0);
-}
-
-static int assert_sane_strbuf(struct strbuf *buf)
-{
- /* Initialized strbufs should always have a non-NULL buffer */
- if (!check(!!buf->buf))
- return 0;
- /* Buffers should always be NUL-terminated */
- if (!check_char(buf->buf[buf->len], ==, '\0'))
- return 0;
- /*
- * Freshly-initialized strbufs may not have a dynamically allocated
- * buffer
- */
- if (buf->len == 0 && buf->alloc == 0)
- return 1;
- /* alloc must be at least one byte larger than len */
- return check_uint(buf->len, <, buf->alloc);
-}
-
-static void t_static_init(void)
-{
- struct strbuf buf = STRBUF_INIT;
-
- check_uint(buf.len, ==, 0);
- check_uint(buf.alloc, ==, 0);
- check_char(buf.buf[0], ==, '\0');
-}
-
-static void t_dynamic_init(void)
-{
- struct strbuf buf;
-
- strbuf_init(&buf, 1024);
- check(assert_sane_strbuf(&buf));
- check_uint(buf.len, ==, 0);
- check_uint(buf.alloc, >=, 1024);
- check_char(buf.buf[0], ==, '\0');
- strbuf_release(&buf);
-}
-
-static void t_addch(struct strbuf *buf, const void *data)
-{
- const char *p_ch = data;
- const char ch = *p_ch;
- size_t orig_alloc = buf->alloc;
- size_t orig_len = buf->len;
-
- if (!check(assert_sane_strbuf(buf)))
- return;
- strbuf_addch(buf, ch);
- if (!check(assert_sane_strbuf(buf)))
- return;
- if (!(check_uint(buf->len, ==, orig_len + 1) &&
- check_uint(buf->alloc, >=, orig_alloc)))
- return; /* avoid de-referencing buf->buf */
- check_char(buf->buf[buf->len - 1], ==, ch);
- check_char(buf->buf[buf->len], ==, '\0');
-}
-
-static void t_addstr(struct strbuf *buf, const void *data)
-{
- const char *text = data;
- size_t len = strlen(text);
- size_t orig_alloc = buf->alloc;
- size_t orig_len = buf->len;
-
- if (!check(assert_sane_strbuf(buf)))
- return;
- strbuf_addstr(buf, text);
- if (!check(assert_sane_strbuf(buf)))
- return;
- if (!(check_uint(buf->len, ==, orig_len + len) &&
- check_uint(buf->alloc, >=, orig_alloc) &&
- check_uint(buf->alloc, >, orig_len + len) &&
- check_char(buf->buf[orig_len + len], ==, '\0')))
- return;
- check_str(buf->buf + orig_len, text);
-}
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
- if (!TEST(t_static_init(), "static initialization works"))
- test_skip_all("STRBUF_INIT is broken");
- TEST(t_dynamic_init(), "dynamic initialization works");
- TEST(setup(t_addch, "a"), "strbuf_addch adds char");
- TEST(setup(t_addch, ""), "strbuf_addch adds NUL char");
- TEST(setup_populated(t_addch, "initial value", "a"),
- "strbuf_addch appends to initial value");
- TEST(setup(t_addstr, "hello there"), "strbuf_addstr adds string");
- TEST(setup_populated(t_addstr, "initial value", "hello there"),
- "strbuf_addstr appends string to initial value");
-
- return test_done();
-}
diff --git a/t/unit-tests/t-strcmp-offset.c b/t/unit-tests/t-strcmp-offset.c
deleted file mode 100644
index 6880f21161..0000000000
--- a/t/unit-tests/t-strcmp-offset.c
+++ /dev/null
@@ -1,35 +0,0 @@
-#include "test-lib.h"
-#include "read-cache-ll.h"
-
-static void check_strcmp_offset(const char *string1, const char *string2,
- int expect_result, uintmax_t expect_offset)
-{
- size_t offset;
- int result = strcmp_offset(string1, string2, &offset);
-
- /*
- * Because different CRTs behave differently, only rely on signs of the
- * result values.
- */
- result = (result < 0 ? -1 :
- result > 0 ? 1 :
- 0);
-
- check_int(result, ==, expect_result);
- check_uint((uintmax_t)offset, ==, expect_offset);
-}
-
-#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \
- TEST(check_strcmp_offset(string1, string2, expect_result, \
- expect_offset), \
- "strcmp_offset(%s, %s) works", #string1, #string2)
-
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
-{
- TEST_STRCMP_OFFSET("abc", "abc", 0, 3);
- TEST_STRCMP_OFFSET("abc", "def", -1, 0);
- TEST_STRCMP_OFFSET("abc", "abz", -1, 2);
- TEST_STRCMP_OFFSET("abc", "abcdef", -1, 3);
-
- return test_done();
-}
diff --git a/t/unit-tests/u-example-decorate.c b/t/unit-tests/u-example-decorate.c
new file mode 100644
index 0000000000..9b1d1ce753
--- /dev/null
+++ b/t/unit-tests/u-example-decorate.c
@@ -0,0 +1,64 @@
+#define USE_THE_REPOSITORY_VARIABLE
+
+#include "unit-test.h"
+#include "object.h"
+#include "decorate.h"
+#include "repository.h"
+
+struct test_vars {
+ struct object *one, *two, *three;
+ struct decoration n;
+ int decoration_a, decoration_b;
+};
+
+static struct test_vars vars;
+
+void test_example_decorate__initialize(void)
+{
+ struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } };
+
+ vars.one = lookup_unknown_object(the_repository, &one_oid);
+ vars.two = lookup_unknown_object(the_repository, &two_oid);
+ vars.three = lookup_unknown_object(the_repository, &three_oid);
+}
+
+void test_example_decorate__cleanup(void)
+{
+ clear_decoration(&vars.n, NULL);
+}
+
+void test_example_decorate__add(void)
+{
+ cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL);
+}
+
+void test_example_decorate__readd(void)
+{
+ cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), &vars.decoration_a);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+}
+
+void test_example_decorate__lookup(void)
+{
+ cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), NULL);
+ cl_assert_equal_p(lookup_decoration(&vars.n, vars.two), &vars.decoration_b);
+ cl_assert_equal_p(lookup_decoration(&vars.n, vars.one), NULL);
+}
+
+void test_example_decorate__loop(void)
+{
+ int objects_noticed = 0;
+
+ cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL);
+ cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL);
+
+ for (size_t i = 0; i < vars.n.size; i++)
+ if (vars.n.entries[i].base)
+ objects_noticed++;
+
+ cl_assert_equal_i(objects_noticed, 2);
+}
diff --git a/t/unit-tests/u-hash.c b/t/unit-tests/u-hash.c
index a0320efe4b..bd4ac6a6e1 100644
--- a/t/unit-tests/u-hash.c
+++ b/t/unit-tests/u-hash.c
@@ -8,13 +8,13 @@ static void check_hash_data(const void *data, size_t data_length,
cl_assert(data != NULL);
for (size_t i = 1; i < ARRAY_SIZE(hash_algos); i++) {
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
unsigned char hash[GIT_MAX_HEXSZ];
const struct git_hash_algo *algop = &hash_algos[i];
algop->init_fn(&ctx);
- algop->update_fn(&ctx, data, data_length);
- algop->final_fn(hash, &ctx);
+ git_hash_update(&ctx, data, data_length);
+ git_hash_final(hash, &ctx);
cl_assert_equal_s(hash_to_hex_algop(hash,algop), expected_hashes[i - 1]);
}
diff --git a/t/unit-tests/t-hashmap.c b/t/unit-tests/u-hashmap.c
index 83b79dff39..eb80aa1348 100644
--- a/t/unit-tests/t-hashmap.c
+++ b/t/unit-tests/u-hashmap.c
@@ -1,4 +1,4 @@
-#include "test-lib.h"
+#include "unit-test.h"
#include "hashmap.h"
#include "strbuf.h"
@@ -83,23 +83,23 @@ static void t_replace(struct hashmap *map, unsigned int ignore_case)
struct test_entry *entry;
entry = alloc_test_entry("key1", "value1", ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
entry = alloc_test_entry(ignore_case ? "Key1" : "key1", "value2",
ignore_case);
entry = hashmap_put_entry(map, entry, ent);
- if (check(entry != NULL))
- check_str(get_value(entry), "value1");
+ cl_assert(entry != NULL);
+ cl_assert_equal_s(get_value(entry), "value1");
free(entry);
entry = alloc_test_entry("fooBarFrotz", "value3", ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
entry = alloc_test_entry(ignore_case ? "FOObarFrotz" : "fooBarFrotz",
"value4", ignore_case);
entry = hashmap_put_entry(map, entry, ent);
- if (check(entry != NULL))
- check_str(get_value(entry), "value3");
+ cl_assert(entry != NULL);
+ cl_assert_equal_s(get_value(entry), "value3");
free(entry);
}
@@ -122,20 +122,18 @@ static void t_get(struct hashmap *map, unsigned int ignore_case)
for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) {
entry = alloc_test_entry(key_val[i][0], key_val[i][1],
ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
}
for (size_t i = 0; i < ARRAY_SIZE(query); i++) {
entry = get_test_entry(map, query[i][0], ignore_case);
- if (check(entry != NULL))
- check_str(get_value(entry), query[i][1]);
- else
- test_msg("query key: %s", query[i][0]);
+ cl_assert(entry != NULL);
+ cl_assert_equal_s(get_value(entry), query[i][1]);
}
- check_pointer_eq(get_test_entry(map, "notInMap", ignore_case), NULL);
- check_int(map->tablesize, ==, 64);
- check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val));
+ cl_assert_equal_p(get_test_entry(map, "notInMap", ignore_case), NULL);
+ cl_assert_equal_i(map->tablesize, 64);
+ cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val));
}
static void t_add(struct hashmap *map, unsigned int ignore_case)
@@ -165,39 +163,19 @@ static void t_add(struct hashmap *map, unsigned int ignore_case)
hashmap_for_each_entry_from(map, entry, ent)
{
- int ret;
- if (!check_int((ret = key_val_contains(
- key_val, seen,
- ARRAY_SIZE(key_val), entry)),
- ==, 0)) {
- switch (ret) {
- case 1:
- test_msg("found entry was not given in the input\n"
- " key: %s\n value: %s",
- entry->key, get_value(entry));
- break;
- case 2:
- test_msg("duplicate entry detected\n"
- " key: %s\n value: %s",
- entry->key, get_value(entry));
- break;
- }
- } else {
- count++;
- }
+ int ret = key_val_contains(key_val, seen,
+ ARRAY_SIZE(key_val), entry);
+ cl_assert_equal_i(ret, 0);
+ count++;
}
- check_int(count, ==, 2);
+ cl_assert_equal_i(count, 2);
}
- for (size_t i = 0; i < ARRAY_SIZE(seen); i++) {
- if (!check_int(seen[i], ==, 1))
- test_msg("following key-val pair was not iterated over:\n"
- " key: %s\n value: %s",
- key_val[i][0], key_val[i][1]);
- }
+ for (size_t i = 0; i < ARRAY_SIZE(seen); i++)
+ cl_assert_equal_i(seen[i], 1);
- check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val));
- check_pointer_eq(get_test_entry(map, "notInMap", ignore_case), NULL);
+ cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val));
+ cl_assert_equal_p(get_test_entry(map, "notInMap", ignore_case), NULL);
}
static void t_remove(struct hashmap *map, unsigned int ignore_case)
@@ -211,24 +189,25 @@ static void t_remove(struct hashmap *map, unsigned int ignore_case)
for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) {
entry = alloc_test_entry(key_val[i][0], key_val[i][1], ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
}
for (size_t i = 0; i < ARRAY_SIZE(remove); i++) {
entry = alloc_test_entry(remove[i][0], "", ignore_case);
removed = hashmap_remove_entry(map, entry, ent, remove[i][0]);
- if (check(removed != NULL))
- check_str(get_value(removed), remove[i][1]);
+ cl_assert(removed != NULL);
+ cl_assert_equal_s(get_value(removed), remove[i][1]);
free(entry);
free(removed);
}
entry = alloc_test_entry("notInMap", "", ignore_case);
- check_pointer_eq(hashmap_remove_entry(map, entry, ent, "notInMap"), NULL);
+ cl_assert_equal_p(hashmap_remove_entry(map, entry, ent, "notInMap"), NULL);
free(entry);
- check_int(map->tablesize, ==, 64);
- check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val) - ARRAY_SIZE(remove));
+ cl_assert_equal_i(map->tablesize, 64);
+ cl_assert_equal_i(hashmap_get_size(map),
+ ARRAY_SIZE(key_val) - ARRAY_SIZE(remove));
}
static void t_iterate(struct hashmap *map, unsigned int ignore_case)
@@ -242,38 +221,21 @@ static void t_iterate(struct hashmap *map, unsigned int ignore_case)
for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) {
entry = alloc_test_entry(key_val[i][0], key_val[i][1], ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
}
hashmap_for_each_entry(map, &iter, entry, ent /* member name */)
{
- int ret;
- if (!check_int((ret = key_val_contains(key_val, seen,
- ARRAY_SIZE(key_val),
- entry)), ==, 0)) {
- switch (ret) {
- case 1:
- test_msg("found entry was not given in the input\n"
- " key: %s\n value: %s",
- entry->key, get_value(entry));
- break;
- case 2:
- test_msg("duplicate entry detected\n"
- " key: %s\n value: %s",
- entry->key, get_value(entry));
- break;
- }
- }
+ int ret = key_val_contains(key_val, seen,
+ ARRAY_SIZE(key_val),
+ entry);
+ cl_assert(ret == 0);
}
- for (size_t i = 0; i < ARRAY_SIZE(seen); i++) {
- if (!check_int(seen[i], ==, 1))
- test_msg("following key-val pair was not iterated over:\n"
- " key: %s\n value: %s",
- key_val[i][0], key_val[i][1]);
- }
+ for (size_t i = 0; i < ARRAY_SIZE(seen); i++)
+ cl_assert_equal_i(seen[i], 1);
- check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val));
+ cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val));
}
static void t_alloc(struct hashmap *map, unsigned int ignore_case)
@@ -284,17 +246,17 @@ static void t_alloc(struct hashmap *map, unsigned int ignore_case)
char *key = xstrfmt("key%d", i);
char *value = xstrfmt("value%d", i);
entry = alloc_test_entry(key, value, ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
free(key);
free(value);
}
- check_int(map->tablesize, ==, 64);
- check_int(hashmap_get_size(map), ==, 51);
+ cl_assert_equal_i(map->tablesize, 64);
+ cl_assert_equal_i(hashmap_get_size(map), 51);
entry = alloc_test_entry("key52", "value52", ignore_case);
- check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL);
- check_int(map->tablesize, ==, 256);
- check_int(hashmap_get_size(map), ==, 52);
+ cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL);
+ cl_assert_equal_i(map->tablesize, 256);
+ cl_assert_equal_i(hashmap_get_size(map), 52);
for (int i = 1; i <= 12; i++) {
char *key = xstrfmt("key%d", i);
@@ -302,27 +264,27 @@ static void t_alloc(struct hashmap *map, unsigned int ignore_case)
entry = alloc_test_entry(key, "", ignore_case);
removed = hashmap_remove_entry(map, entry, ent, key);
- if (check(removed != NULL))
- check_str(value, get_value(removed));
+ cl_assert(removed != NULL);
+ cl_assert_equal_s(value, get_value(removed));
free(key);
free(value);
free(entry);
free(removed);
}
- check_int(map->tablesize, ==, 256);
- check_int(hashmap_get_size(map), ==, 40);
+ cl_assert_equal_i(map->tablesize, 256);
+ cl_assert_equal_i(hashmap_get_size(map), 40);
entry = alloc_test_entry("key40", "", ignore_case);
removed = hashmap_remove_entry(map, entry, ent, "key40");
- if (check(removed != NULL))
- check_str("value40", get_value(removed));
- check_int(map->tablesize, ==, 64);
- check_int(hashmap_get_size(map), ==, 39);
+ cl_assert(removed != NULL);
+ cl_assert_equal_s("value40", get_value(removed));
+ cl_assert_equal_i(map->tablesize, 64);
+ cl_assert_equal_i(hashmap_get_size(map), 39);
free(entry);
free(removed);
}
-static void t_intern(void)
+void test_hashmap__intern(void)
{
const char *values[] = { "value1", "Value1", "value2", "value2" };
@@ -330,32 +292,68 @@ static void t_intern(void)
const char *i1 = strintern(values[i]);
const char *i2 = strintern(values[i]);
- if (!check(!strcmp(i1, values[i])))
- test_msg("strintern(%s) returns %s\n", values[i], i1);
- else if (!check(i1 != values[i]))
- test_msg("strintern(%s) returns input pointer\n",
- values[i]);
- else if (!check_pointer_eq(i1, i2))
- test_msg("address('%s') != address('%s'), so strintern('%s') != strintern('%s')",
- i1, i2, values[i], values[i]);
- else
- check_str(i1, values[i]);
+ cl_assert_equal_s(i1, values[i]);
+ cl_assert(i1 != values[i]);
+ cl_assert_equal_p(i1, i2);
}
}
-int cmd_main(int argc UNUSED, const char **argv UNUSED)
+void test_hashmap__replace_case_sensitive(void)
+{
+ setup(t_replace, 0);
+}
+
+void test_hashmap__replace_case_insensitive(void)
+{
+ setup(t_replace, 1);
+}
+
+void test_hashmap__get_case_sensitive(void)
+{
+ setup(t_get, 0);
+}
+
+void test_hashmap__get_case_insensitive(void)
+{
+ setup(t_get, 1);
+}
+
+void test_hashmap__add_case_sensitive(void)
+{
+ setup(t_add, 0);
+}
+
+void test_hashmap__add_case_insensitive(void)
+{
+ setup(t_add, 1);
+}
+
+void test_hashmap__remove_case_sensitive(void)
+{
+ setup(t_remove, 0);
+}
+
+void test_hashmap__remove_case_insensitive(void)
+{
+ setup(t_remove, 1);
+}
+
+void test_hashmap__iterate_case_sensitive(void)
+{
+ setup(t_iterate, 0);
+}
+
+void test_hashmap__iterate_case_insensitive(void)
+{
+ setup(t_iterate, 1);
+}
+
+void test_hashmap__alloc_case_sensitive(void)
+{
+ setup(t_alloc, 0);
+}
+
+void test_hashmap__alloc_case_insensitive(void)
{
- TEST(setup(t_replace, 0), "replace works");
- TEST(setup(t_replace, 1), "replace (case insensitive) works");
- TEST(setup(t_get, 0), "get works");
- TEST(setup(t_get, 1), "get (case insensitive) works");
- TEST(setup(t_add, 0), "add works");
- TEST(setup(t_add, 1), "add (case insensitive) works");
- TEST(setup(t_remove, 0), "remove works");
- TEST(setup(t_remove, 1), "remove (case insensitive) works");
- TEST(setup(t_iterate, 0), "iterate works");
- TEST(setup(t_iterate, 1), "iterate (case insensitive) works");
- TEST(setup(t_alloc, 0), "grow / shrink works");
- TEST(t_intern(), "string interning works");
- return test_done();
+ setup(t_alloc, 1);
}
diff --git a/t/unit-tests/u-strbuf.c b/t/unit-tests/u-strbuf.c
new file mode 100644
index 0000000000..caa5d78aa3
--- /dev/null
+++ b/t/unit-tests/u-strbuf.c
@@ -0,0 +1,119 @@
+#include "unit-test.h"
+#include "strbuf.h"
+
+/* wrapper that supplies tests with an empty, initialized strbuf */
+static void setup(void (*f)(struct strbuf*, const void*),
+ const void *data)
+{
+ struct strbuf buf = STRBUF_INIT;
+
+ f(&buf, data);
+ strbuf_release(&buf);
+ cl_assert_equal_i(buf.len, 0);
+ cl_assert_equal_i(buf.alloc, 0);
+}
+
+/* wrapper that supplies tests with a populated, initialized strbuf */
+static void setup_populated(void (*f)(struct strbuf*, const void*),
+ const char *init_str, const void *data)
+{
+ struct strbuf buf = STRBUF_INIT;
+
+ strbuf_addstr(&buf, init_str);
+ cl_assert_equal_i(buf.len, strlen(init_str));
+ f(&buf, data);
+ strbuf_release(&buf);
+ cl_assert_equal_i(buf.len, 0);
+ cl_assert_equal_i(buf.alloc, 0);
+}
+
+static void assert_sane_strbuf(struct strbuf *buf)
+{
+ /* Initialized strbufs should always have a non-NULL buffer */
+ cl_assert(buf->buf != NULL);
+ /* Buffers should always be NUL-terminated */
+ cl_assert(buf->buf[buf->len] == '\0');
+ /*
+ * In case the buffer contains anything, `alloc` must alloc must
+ * be at least one byte larger than `len`.
+ */
+ if (buf->len)
+ cl_assert(buf->len < buf->alloc);
+}
+
+void test_strbuf__static_init(void)
+{
+ struct strbuf buf = STRBUF_INIT;
+
+ cl_assert_equal_i(buf.len, 0);
+ cl_assert_equal_i(buf.alloc, 0);
+ cl_assert(buf.buf[0] == '\0');
+}
+
+void test_strbuf__dynamic_init(void)
+{
+ struct strbuf buf;
+
+ strbuf_init(&buf, 1024);
+ assert_sane_strbuf(&buf);
+ cl_assert_equal_i(buf.len, 0);
+ cl_assert(buf.alloc >= 1024);
+ cl_assert(buf.buf[0] == '\0');
+ strbuf_release(&buf);
+}
+
+static void t_addch(struct strbuf *buf, const void *data)
+{
+ const char *p_ch = data;
+ const char ch = *p_ch;
+ size_t orig_alloc = buf->alloc;
+ size_t orig_len = buf->len;
+
+ assert_sane_strbuf(buf);
+ strbuf_addch(buf, ch);
+ assert_sane_strbuf(buf);
+ cl_assert_equal_i(buf->len, orig_len + 1);
+ cl_assert(buf->alloc >= orig_alloc);
+ cl_assert(buf->buf[buf->len] == '\0');
+}
+
+static void t_addstr(struct strbuf *buf, const void *data)
+{
+ const char *text = data;
+ size_t len = strlen(text);
+ size_t orig_alloc = buf->alloc;
+ size_t orig_len = buf->len;
+
+ assert_sane_strbuf(buf);
+ strbuf_addstr(buf, text);
+ assert_sane_strbuf(buf);
+ cl_assert_equal_i(buf->len, orig_len + len);
+ cl_assert(buf->alloc >= orig_alloc);
+ cl_assert(buf->buf[buf->len] == '\0');
+ cl_assert_equal_s(buf->buf + orig_len, text);
+}
+
+void test_strbuf__add_single_char(void)
+{
+ setup(t_addch, "a");
+}
+
+void test_strbuf__add_empty_char(void)
+{
+ setup(t_addch, "");
+}
+
+void test_strbuf__add_append_char(void)
+{
+ setup_populated(t_addch, "initial value", "a");
+}
+
+void test_strbuf__add_single_str(void)
+{
+ setup(t_addstr, "hello there");
+}
+
+void test_strbuf__add_append_str(void)
+{
+ setup_populated(t_addstr, "initial value", "hello there");
+}
diff --git a/t/unit-tests/u-strcmp-offset.c b/t/unit-tests/u-strcmp-offset.c
new file mode 100644
index 0000000000..7e8e9acf3c
--- /dev/null
+++ b/t/unit-tests/u-strcmp-offset.c
@@ -0,0 +1,45 @@
+#include "unit-test.h"
+#include "read-cache-ll.h"
+
+static void check_strcmp_offset(const char *string1, const char *string2,
+ int expect_result, uintmax_t expect_offset)
+{
+ size_t offset;
+ int result = strcmp_offset(string1, string2, &offset);
+
+ /*
+ * Because different CRTs behave differently, only rely on signs of the
+ * result values.
+ */
+ result = (result < 0 ? -1 :
+ result > 0 ? 1 :
+ 0);
+
+ cl_assert_equal_i(result, expect_result);
+ cl_assert_equal_i((uintmax_t)offset, expect_offset);
+}
+
+void test_strcmp_offset__empty(void)
+{
+ check_strcmp_offset("", "", 0, 0);
+}
+
+void test_strcmp_offset__equal(void)
+{
+ check_strcmp_offset("abc", "abc", 0, 3);
+}
+
+void test_strcmp_offset__different(void)
+{
+ check_strcmp_offset("abc", "def", -1, 0);
+}
+
+void test_strcmp_offset__mismatch(void)
+{
+ check_strcmp_offset("abc", "abz", -1, 2);
+}
+
+void test_strcmp_offset__different_length(void)
+{
+ check_strcmp_offset("abc", "abcdef", -1, 3);
+}
diff --git a/trace2/tr2_sid.c b/trace2/tr2_sid.c
index 09c4ef0d17..1c1d27b0ee 100644
--- a/trace2/tr2_sid.c
+++ b/trace2/tr2_sid.c
@@ -32,7 +32,7 @@ static void tr2_sid_append_my_sid_component(void)
{
const struct git_hash_algo *algo = &hash_algos[GIT_HASH_SHA1];
struct tr2_tbuf tb_now;
- git_hash_ctx ctx;
+ struct git_hash_ctx ctx;
pid_t pid = getpid();
unsigned char hash[GIT_MAX_RAWSZ + 1];
char hex[GIT_MAX_HEXSZ + 1];
@@ -46,8 +46,8 @@ static void tr2_sid_append_my_sid_component(void)
strbuf_add(&tr2sid_buf, "Localhost", 9);
else {
algo->init_fn(&ctx);
- algo->update_fn(&ctx, hostname, strlen(hostname));
- algo->final_fn(hash, &ctx);
+ git_hash_update(&ctx, hostname, strlen(hostname));
+ git_hash_final(hash, &ctx);
hash_to_hex_algop_r(hex, hash, algo);
strbuf_addch(&tr2sid_buf, 'H');
strbuf_add(&tr2sid_buf, hex, 8);
diff --git a/transport.c b/transport.c
index 81ae8243b9..d6851dc475 100644
--- a/transport.c
+++ b/transport.c
@@ -207,6 +207,7 @@ static int fetch_refs_from_bundle(struct transport *transport,
ret = unbundle(the_repository, &data->header, data->fd,
&extra_index_pack_args, &opts);
+ data->fd = -1; /* `unbundle()` closes the file descriptor */
transport->hash_algo = data->header.hash_algo;
strvec_clear(&extra_index_pack_args);
diff --git a/tree-diff.c b/tree-diff.c
index d9237ffd9b..60c558c2b5 100644
--- a/tree-diff.c
+++ b/tree-diff.c
@@ -48,8 +48,8 @@
free((x)); \
} while(0)
-static struct combine_diff_path *ll_diff_tree_paths(
- struct combine_diff_path *p, const struct object_id *oid,
+static void ll_diff_tree_paths(
+ struct combine_diff_path ***tail, const struct object_id *oid,
const struct object_id **parents_oid, int nparent,
struct strbuf *base, struct diff_options *opt,
int depth);
@@ -125,72 +125,6 @@ static int emit_diff_first_parent_only(struct diff_options *opt, struct combine_
/*
- * Make a new combine_diff_path from path/mode/sha1
- * and append it to paths list tail.
- *
- * Memory for created elements could be reused:
- *
- * - if last->next == NULL, the memory is allocated;
- *
- * - if last->next != NULL, it is assumed that p=last->next was returned
- * earlier by this function, and p->next was *not* modified.
- * The memory is then reused from p.
- *
- * so for clients,
- *
- * - if you do need to keep the element
- *
- * p = path_appendnew(p, ...);
- * process(p);
- * p->next = NULL;
- *
- * - if you don't need to keep the element after processing
- *
- * pprev = p;
- * p = path_appendnew(p, ...);
- * process(p);
- * p = pprev;
- * ; don't forget to free tail->next in the end
- *
- * p->parent[] remains uninitialized.
- */
-static struct combine_diff_path *path_appendnew(struct combine_diff_path *last,
- int nparent, const struct strbuf *base, const char *path, int pathlen,
- unsigned mode, const struct object_id *oid)
-{
- struct combine_diff_path *p;
- size_t len = st_add(base->len, pathlen);
- size_t alloclen = combine_diff_path_size(nparent, len);
-
- /* if last->next is !NULL - it is a pre-allocated memory, we can reuse */
- p = last->next;
- if (p && (alloclen > (intptr_t)p->next)) {
- FREE_AND_NULL(p);
- }
-
- if (!p) {
- p = xmalloc(alloclen);
-
- /*
- * until we go to it next round, .next holds how many bytes we
- * allocated (for faster realloc - we don't need copying old data).
- */
- p->next = (struct combine_diff_path *)(intptr_t)alloclen;
- }
-
- last->next = p;
-
- p->path = (char *)&(p->parent[nparent]);
- memcpy(p->path, base->buf, base->len);
- memcpy(p->path + base->len, path, pathlen);
- p->path[len] = 0;
- p->mode = mode;
- oidcpy(&p->oid, oid ? oid : null_oid());
-
- return p;
-}
-
-/*
* new path should be added to combine diff
*
* 3 cases on how/when it should be called and behaves:
@@ -200,10 +134,10 @@ static struct combine_diff_path *path_appendnew(struct combine_diff_path *last,
* t, tp -> path modified/added
* (M for tp[i]=tp[imin], A otherwise)
*/
-static struct combine_diff_path *emit_path(struct combine_diff_path *p,
- struct strbuf *base, struct diff_options *opt, int nparent,
- struct tree_desc *t, struct tree_desc *tp,
- int imin, int depth)
+static void emit_path(struct combine_diff_path ***tail,
+ struct strbuf *base, struct diff_options *opt,
+ int nparent, struct tree_desc *t, struct tree_desc *tp,
+ int imin, int depth)
{
unsigned short mode;
const char *path;
@@ -243,8 +177,13 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
if (emitthis) {
int keep;
- struct combine_diff_path *pprev = p;
- p = path_appendnew(p, nparent, base, path, pathlen, mode, oid);
+ struct combine_diff_path *p;
+
+ strbuf_add(base, path, pathlen);
+ p = combine_diff_path_new(base->buf, base->len, mode,
+ oid ? oid : null_oid(),
+ nparent);
+ strbuf_setlen(base, old_baselen);
for (i = 0; i < nparent; ++i) {
/*
@@ -279,21 +218,12 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
if (opt->pathchange)
keep = opt->pathchange(opt, p);
- /*
- * If a path was filtered or consumed - we don't need to add it
- * to the list and can reuse its memory, leaving it as
- * pre-allocated element on the tail.
- *
- * On the other hand, if path needs to be kept, we need to
- * correct its .next to NULL, as it was pre-initialized to how
- * much memory was allocated.
- *
- * see path_appendnew() for details.
- */
- if (!keep)
- p = pprev;
- else
- p->next = NULL;
+ if (keep) {
+ **tail = p;
+ *tail = &p->next;
+ } else {
+ free(p);
+ }
}
if (recurse) {
@@ -309,13 +239,12 @@ static struct combine_diff_path *emit_path(struct combine_diff_path *p,
strbuf_add(base, path, pathlen);
strbuf_addch(base, '/');
- p = ll_diff_tree_paths(p, oid, parents_oid, nparent, base, opt,
- depth + 1);
+ ll_diff_tree_paths(tail, oid, parents_oid, nparent, base, opt,
+ depth + 1);
FAST_ARRAY_FREE(parents_oid, nparent);
}
strbuf_setlen(base, old_baselen);
- return p;
}
static void skip_uninteresting(struct tree_desc *t, struct strbuf *base,
@@ -428,8 +357,8 @@ static inline void update_tp_entries(struct tree_desc *tp, int nparent)
update_tree_entry(&tp[i]);
}
-static struct combine_diff_path *ll_diff_tree_paths(
- struct combine_diff_path *p, const struct object_id *oid,
+static void ll_diff_tree_paths(
+ struct combine_diff_path ***tail, const struct object_id *oid,
const struct object_id **parents_oid, int nparent,
struct strbuf *base, struct diff_options *opt,
int depth)
@@ -533,8 +462,8 @@ static struct combine_diff_path *ll_diff_tree_paths(
}
/* D += {δ(t,pi) if pi=p[imin]; "+a" if pi > p[imin]} */
- p = emit_path(p, base, opt, nparent,
- &t, tp, imin, depth);
+ emit_path(tail, base, opt, nparent,
+ &t, tp, imin, depth);
skip_emit_t_tp:
/* t↓, ∀ pi=p[imin] pi↓ */
@@ -545,8 +474,8 @@ static struct combine_diff_path *ll_diff_tree_paths(
/* t < p[imin] */
else if (cmp < 0) {
/* D += "+t" */
- p = emit_path(p, base, opt, nparent,
- &t, /*tp=*/NULL, -1, depth);
+ emit_path(tail, base, opt, nparent,
+ &t, /*tp=*/NULL, -1, depth);
/* t↓ */
update_tree_entry(&t);
@@ -561,8 +490,8 @@ static struct combine_diff_path *ll_diff_tree_paths(
goto skip_emit_tp;
}
- p = emit_path(p, base, opt, nparent,
- /*t=*/NULL, tp, imin, depth);
+ emit_path(tail, base, opt, nparent,
+ /*t=*/NULL, tp, imin, depth);
skip_emit_tp:
/* ∀ pi=p[imin] pi↓ */
@@ -575,24 +504,16 @@ static struct combine_diff_path *ll_diff_tree_paths(
free(tptree[i]);
FAST_ARRAY_FREE(tptree, nparent);
FAST_ARRAY_FREE(tp, nparent);
-
- return p;
}
struct combine_diff_path *diff_tree_paths(
- struct combine_diff_path *p, const struct object_id *oid,
+ const struct object_id *oid,
const struct object_id **parents_oid, int nparent,
struct strbuf *base, struct diff_options *opt)
{
- p = ll_diff_tree_paths(p, oid, parents_oid, nparent, base, opt, 0);
-
- /*
- * free pre-allocated last element, if any
- * (see path_appendnew() for details about why)
- */
- FREE_AND_NULL(p->next);
-
- return p;
+ struct combine_diff_path *head = NULL, **tail = &head;
+ ll_diff_tree_paths(&tail, oid, parents_oid, nparent, base, opt, 0);
+ return head;
}
/*
@@ -708,14 +629,13 @@ static void ll_diff_tree_oid(const struct object_id *old_oid,
const struct object_id *new_oid,
struct strbuf *base, struct diff_options *opt)
{
- struct combine_diff_path phead, *p;
+ struct combine_diff_path *paths, *p;
pathchange_fn_t pathchange_old = opt->pathchange;
- phead.next = NULL;
opt->pathchange = emit_diff_first_parent_only;
- diff_tree_paths(&phead, new_oid, &old_oid, 1, base, opt);
+ paths = diff_tree_paths(new_oid, &old_oid, 1, base, opt);
- for (p = phead.next; p;) {
+ for (p = paths; p;) {
struct combine_diff_path *pprev = p;
p = p->next;
free(pprev);
diff --git a/unix-socket.c b/unix-socket.c
index 483c9c448c..8860203c3f 100644
--- a/unix-socket.c
+++ b/unix-socket.c
@@ -65,8 +65,10 @@ static int unix_sockaddr_init(struct sockaddr_un *sa, const char *path,
if (strbuf_getcwd(&cwd))
return -1;
ctx->orig_dir = strbuf_detach(&cwd, NULL);
- if (chdir_len(dir, slash - dir) < 0)
+ if (chdir_len(dir, slash - dir) < 0) {
+ FREE_AND_NULL(ctx->orig_dir);
return -1;
+ }
}
memset(sa, 0, sizeof(*sa));