aboutsummaryrefslogtreecommitdiffstats
path: root/repoctl
blob: a879155c01b23566c5ab59aeb7c8f61096ba61b5 (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
132
133
#!/bin/bash

. ./functions

function usage_cmd()
{
    case "$1" in
	mvpkg)
	    cat <<EOF
Usage: repoctl mvpkg [options] --srcrepo distribution:section:sectionrepo \
                                 --dstrepo distribution:section:sectionrepo \
				 --srcpkg|--binpkg name

Options:
  --dry-run : don't do anything, but show what would have been done.
  --no-genhdlists : don't regenerate hdlists
  --srcpkg name : name of a source package. All the binary packages
                   generated by this source package will also be moved.
  --binpkg name : name of a binary package.

Example :
  Move emacs packages from 1/core/updates_testing to 1/core/updates :
  repoctl mvpkg --srcrepo 1:core:updates_testing --dstrepo 1:core:updates \
                  --srcpkg emacs
EOF
	    ;;
    esac
}

function mvpkg()
{
    args=$(getopt -o hn -l srcrepo:,dstrepo:,dry-run,help,no-genhdlists,no-mirror,srcpkg:,binpkg: -- "$@")
    [ $? -ne 0 ] && usage_cmd mvpkg && exit 1
    eval set -- "$args"
    [ $# -lt 1 ] && exit 1
    while [ $# -gt 0 ]
    do
	case $1 in
	    -h|--help)
		usage_cmd mvpkg
		exit 0
		;;
	    -n|--dry-run)
		dryrun=echo
		shift;;
	    --no-genhdlists)
		nogenhdlists=1
		shift;;
	    --no-mirror)
		nomirror=1
		shift;;
	    --srcrepo)
		IFS=':' read -ra srcrepo <<< "$2"
		shift;shift;;
	    --dstrepo)
		IFS=':' read -ra dstrepo <<< "$2"
		shift;shift;;
	    --srcpkg)
		srcpkg="$2"
		shift;shift;;
	    --binpkg)
		binpkg="$2"
		shift;shift;;
	    --)
		shift;break;;
	    -*)
		usage
		exit 1
		;;
	    *)
		break
		;;
	esac
    done
    if [ -z "$srcrepo" -o -z "$dstrepo" -o \( -z "$srcpkg" -a -z "$binpkg" \) ]
    then
	usage
	exit 1
    fi
    if [ -n "$srcpkg" ]
    then
	move_pkg "${srcrepo[0]}" "${srcrepo[1]}" "${srcrepo[2]}" \
	         "${dstrepo[0]}" "${dstrepo[1]}" "${dstrepo[2]}" \
		 "$srcpkg" "/dev/stdout"
	if [ -z "$nogenhdlists" ]
	then
	    update_hdlists "${srcrepo[0]}" "${srcrepo[1]}" "${srcrepo[2]}"
	    update_hdlists "${dstrepo[0]}" "${dstrepo[1]}" "${dstrepo[2]}"
	    if [ -z "$nomirror" ]
	    then
		mirror_repository "${srcrepo[0]}"
		[ "${srcrepo[0]}" != "${dstrepo[0]}" ] &&
		    mirror_repository "${dstrepo[0]}"
	    fi
	fi
    else
	echo "The --binpkg option is not supported yet"
    fi
}

function usage()
{
    cat <<EOF
  Usage: repoctl COMMAND [COMMAND ARGUMENTS]

  Useful commands :
     mvpkg
     lnpkg
     rmpkg
     genhdlists
     mirrordistro
     getrepolock
     rmrepolock
     getdistrolock
     rmdistrolock

  For more infos about a command, use :
    repoctl COMMAND --help

EOF
}

case "$1" in
    mvpkg)
	shift
	mvpkg $@
	;;
    *)
	usage
	exit 1
	;;
esac