root/trunk/util/svncopy.sh

Revision 1800 (checked in by douglm, 5 years ago)

Allow specification of source for copy of repositories

Line 
1 #!/bin/sh
2
3 # Copy the current trunk to a new location and adjust the externals property
4
5 usage() {
6   echo "This script will copy the trunk (or named location) to a new location and"
7   echo "adjust the svn:externals property to refer to the new copies"
8   echo " "
9   echo " $0 help"
10   echo " $0 (branch | tag | release) name comment-text [ from (branch | tag | release) name]"
11   echo " "
12   echo " par 1: branch tag or release specifies what kind of copy"
13   echo " par 2: name e.g. my-copy or bedework-4.0.1"
14   echo " par 3: comment text"
15   echo " "
16   echo ' e.g. svncopy branch my-copy "my personal branch"'
17   echo " "
18   exit
19 }
20
21 # Check a parameter is set
22 #
23 # par 1: branch/tag/release
24 #
25 checkbranchtag() {
26   if [ "${1}x" = "x" ]
27   then
28       usage
29   fi
30
31   case "$1" in
32     branch)
33       BTR="branches"
34       ;;
35     tag)
36       BTR="tags"
37       ;;
38     release)
39       BTR="releases"
40       ;;
41     help)
42       usage
43       ;;
44     *)
45       echo " "
46       echo "**** "
47       echo "**** First parameter must be branch tag or release"
48       echo "**** "
49       echo " "
50       usage
51    esac
52 }
53
54 # Check a parameter is set
55 #
56 # par 1: Name of parameter
57 # par 2: value
58 #
59 check() {
60   if [ "${2}x" = "x" ]
61   then
62     echo " "
63     echo "**** "
64     echo "**** Parameter $1 is not set"
65     echo "**** "
66     echo " "
67     usage
68   fi
69 }
70
71 # ------------------------------------------------------------------
72 # copyproject - copy a single project
73 #
74 # par 1 - project name
75 # par 2 - destination
76 # par 3 - comment
77 # par 4 - source
78 # ------------------------------------------------------------------
79 copyproject() {
80   echo "copyproject $1 $2 from $4"
81   if [ "${1}" != "bedework" ]
82   then
83     echo "projects/$1 $SVNREPOSITORY/$1/$2" >> $SCTEMPFILE
84   fi
85   svn copy -m "$3" -rHEAD $SVNREPOSITORY/$1/$4 $SVNREPOSITORY/$1/$2
86 }
87
88 SOURCE="trunk"
89
90 if [ "${4}" = "from" ]
91 then
92   checkbranchtag "$5"
93   check "from-Name" "$6"
94   SOURCE=$BTR/$6
95 fi
96
97 checkbranchtag "$1"
98 check "Name" "$2"
99 check "Comment" "$3"
100
101 SVNREPOSITORY="https://www.bedework.org/svn"
102 TARGET="$BTR/$2"
103 COMMENT="$3"
104
105 PROJECTS=""
106 PROJECTS="$PROJECTS access"
107 PROJECTS="$PROJECTS bedework"
108 PROJECTS="$PROJECTS bwtools"
109 PROJECTS="$PROJECTS caldav"
110 PROJECTS="$PROJECTS caldavTest"
111 PROJECTS="$PROJECTS calendarapi"
112 PROJECTS="$PROJECTS contrib"
113 PROJECTS="$PROJECTS davutil"
114 PROJECTS="$PROJECTS dumprestore"
115 PROJECTS="$PROJECTS freebusy"
116 PROJECTS="$PROJECTS rpiutil"
117 PROJECTS="$PROJECTS synchml"
118 PROJECTS="$PROJECTS testsuite"
119 PROJECTS="$PROJECTS timezones"
120 PROJECTS="$PROJECTS webapps"
121 PROJECTS="$PROJECTS webdav"
122
123 SCTEMPDIR="${TMPDIR:=/tmp}/svncopydir$$"
124 SCTEMPFILE=$SCTEMPDIR/svncopy
125
126 mkdir $SCTEMPDIR
127
128 # Assure the file is removed at program termination
129 # or after we received a signal:
130 trap 'rm -rf "$SCTEMPDIR" >/dev/null 2>&1' 0
131 trap "exit 2" 1 2 3 15
132
133 for project in $PROJECTS
134 do
135    copyproject "$project" "$TARGET" "$COMMENT" "$SOURCE"
136 done
137
138 svn co -N $SVNREPOSITORY/bedework/$TARGET $SCTEMPDIR/bedework
139 svn propset svn:externals -F $SCTEMPFILE $SCTEMPDIR/bedework
140 svn commit -N -m "Change externals to new copies" $SCTEMPDIR/bedework
141 #more $SCTEMPFILE
Note: See TracBrowser for help on using the browser.