summaryrefslogtreecommitdiff
path: root/db-move
blob: 4dbec078f2a7a812f0be6a7791d2a99405733d67 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/bash

if [ $# -ne 4 ]; then
	echo "usage: $(basename $0) <pkgname|packagebase> <repo-from> <repo-to> <arch>"
	exit 1
fi

. "$(dirname $0)/db-functions"

source_makepkg

packagebase="$1"
repofrom="$2"
repoto="$3"
_arch="$4"

export CARCH="$_arch"

ftppath_from="$FTP_BASE/$repofrom/os/"
ftppath_to="$FTP_BASE/$repoto/os/"
svnrepo_from="$repofrom-$_arch"
svnrepo_to="$repoto-$_arch"
svnpath="$(get_svnpath $repoto)"
if [ "$svnpath" != "$(get_svnpath $repofrom)" ]; then
    echo "ERROR: Cannot move packages across SVN repos"
    echo "       A move must be within the same svn repo"
fi

[ "$UID" = "" ] && UID=$(uid)

WORKDIR="$TMPDIR/db-move.$svnrepo_from.$svnrepo_to.$UID"

cleanup() {
    trap '' 0 2
	# unlock
    repo_unlock $repoto $_arch
    repo_unlock $repofrom $_arch
	rm -rf "$WORKDIR"
	[ "$1" ] && exit $1
}

ctrl_c() {
	echo "Interrupted" >&2
	cleanup 0
}

die() {
	echo "$*" >&2
	cleanup 1
}

trap ctrl_c 2
trap cleanup 0

repo_lock $repoto $_arch
repo_lock $repofrom $_arch

/bin/mkdir -p "$WORKDIR"

cd "$WORKDIR"
/usr/bin/svn checkout -N $svnpath checkout
cd checkout

/usr/bin/svn up -q $packagebase
if [ -d "$packagebase/repos/$svnrepo_from" ]; then
    . "$packagebase/repos/$svnrepo_from/$BUILDSCRIPT"
    
    for i in ${pkgname[@]}; do
        _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT"
        if [ ! -f "$ftppath_from/${_arch}/$_pkgfile" ]; then
            die "error: package file '$_pkgfile' not found in repo '$repofrom'"
        fi
    done

    if [ -d "$packagebase/repos/$svnrepo_to" ]; then
        echo "    Removing existing package from subversion"
        /usr/bin/svn rm --force -q "$packagebase/repos/$svnrepo_to"
        /usr/bin/svn commit -q -m "$(basename $0): $packagebase removed by $(id -un) for move to $repoto"
    fi

    echo "    Moving svn entries"
    /usr/bin/svn mv -r HEAD "$packagebase/repos/$svnrepo_from" "$packagebase/repos/$svnrepo_to"
    /usr/bin/svn commit -m "$(basename $0): moved $packagebase from [$repofrom] to [$repoto] ($_arch)"

    echo "    Moving package file and updating DBs"
    cd "$WORKDIR"
    [ -d build/ ] || mkdir build
    cd build/

	if [ "${_arch}" == "any" ]; then
		arches="i686 x86_64"
	else
		arches="${_arch}"
	fi

    for architecture in $arches; do
		# copy the db file into our working area
		if [ -f "$ftppath_from/$architecture/$repofrom.db.tar.$DB_COMPRESSION" ]; then
		    /bin/cp "$ftppath_from/$architecture/$repofrom.db.tar.$DB_COMPRESSION" .
		    /usr/bin/repo-remove -q "$repofrom.db.tar.$DB_COMPRESSION" ${pkgname[@]} || die "Error in repo-remove"
		    #use '*' to move the old DB too
		    mv $repofrom.db.tar.$DB_COMPRESSION* "$ftppath_from/$architecture"
		    echo "    Package files will be cleaned up automatically"
		fi

		if [ -f "$ftppath_to/$architecture/$repoto.db.tar.$DB_COMPRESSION" ]; then
		    /bin/cp "$ftppath_to/$architecture/$repoto.db.tar.$DB_COMPRESSION" .
		fi

		for i in ${pkgname[@]}; do
			_pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT"
			/bin/cp "$ftppath_from/$architecture/$_pkgfile" .
			/usr/bin/repo-add -q "$repoto.db.tar.$DB_COMPRESSION" $_pkgfile || die "Error in repo-add $_pkgfile"
		done
		#use '*' to move the old DB too
		mv $repoto.db.tar.$DB_COMPRESSION* $ftppath_to/$architecture
        for i in ${pkgname[@]}; do
            _pkgfile="$i-$pkgver-$pkgrel-$_arch$PKGEXT"
            if [ "${_arch}" == "any" ]; then
                mv ${_pkgfile} $ftppath_to/any
                ln -s ../any/${_pkgfile} $ftppath_to/$architecture/
            else
                mv ${_pkgfile} $ftppath_to/$architecture
            fi
        done
	done
else
    die "Error: $packagebase is not in repo $repofrom"
fi

cleanup