|
@@ -26,92 +26,149 @@ EOF
|
|
|
|
|
|
group_add()
|
|
|
{
|
|
|
- groupadd -K GID_MIN=${group_gid_min} ${group_r_prefix}$1
|
|
|
- groupadd -K GID_MIN=${group_gid_min} ${group_w_prefix}$1
|
|
|
+ groupadd -K GID_MIN=${group_gid_min} "${group_r_prefix}$1"
|
|
|
+ groupadd -K GID_MIN=${group_gid_min} "${group_w_prefix}$1"
|
|
|
}
|
|
|
|
|
|
group_del()
|
|
|
{
|
|
|
- groupdel ${group_r_prefix}$1
|
|
|
- groupdel ${group_w_prefix}$1
|
|
|
+ groupdel "${group_r_prefix}$1"
|
|
|
+ groupdel "${group_w_prefix}$1"
|
|
|
}
|
|
|
|
|
|
-svn_add()
|
|
|
+create_repo_svn()
|
|
|
{
|
|
|
- repository_name=$1
|
|
|
- repo_r=${repository_root}/${repository_name}
|
|
|
- repo_w=${repository_root}/${repository_name}/${repository_name}
|
|
|
+ svnadmin --fs-type=fsfs create "$1"
|
|
|
+}
|
|
|
+
|
|
|
+create_repo_git()
|
|
|
+{
|
|
|
+ local saved_dir=""
|
|
|
+ saved_dir=`pwd`
|
|
|
+ mkdir "$1"
|
|
|
+ cd "$1"
|
|
|
+ git init --bare >/dev/null
|
|
|
+ cd "$saved_dir"
|
|
|
+}
|
|
|
+
|
|
|
+data_add()
|
|
|
+{
|
|
|
+ local r_name="$1"
|
|
|
+ local r_root="$2"
|
|
|
+ local r_link="$3"
|
|
|
+ local repo_r="${r_root}/${r_name}"
|
|
|
+ local repo_w="${r_root}/${r_name}/${r_name}"
|
|
|
|
|
|
- mkdir ${repo_r}
|
|
|
- saved_umask=`umask`
|
|
|
+ mkdir -p "${repo_r}"
|
|
|
+ local saved_umask=`umask`
|
|
|
umask 002
|
|
|
- svnadmin --fs-type=fsfs create ${repo_w}
|
|
|
+ local create_vcs_func="create_repo_$opts_vcs"
|
|
|
+ $create_vcs_func "$repo_w"
|
|
|
umask ${saved_umask}
|
|
|
}
|
|
|
|
|
|
-svn_fixmod()
|
|
|
+data_fixmod()
|
|
|
{
|
|
|
- repository_name=$1
|
|
|
- repo_r=${repository_root}/${repository_name}
|
|
|
- repo_w=${repository_root}/${repository_name}/${repository_name}
|
|
|
-
|
|
|
- chmod 750 ${repo_r}
|
|
|
- chgrp ${group_r_prefix}${repository_name} ${repo_r}
|
|
|
- chgrp -R ${group_w_prefix}${repository_name} ${repo_w}
|
|
|
- dirs=`find ${repo_w} -type d`
|
|
|
+ local r_name="$1"
|
|
|
+ local r_root="$2"
|
|
|
+ local r_link="$3"
|
|
|
+ local repo_r="${r_root}/${r_name}"
|
|
|
+ local repo_w="${r_root}/${r_name}/${r_name}"
|
|
|
+
|
|
|
+ chmod 750 "${repo_r}"
|
|
|
+ chgrp "${group_r_prefix}${r_name}" "${repo_r}"
|
|
|
+ chgrp -R "${group_w_prefix}${r_name}" "${repo_w}"
|
|
|
+ local dirs=""
|
|
|
+ dirs=`find "$repo_w" -type d`
|
|
|
+ local dir=""
|
|
|
for dir in $dirs; do
|
|
|
- chmod g+s $dir
|
|
|
+ chmod g+s "$dir"
|
|
|
done
|
|
|
- chmod -R g+w ${repo_w}
|
|
|
+ chmod -R g+w "${repo_w}"
|
|
|
}
|
|
|
|
|
|
-svn_del()
|
|
|
+data_del()
|
|
|
{
|
|
|
- rm -Rf ${repository_root}/$1
|
|
|
+ local r_name="$1"
|
|
|
+ local r_root="$2"
|
|
|
+ rm -Rf "$r_root/$r_name"
|
|
|
}
|
|
|
|
|
|
link_add()
|
|
|
{
|
|
|
- ln -s ${repository_root}/$1/$1 ${repository_link}/$1
|
|
|
+ local r_name="$1"
|
|
|
+ local r_root="$2"
|
|
|
+ local r_link="$3"
|
|
|
+ ln -sf "$r_root/$r_name/$r_name" "$r_link/$r_name"
|
|
|
}
|
|
|
|
|
|
link_del()
|
|
|
{
|
|
|
- rm -f ${repository_link}/$1
|
|
|
+ local r_name="$1"
|
|
|
+ local r_link="$2"
|
|
|
+ rm -f "$r_link/$r_name"
|
|
|
}
|
|
|
|
|
|
repository_add()
|
|
|
{
|
|
|
+ local rep_name=""
|
|
|
+
|
|
|
for rep_name in "$@"; do
|
|
|
- group_add $rep_name
|
|
|
- svn_add $rep_name
|
|
|
- svn_fixmod $rep_name
|
|
|
- link_add $rep_name
|
|
|
+ find_repo "$rep_name"
|
|
|
+ test "x$repo_root" = "x" || { echo "Error: The repository \"$rep_name\" already exists." 1>&2; exit 1; }
|
|
|
+ eval repo_root="\$repository_${opts_vcs}_root"
|
|
|
+ eval repo_link="\$repository_${opts_vcs}_link"
|
|
|
+ test "x$repo_root" = "x" && { echo "Error: Illegal repository root \"\"" 1>&2; exit 1; }
|
|
|
+ test "x$repo_link" = "x" && { echo "Error: Illegal repository link \"\"" 1>&2; exit 1; }
|
|
|
+ test -d "$repo_root" || { echo "Error: Illegal repository root \"$repo_root\"" 1>&2; exit 1; }
|
|
|
+ test -d "$repo_link" || { echo "Error: Illegal repository link \"$repo_link\"" 1>&2; exit 1; }
|
|
|
+ group_add "$rep_name"
|
|
|
+ data_add "$rep_name" "$repo_root" "$repo_link"
|
|
|
+ data_fixmod "$rep_name" "$repo_root" "$repo_link"
|
|
|
+ link_add "$rep_name" "$repo_root" "$repo_link"
|
|
|
+ echo "The repository \"$rep_name\" was succesfully created."
|
|
|
done
|
|
|
}
|
|
|
|
|
|
-repository_fixmod()
|
|
|
+repository_del()
|
|
|
{
|
|
|
+ local rep_name=""
|
|
|
+ local sure=""
|
|
|
+
|
|
|
for rep_name in "$@"; do
|
|
|
- svn_fixmod $rep_name
|
|
|
+ find_repo "$rep_name"
|
|
|
+ test "x$repo_root" = "x" -o "x$repo_link" = "x" && { echo "Error: Can't find repository \"$rep_name\"" 1>&2; exit 1; }
|
|
|
+ if test "x$opts_force" = "x"; then
|
|
|
+ read -r -p "Deleting repository \"$rep_name\". Are you sure (y/n)? " sure
|
|
|
+ test "x$sure" = "xy" -o "x$sure" = "xY" || { echo "The repository \"$rep_name\" will be not deleted."; continue; }
|
|
|
+ fi
|
|
|
+ link_del "$rep_name" "$repo_link"
|
|
|
+ data_del "$rep_name" "$repo_root"
|
|
|
+ group_del "$rep_name"
|
|
|
+ echo "The repository \"$rep_name\" was succesfully deleted."
|
|
|
done
|
|
|
}
|
|
|
|
|
|
-repository_del()
|
|
|
+repository_fixmod()
|
|
|
{
|
|
|
+ local rep_name=""
|
|
|
+
|
|
|
for rep_name in "$@"; do
|
|
|
- link_del $rep_name
|
|
|
- svn_del $rep_name
|
|
|
- group_del $rep_name
|
|
|
+ find_repo "$rep_name"
|
|
|
+ test "x$repo_root" = "x" -o "x$repo_link" = "x" && { echo "Error: Can't find repository \"$rep_name\"" 1>&2; exit 1; }
|
|
|
+ data_fixmod "$rep_name" "$repo_root" "$repo_link"
|
|
|
+ link_add "$rep_name" "$repo_root" "$repo_link"
|
|
|
+ echo "The repository \"$rep_name\" was succesfully fixed."
|
|
|
done
|
|
|
}
|
|
|
|
|
|
user_add()
|
|
|
{
|
|
|
- w=0
|
|
|
- r=0
|
|
|
-
|
|
|
- repository_name=$1
|
|
|
+ local w=0
|
|
|
+ local r=0
|
|
|
+ local repository_name="$1"
|
|
|
+ local user_name=""
|
|
|
+
|
|
|
shift
|
|
|
case "$1" in
|
|
|
r)
|
|
@@ -125,27 +182,28 @@ user_add()
|
|
|
w=1
|
|
|
;;
|
|
|
*)
|
|
|
- echo "Illegal parameter $1"
|
|
|
- exit -1
|
|
|
+ echo "Error: Illegal parameter \"$1\"" 1>&2
|
|
|
+ exit 1
|
|
|
;;
|
|
|
esac
|
|
|
shift
|
|
|
for user_name in "$@"; do
|
|
|
if [ $r -ne 0 ]; then
|
|
|
- adduser ${user_name} ${group_r_prefix}${repository_name}
|
|
|
+ adduser "${user_name}" "${group_r_prefix}${repository_name}"
|
|
|
fi
|
|
|
if [ $w -ne 0 ]; then
|
|
|
- adduser ${user_name} ${group_w_prefix}${repository_name}
|
|
|
+ adduser "${user_name}" "${group_w_prefix}${repository_name}"
|
|
|
fi
|
|
|
done
|
|
|
}
|
|
|
|
|
|
user_del()
|
|
|
{
|
|
|
- w=0
|
|
|
- r=0
|
|
|
+ local w=0
|
|
|
+ local r=0
|
|
|
+ local repository_name=$1
|
|
|
+ local user_name=""
|
|
|
|
|
|
- repository_name=$1
|
|
|
shift
|
|
|
case "$1" in
|
|
|
r)
|
|
@@ -159,35 +217,54 @@ user_del()
|
|
|
w=1
|
|
|
;;
|
|
|
*)
|
|
|
- echo "Illegal parameter $1"
|
|
|
- exit -1
|
|
|
+ echo "Error: Illegal parameter \"$1\"" 1>&2
|
|
|
+ exit 1
|
|
|
;;
|
|
|
esac
|
|
|
shift
|
|
|
for user_name in "$@"; do
|
|
|
if [ $r -ne 0 ]; then
|
|
|
- deluser ${user_name} ${group_r_prefix}${repository_name}
|
|
|
+ deluser "${user_name}" "${group_r_prefix}${repository_name}"
|
|
|
fi
|
|
|
if [ $w -ne 0 ]; then
|
|
|
- deluser ${user_name} ${group_w_prefix}${repository_name}
|
|
|
+ deluser "${user_name}" "${group_w_prefix}${repository_name}"
|
|
|
fi
|
|
|
done
|
|
|
}
|
|
|
|
|
|
+find_repo()
|
|
|
+{
|
|
|
+ local r=""
|
|
|
+ local r_root=""
|
|
|
+
|
|
|
+ repo_root=""
|
|
|
+ repo_link=""
|
|
|
+ for r in $possible_vcs; do
|
|
|
+ eval r_root="\$repository_${r}_root"
|
|
|
+ test "x$r_root" = "x" && continue
|
|
|
+ test -d "$r_root/$1" || continue
|
|
|
+ repo_root="$r_root"
|
|
|
+ eval repo_link="\$repository_${r}_link"
|
|
|
+ break
|
|
|
+ done
|
|
|
+
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
#------------------ MAIN -----------------------------------------
|
|
|
|
|
|
possible_vcs="svn git"
|
|
|
|
|
|
# Defaults for rfa.conf
|
|
|
group_gid_min="3000"
|
|
|
-group_w_prefix="vcs_w-"
|
|
|
-group_r_prefix="vcs_r-"
|
|
|
+group_w_prefix="vcs-w-"
|
|
|
+group_r_prefix="vcs-r-"
|
|
|
repository_root=
|
|
|
repository_link=
|
|
|
|
|
|
# Parse command line options
|
|
|
action="help"
|
|
|
-opts_force=0
|
|
|
+opts_force=""
|
|
|
opts_conf="/etc/repoforge/rfa.conf"
|
|
|
opts_vcs="svn"
|
|
|
|
|
@@ -227,6 +304,7 @@ while test "x$1" != "x"; do
|
|
|
shift
|
|
|
done
|
|
|
|
|
|
+# Early help message
|
|
|
test "x$action" = "xhelp" && { usage; exit 0; }
|
|
|
|
|
|
# Check options
|
|
@@ -241,12 +319,6 @@ test -r "$opts_conf" && . $opts_conf
|
|
|
# Compatibility (suppose SVN)
|
|
|
test "x$repository_svn_root" = "x" && repository_svn_root="$repository_root"
|
|
|
test "x$repository_svn_link" = "x" && repository_svn_link="$repository_link"
|
|
|
-eval repository_root="\$repository_${opts_vcs}_root"
|
|
|
-eval repository_link="\$repository_${opts_vcs}_link"
|
|
|
-test "x$repository_root" = "x" && { echo "Error: Illegal repository root \"\"" 1>&2; exit 1; }
|
|
|
-test "x$repository_link" = "x" && { echo "Error: Illegal repository link \"\"" 1>&2; exit 1; }
|
|
|
-test -d "$repository_root" || { echo "Error: Illegal repository root \"$repository_root\"" 1>&2; exit 1; }
|
|
|
-test -d "$repository_link" || { echo "Error: Illegal repository link \"$repository_link\"" 1>&2; exit 1; }
|
|
|
|
|
|
# Action
|
|
|
case "$action" in
|