justinmassiot
3/23/2020 - 6:21 PM

Create SVN repository

Tools to create a SVN repository with default tree structure and properties

#!/bin/ash

echo "=========="
echo "SVN repository creation"
echo "--"

# ask for information
read -p "Repository name? (*) -> " repo
[ -z "$repo" ] && echo "The repository name can't be empty." && exit 1
read -p "Repo description?    -> " desc
read -p "In which folder?     -> " path
read -p "Server owner user?   -> " owner

# create the folder structure, if needed
[ ! -z "$path" ] && mkdir -p "$path" || path=.
# create the repository
svnadmin create "$path"/"$repo"

# enforce the 'pre-revprop-change' hook
read -p "Enable the default 'pre-revprop-change' hook? [y/n] " -r REVPROP_HOOK
if [[ "$REVPROP_HOOK" = "y" ]]
then
    cp "$path"/"$repo"/hooks/pre-revprop-change.tmpl "$path"/"$repo"/hooks/pre-revprop-change
fi

# give anonymous write access, temporarily
echo "[general]" > "$path"/"$repo"/conf/svnserve.conf
echo "anon-access = write" >> "$path"/"$repo"/conf/svnserve.conf

# initial custom configuration
read -p "Import the default SVN properties? [y/n] " -r IMPORT_PROPS
read -p "Create the default tree structure? [y/n] " -r CREATE_FOLDERS
echo
if [[ "$IMPORT_PROPS" = "y" ]] || [[ "$CREATE_FOLDERS" = "y" ]]
then
    svn checkout svn://127.0.0.1/"$path"/"$repo" /tmp/checkout_"$repo"
    if [[ "$IMPORT_PROPS" = "y" ]]
    then
        # enforce the custom SVN properties
        svn propset svn:global-ignores --file global-ignores.txt /tmp/checkout_"$repo"
        svn propset svn:auto-props --file auto-props.txt /tmp/checkout_"$repo"
    fi
    if [[ "$CREATE_FOLDERS" = "y" ]]
    then
        # create the standard SVN folder structure
        svn mkdir /tmp/checkout_"$repo"/trunk\
                  /tmp/checkout_"$repo"/tags\
                  /tmp/checkout_"$repo"/branches
    fi
    svn commit --message "Initial repository configuration" /tmp/checkout_"$repo"
    rm -Rf /tmp/checkout_"$repo"
fi

# create a configuration file for the new repo
echo "[general]" > "$path"/"$repo"/conf/svnserve.conf
echo "realm = ${desc}" >> "$path"/"$repo"/conf/svnserve.conf
echo "anon-access = none" >> "$path"/"$repo"/conf/svnserve.conf
echo "auth-access = write" >> "$path"/"$repo"/conf/svnserve.conf
echo "password-db = passwd" >> "$path"/"$repo"/conf/svnserve.conf
echo "# authz-db = authz" >> "$path"/"$repo"/conf/svnserve.conf
echo "# groups-db = groups" >> "$path"/"$repo"/conf/svnserve.conf
echo "# force-username-case = none" >> "$path"/"$repo"/conf/svnserve.conf
echo "# hooks-env = hooks-env" >> "$path"/"$repo"/conf/svnserve.conf
echo >> "$path"/"$repo"/conf/svnserve.conf
echo "[sasl]" >> "$path"/"$repo"/conf/svnserve.conf
echo "# use-sasl = true" >> "$path"/"$repo"/conf/svnserve.conf
echo "# min-encryption = 0" >> "$path"/"$repo"/conf/svnserve.conf
echo "# max-encryption = 256" >> "$path"/"$repo"/conf/svnserve.conf

# adjust owner user and access rights
chown -R "$owner" "$path"/"$repo"
chmod -R 700 "$path"/"$repo"

echo
echo "Repository created."
echo "--"
read -p "Do you want to create a new user with password? [y/n] " -r CREATE_PASSWORD
echo
if [[ "$CREATE_PASSWORD" = "y" ]]
then
    # create the first SVN user of this repo
    read -p    "SVN first user, name: " user
    read -s -p "SVN first user, pass: " pass
    echo
    echo "$user = $pass" >> "$path"/"$repo"/conf/passwd
fi

echo
echo "Done."

