pastebin - collaborative debugging tool
eckelmann.kpaste.net RSS


SVNrauch2EAGgit patch history migration script, V0.0.1
Posted by Anonymous on Fri 7th Feb 2020 17:30
raw | new post
view followups (newest first): SVNrauch2EAGgit patch history migration script, V0.0.1 by Anonymous
modification of post by Anonymous (view diff)

  1. #!/bin/ksh93
  2.  
  3. #
  4. # merge Rauchs Subversion tree into our git,
  5. # one patch at the time
  6. #
  7.  
  8. set -o xtrace
  9. set -o errexit
  10. set -o pipefail
  11.  
  12. which bunzip2   || exit 1
  13. which git       || exit 1
  14. which realpath  || exit 1
  15. which svn       || exit 1
  16. which svnadmin  || exit 1
  17. which svnrdump  || exit 1
  18.  
  19.  
  20. builtin chmod   || exit 1
  21. #builtin grep   || exit 1
  22. #builtin ln     || exit 1 # broken Debian ksh93 package config, grrr...
  23. builtin mkdir   || exit 1
  24. builtin printf  || exit 1
  25. #builtin rm     || exit 1 # broken Debian ksh93 package config, grrr...
  26. builtin wc      || exit 1
  27.  
  28.  
  29. # clean data from previous run
  30. rm -Rf gitsvnclone1 svnstore convertedsrc compare_oldnew
  31.  
  32.  
  33. # squish locale settings, we need the POSIX defaults
  34. if [[ "${!LC_*}" != '' ]] ; then
  35.         unset "${!LC_@}"
  36. fi
  37. unset LANG
  38. export LANG='POSIX'
  39.  
  40. typeset -r infile='rauch_svndump20200128.svndump.bz2'
  41.  
  42. typeset -r basedir="$PWD"
  43. compound svninfo
  44.  
  45. typeset i dummy
  46.  
  47. [[ ! -f "${infile}" ]] && exit 1
  48. [[ ! -r "${infile}" ]] && exit 1
  49.  
  50. # create empty SVN repository
  51. svnadmin create svnstore
  52. # add dummy hook to allow property changes for "svnrdump load"
  53. printf '#!/bin/sh\nexit 0\n' >'svnstore/hooks/pre-revprop-change'
  54. chmod a+x 'svnstore/hooks/pre-revprop-change'
  55.  
  56. bunzip2 -c <"${infile}" | svnrdump load "file://$basedir/svnstore/"
  57.  
  58. # get HEAD revision (number) from svn repository
  59. integer svninfo.revision
  60. svninfo.cmdout="$(svn info "file://$basedir/svnstore")"
  61. dummy="${svninfo.cmdout/~(E)Revision:[[:space:]]+([[:digit:]]+)/ }"
  62. (( svninfo.revision=.sh.match[1] ))
  63.  
  64. printf '# Subversion info:\n'
  65. print -v svninfo
  66.  
  67. mkdir 'gitsvnclone1'
  68. cd 'gitsvnclone1'
  69. git svn clone "file://$basedir/svnstore"
  70.  
  71. ls -lad 'svnstore/trunk/projekt/ptxdist/'
  72.  
  73.  
  74.  
  75. #
  76. # extract all patches from git repository previously
  77. # stored by "git svn" there
  78. #
  79. cd 'svnstore/trunk/projekt/ptxdist/'
  80. git format-patch -$(( svninfo.revision+1 ))
  81.  
  82. # remove patch files which are empty
  83. for i in *.patch ; do if [[ ! -s "$i" ]] ; then rm -- "$i" ; fi ; done
  84.  
  85. # list remaining patches
  86. IFS=$'\n' ; typeset -a patchlist=( $(ls -1ad $PWD/*.patch ) )
  87. printf '\n#### Patches:\n'
  88. printf '%q\n' "${patchlist[@]}"
  89. printf '\n#### Number of patches: %d\n' "$(wc -l <<<"$patchlist")"
  90.  
  91.  
  92. cd "$basedir"
  93. mkdir 'convertedsrc'
  94. cd 'convertedsrc'
  95.  
  96. printf '%s\n' "${patchlist[@]}" | sort -n | while read i ; do
  97.         # 1. use "|| true" to circumvent -o errexit for now since
  98.         # GNU patch does not support GIT binary patches and returns
  99.         # a non-0 exit code for such patches
  100.         # 2. use --force to avoid interactive queries about GIT binary patches
  101.         patch -p3 --force <"$i" || true
  102. done
  103.  
  104.  
  105. cd "$basedir"
  106. mkdir 'compare_oldnew'
  107. cd 'compare_oldnew'
  108. (mkdir 'old' && cd 'old' && svn export "file://$basedir/svnstore/trunk/projekt/ptxdist")
  109. mkdir 'new' ; ln -s '../../convertedsrc/ptxdist' 'new/.'
  110.  
  111.  
  112. #
  113. # Check whether the sources differ
  114. # We exclude binaries here because GNU patch doesn't support GIT binary
  115. # patches and the previous state skipped them completely. Instead, we let
  116. # grep(1) filter complains of diff(1) that those files only exists in
  117. # compare_oldnew/old/ptxdist/ but not in compare_oldnew/new/ptxdist/
  118. #
  119. cd "$basedir"
  120. (diff -r -u 'compare_oldnew/old/ptxdist/' 'compare_oldnew/new/ptxdist/' || true) 2>&1 |
  121.         grep -E -v '^Only in compare_oldnew/old/.+: (ecu-jobctl-demo|barebox-image|bareboxenv|libEMC|lin|.+\.(app|png|jpg|jpeg|gz|bin|iop|pdf|so\.[[:digit:]]+.+|crc|vtg))$'
  122.  
  123.  
  124. printf '# DONE!\n'
  125. exit 0
  126. # EOF.

Submit a correction or amendment below (click here to make a fresh posting)
After submitting an amendment, you'll be able to view the differences between the old and new posts easily.

Syntax highlighting:

To highlight particular lines, prefix each line with {%HIGHLIGHT}





All content is user-submitted.
The administrators of this site (kpaste.net) are not responsible for their content.
Abuse reports should be emailed to us at