# TODO: import the hooks framework
# OS and filesystem related exclusions
Thumbs.db
.DS_Store
.svn
# Temporary and old files
*.bak
*.old
*.tmp
*.log
*.lok
## Altium Designer specific files and folders
# Folders
__Previews
History
ProjectOutputs
Project*Outputs*for*
Project*Logs*for*
# Files
*.Dat
*.~(*).*.Zip
*.*Preview
*.PRJPCBStructure
*.PrjPCBStructure
*.PrjPcbStructure
*.PrjMbdStructure
*.PRJFPGStructure
*.PrjFPGStructure
*.PrjFpgStructure
*.PRJPCBVariants
*.PrjPCBVariants
*.PrjPcbVariants
## C-language software development
# Folders
.settings
output
Debug
Release
## Generic files
# Script files
*.sh  = svn:mime-type=text/x-sh;svn:keywords=Author Date Id Rev URL;svn:executable
*.bat = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL;svn:executable
*.tcl = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL;svn:executable
*.py  = svn:mime-type=text/x-python;svn:keywords=Author Date Id Rev URL;svn:executable
# Image files
*.bmp = svn:mime-type=image/bmp
*.gif = svn:mime-type=image/gif
*.ico = svn:mime-type=image/ico
*.jpeg= svn:mime-type=image/jpeg
*.jpg = svn:mime-type=image/jpeg
*.png = svn:mime-type=image/png
*.tif = svn:mime-type=image/tiff
*.tiff= svn:mime-type=image/tiff
# Data files
*.pdf = svn:mime-type=application/pdf;svn:needs-lock
*.avi = svn:mime-type=video/avi
*.eps = svn:mime-type=application/postscript
*.gz  = svn:mime-type=application/gzip
*.mov = svn:mime-type=video/quicktime
*.mp3 = svn:mime-type=audio/mpeg
*.ps  = svn:mime-type=application/postscript
*.psd = svn:mime-type=application/photoshop
*.rtf = svn:mime-type=text/rtf
*.swf = svn:mime-type=application/x-shockwave-flash
*.tgz = svn:mime-type=application/gzip
*.wav = svn:mime-type=audio/wav
*.zip = svn:mime-type=application/zip
# Others
*.exe = svn:mime-type=application/octet-stream;svn:mime-type=application/exe;svn:mime-type=application/x-exe;svn:mime-type=application/x-executable;svn:executable
*.cmd = svn:mime-type=application/octet-stream;svn:executable
*.txt = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
##########
## MS Office files (binary files need auto-lock feature!)
# MS Word files
*.doc  = svn:mime-type=application/msword;svn:needs-lock
*.dot  = svn:mime-type=application/msword;svn:needs-lock
*.docx = svn:mime-type=application/vnd.openxmlformats-officedocument.wordprocessingml.document;svn:needs-lock
*.dotx = svn:mime-type=application/vnd.openxmlformats-officedocument.wordprocessingml.template;svn:needs-lock
*.docm = svn:mime-type=application/vnd.ms-word.document.macroEnabled.12;svn:needs-lock
*.dotm = svn:mime-type=application/vnd.ms-word.template.macroEnabled.12;svn:needs-lock
# MS PowerPoint files
*.ppt  = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock
*.pps  = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock
*.pot  = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock
*.ppa  = svn:mime-type=application/vnd.ms-powerpoint;svn:needs-lock
*.pptx = svn:mime-type=application/vnd.openxmlformats-officedocument.presentationml.presentation;svn:needs-lock
*.ppsx = svn:mime-type=application/vnd.openxmlformats-officedocument.presentationml.slideshow;svn:needs-lock
*.potx = svn:mime-type=application/vnd.openxmlformats-officedocument.presentationml.template;svn:needs-lock
*.pptm = svn:mime-type=application/vnd.ms-powerpoint.presentation.macroEnabled.12;svn:needs-lock
*.ppsm = svn:mime-type=application/vnd.ms-powerpoint.slideshow.macroEnabled.12;svn:needs-lock
*.potm = svn:mime-type=application/vnd.ms-powerpoint.template.macroEnabled.12;svn:needs-lock
*.ppam = svn:mime-type=application/vnd.ms-powerpoint.addin.macroEnabled.12;svn:needs-lock
# MS Excel files
*.xls  = svn:mime-type=application/vnd.ms-excel;svn:needs-lock
*.xlt  = svn:mime-type=application/vnd.ms-excel;svn:needs-lock
*.xla  = svn:mime-type=application/vnd.ms-excel;svn:needs-lock
*.xlsx = svn:mime-type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;svn:needs-lock
*.xltx = svn:mime-type=application/vnd.openxmlformats-officedocument.spreadsheetml.template;svn:needs-lock
*.xlsm = svn:mime-type=application/vnd.ms-excel.sheet.macroEnabled.12;svn:needs-lock
*.xltm = svn:mime-type=application/vnd.ms-excel.template.macroEnabled.12;svn:needs-lock
*.xlam = svn:mime-type=application/vnd.ms-excel.addin.macroEnabled.12;svn:needs-lock
*.xlsb = svn:mime-type=application/vnd.ms-excel.sheet.binary.macroEnabled.12;svn:needs-lock
# MS Visio files
*.vsd  = svn:mime-type=application/x-visio;svn:needs-lock
# MS Publisher files
*.pub  = svn:mime-type=application/x-mspublisher;svn:needs-lock
# MS Project files
*.mpp  = svn:mime-type=application/vnd.ms-project;svn:needs-lock
##########
## Open document (Open Office) files
*.odc = svn:mime-type=application/vnd.oasis.opendocument.chart;svn:needs-lock
*.odf = svn:mime-type=application/vnd.oasis.opendocument.formula;svn:needs-lock
*.odg = svn:mime-type=application/vnd.oasis.opendocument.graphics;svn:needs-lock
*.odi = svn:mime-type=application/vnd.oasis.opendocument.image;svn:needs-lock
*.odp = svn:mime-type=application/vnd.oasis.opendocument.presentation;svn:needs-lock
*.ods = svn:mime-type=application/vnd.oasis.opendocument.spreadsheet;svn:needs-lock
*.odt = svn:mime-type=application/vnd.oasis.opendocument.text;svn:needs-lock
##########
## C/C++ project
*.c   = svn:keywords=Author Date Id Rev URL
*.cpp = svn:keywords=Author Date Id Rev URL
*.h   = svn:keywords=Author Date Id Rev URL
*.dsp = svn:eol-style=CRLF
*.dsw = svn:eol-style=CRLF
*.asm = svn:keywords=Author Date Id Rev URL
Makefile = svn:mime-type=text/x-makefile;svn:executable
##########
## FPGA development
# Source files
*.vhd = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.vhdl= svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.v   = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
# Constraint files
*.ucf = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.qsf = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.lpf = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.sdc = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
# Binary files
*.bit = svn:mime-type=application/octet-stream
*.pof = svn:mime-type=application/octet-stream
*.jam = svn:mime-type=application/octet-stream
##########
## Altium Designer specific files
*.DsnWrk = svn:mime-type=text/plain
# Project files
*.PrjPcb = svn:mime-type=text/plain
*.PrjPcbStructure = svn:mime-type=text/plain
*.PrjFpg = svn:mime-type=text/plain
*.PrjCor = svn:mime-type=text/plain
*.PrjEmb = svn:mime-type=text/plain
*.PrjScr = svn:mime-type=text/plain
*.LibPkg = svn:mime-type=text/plain
# Schematic & PCB (binary files need auto-lock feature!)
*.SchDoc = svn:mime-type=application/octet-stream;svn:needs-lock
*.SchDot = svn:mime-type=application/octet-stream;svn:needs-lock
*.PcbDoc = svn:mime-type=application/octet-stream;svn:needs-lock
*.PcbDot = svn:mime-type=application/octet-stream;svn:needs-lock
*.net = svn:mime-type=text/plain
# FPGA
*.vhdtst = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.vertst = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
*.Constraint = svn:mime-type=text/plain;svn:keywords=Author Date Id Rev URL
# Libraries (binary files need auto-lock feature!)
*.SchLib = svn:mime-type=application/octet-stream;svn:needs-lock
*.PcbLib = svn:mime-type=application/octet-stream;svn:needs-lock
*.IntLib = svn:mime-type=text/plain
*.CmpLib = svn:mime-type=text/plain
*.VhdLib = svn:mime-type=text/plain
*.VerLib = svn:mime-type=text/plain
*.Pcb3DLib = svn:mime-type=application/octet-stream;svn:needs-lock
# Simulation & Simulation models
*.sdf = svn:mime-type=text/plain
*.mdl = svn:mime-type=text/plain
*.ckt = svn:mime-type=text/plain
*.nsx = svn:mime-type=text/plain
# Databases (need lock because they are very sensitive)
*.DbLib = svn:mime-type=text/plain;svn:needs-lock
*.DbLink = svn:mime-type=text/plain;svn:needs-lock
*.SVNDbLib = svn:mime-type=text/plain;svn:needs-lock
# Scripts
*.pas = svn:mime-type=text/plain
*.vbs = svn:mime-type=text/plain
*.dfm = svn:mime-type=text/plain
# Misc files
*.edf = svn:mime-type=text/plain
*.OutJob = svn:mime-type=text/plain;svn:needs-lock
*.OpenBus = svn:mime-type=text/plain;svn:needs-lock
*.Cam = svn:mime-type=application/octet-stream
*.SwPlatform = svn:mime-type=text/plain;svn:needs-lock
##########
## LTSpice simulations
*.asc = svn:mime-type=text/plain
*.plt = svn:mime-type=text/plain
*.raw = svn:mime-type=text/plain
*.op.raw = svn:mime-type=text/plain
*.log = svn:mime-type=text/plain