├── poudriere.yml ├── roles └── poudriere │ ├── files │ ├── poudriere_make.conf │ ├── tp │ └── subversion_config │ ├── vars │ └── main.yml │ ├── tasks │ └── main.yml │ └── templates │ ├── nginx.conf.j2 │ └── poudriere.conf.j2 ├── site.yml ├── README.md └── LICENSE /poudriere.yml: -------------------------------------------------------------------------------- 1 | remote_user: root 2 | roles: 3 | - role: poudriere 4 | -------------------------------------------------------------------------------- /roles/poudriere/files/poudriere_make.conf: -------------------------------------------------------------------------------- 1 | DEVELOPER_MODE=yes 2 | WITH_PKGNG=yes 3 | DISABLE_LICENSES=yes 4 | -------------------------------------------------------------------------------- /site.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # This playbook installs complete Poudriere testing suite ideal for 3 | # FreeBSD Ports development 4 | 5 | - include: poudriere.yml 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ansible-poudriere 2 | ================= 3 | 4 | **Automate building FreeBSD Poudriere environment** 5 | 6 | This is Ansible playbook for automating creation of FreeBSD Ports Tree test and packages build environment using Poudriere ('ports-mgmt/poudriere' in FreeBSD's ports). 7 | -------------------------------------------------------------------------------- /roles/poudriere/files/tp: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | for x in $(poudriere jail -l | grep -v JAILNAME | awk '{ print $1 }' | sort -n) ; do 4 | poudriere bulk -C -t -j ${x} $1 5 | if [ $? -ne 0 ]; then 6 | figlet FAIL ; echo ^G 7 | exit 1 8 | fi 9 | done 10 | 11 | figlet Success\! ; echo ^G 12 | exit 0 -------------------------------------------------------------------------------- /roles/poudriere/vars/main.yml: -------------------------------------------------------------------------------- 1 | poudriere_hostname: your poudriere host name goes here, eg: poudriere.example.com 2 | poudriere_zpool: your ZFS pool name, eg: zroot 3 | poudriere_zrootfs: your poudriere root directory, eg: /pd 4 | poudriere_use_tmpfs: depends on your host memory available, eg: all 5 | poudriere_ccache_dir: ccache directory to use, eg: "{{ zrootfs }}/ccache" 6 | poudriere_parallel_jobs: depends on your host CPU's available, eg: 8 7 | poudriere_make_jobs_number: depends on your host CPU's available, eg: 8 8 | poudriere_allow_make_jobs: depends on your host CPU's available, eg: yes 9 | poudriere_url_base: "http://{{ poudriere_hostname }}" 10 | poudriere_prepare_parallel_jobs_number: depends on your host CPU's and disk IO speeds, eg: 2 11 | nginx_listen_port: depends on your needs and/or network topology and configuration, eg:80 12 | nginx_server_name: "{{ poudriere_hostname }}" 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015, Bartek Rutkowski 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 15 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 17 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 18 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 20 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 21 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 22 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | -------------------------------------------------------------------------------- /roles/poudriere/tasks/main.yml: -------------------------------------------------------------------------------- 1 | --- 2 | # This playbook will install Poudriere and set it up 3 | 4 | - name: Install required packages 5 | pkgng: name={{ item }} state=present 6 | with_items: 7 | - poudriere-devel 8 | - nginx-devel 9 | - php5-arcanist 10 | - subversion 11 | - figlet 12 | 13 | - name: Create 'tp' script 14 | copy: src=tp dest=/usr/local/bin/tp 15 | 16 | - name: Create 'poudriere.conf' file 17 | template: src=poudriere.conf.j2 dest=/usr/local/etc/poudriere.conf 18 | 19 | - name: Create Poudriere jails 'make.conf' file 20 | copy: src=poudriere_make.conf dest=/usr/local/etc/poudriere.d/make.conf 21 | 22 | - name: Create 'nginx.conf' file 23 | template: src=nginx.conf.j2 dest=/usr/local/etc/nginx/nginx.conf 24 | 25 | - name: Create '/root/.subversion' dir 26 | file: path=/root/.subversion state=directory 27 | register: subversion_dir 28 | 29 | - name: Create Subversion config file 30 | copy: src=subversion_config dest=/root/.subversion/config 31 | when: subversion_dir | success 32 | 33 | - name: Update Poudriere jails 34 | command: poudriere jail -u -q -j {{ item.name }}{{ item.architecture }} 35 | with_items: 36 | - { architecture: 'amd64', version: '12.0-CURRENT', name: '120' } 37 | - { architecture: 'i386', version: '12.0-CURRENT', name: '120' } 38 | - { architecture: 'amd64', version: '11.0-RELEASE', name: '110' } 39 | - { architecture: 'i386', version: '11.0-RELEASE', name: '110' } 40 | - { architecture: 'amd64', version: '10.3-RELEASE', name: '103' } 41 | - { architecture: 'i386', version: '10.3-RELEASE', name: '103' } 42 | register: update_jails 43 | ignore_errors: yes 44 | changed_when: '"No updates are available to install." not in update_jails.stdout' 45 | 46 | - name: Create Poudriere jails 47 | command: poudriere jail -c -q -a {{ item.item.architecture }} -v {{ item.item.version }} -j {{ item.item.name }}{{ item.item.architecture }} 48 | with_items: update_jails.results 49 | when: update_jails | failed 50 | 51 | - name: Update Poudriere ports tree 52 | command: poudriere ports -u -m svn 53 | register: update_ports 54 | 55 | - name: Create Poudriere ports tree 56 | command: poudriere ports -c -m svn 57 | when: update_ports | failed 58 | 59 | -------------------------------------------------------------------------------- /roles/poudriere/templates/nginx.conf.j2: -------------------------------------------------------------------------------- 1 | worker_processes 1; 2 | 3 | error_log /var/log/nginx/error.log info; 4 | 5 | events { 6 | worker_connections 1024; 7 | } 8 | 9 | 10 | http { 11 | include mime.types; 12 | default_type application/octet-stream; 13 | 14 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 15 | '$status $body_bytes_sent "$http_referer" ' 16 | '"$http_user_agent" "$http_x_forwarded_for"'; 17 | 18 | access_log /var/log/nginx/access.log main; 19 | 20 | sendfile on; 21 | 22 | keepalive_timeout 65; 23 | 24 | # Allow gzipping js, css, log, svg and json files. 25 | gzip on; 26 | gzip_http_version 1.0; 27 | gzip_comp_level 6; 28 | gzip_proxied any; 29 | gzip_min_length 1100; 30 | gzip_buffers 16 8k; 31 | gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/gif image/jpeg image/png application/json image/svg+xml; 32 | 33 | types { 34 | application/json json; 35 | text/plain log; 36 | } 37 | 38 | server { 39 | listen {{ nginx_listen_port }}; 40 | server_name {{ nginx_server_name }}; 41 | 42 | access_log /var/log/nginx/{{ nginx_server_name }}.access.log main; 43 | 44 | root /usr/local/share/poudriere/html; 45 | 46 | location /data { 47 | alias {{ poudriere_zrootfs }}/data/logs/bulk; 48 | 49 | # Allow caching dynamic files but ensure they get rechecked 50 | location ~* ^.+\.(log|txz|tbz|bz2|gz)$ { 51 | add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 52 | } 53 | 54 | # Don't log json requests as they come in frequently and ensure 55 | # caching works as expected 56 | location ~* ^.+\.(json)$ { 57 | add_header Cache-Control "public, must-revalidate, proxy-revalidate"; 58 | access_log off; 59 | log_not_found off; 60 | } 61 | 62 | # Allow indexing only in log dirs 63 | location ~ /data/?.*/(logs|latest-per-pkg)/ { 64 | autoindex on; 65 | } 66 | 67 | break; 68 | } 69 | 70 | location {{ poudriere_zrootfs }} { 71 | alias {{ poudriere_zrootfs }}/data/packages/; 72 | autoindex on; 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /roles/poudriere/templates/poudriere.conf.j2: -------------------------------------------------------------------------------- 1 | # This file is controlled by Ansible! 2 | # All your changes are belong to us! 3 | 4 | # Poudriere can optionally use ZFS for its ports/jail storage. For 5 | # ZFS define ZPOOL, otherwise set NO_ZFS=yes 6 | # 7 | #### ZFS 8 | # The pool where poudriere will create all the filesystems it needs 9 | # poudriere will use tank/${ZROOTFS} as its root 10 | # 11 | # You need at least 7GB of free space in this pool to have a working 12 | # poudriere. 13 | # 14 | ZPOOL={{ poudriere_zpool }} 15 | 16 | ### NO ZFS 17 | # To not use ZFS, define NO_ZFS=yes 18 | #NO_ZFS=yes 19 | 20 | # root of the poudriere zfs filesystem, by default /poudriere 21 | ZROOTFS={{ poudriere_zrootfs }} 22 | 23 | # the host where to download sets for the jails setup 24 | # You can specify here a host or an IP 25 | # replace _PROTO_ by http or ftp 26 | # replace _CHANGE_THIS_ by the hostname of the mirrors where you want to fetch 27 | # by default: ftp://ftp.freebsd.org 28 | # 29 | # Also note that every protocols supported by fetch(1) are supported here, even 30 | # file:/// 31 | FREEBSD_HOST=_PROTO_://_CHANGE_THIS_ 32 | 33 | # By default the jails have no /etc/resolv.conf, you will need to set 34 | # REVOLV_CONF to a file on your hosts system that will be copied has 35 | # /etc/resolv.conf for the jail, except if you don't need it (using an http 36 | # proxy for example) 37 | RESOLV_CONF=/etc/resolv.conf 38 | 39 | # The directory where poudriere will store jails and ports 40 | BASEFS={{ poudriere_zrootfs }} 41 | 42 | # The directory where the jail will store the packages and logs 43 | # by default a zfs filesystem will be created and set to 44 | # ${BASEFS}/data 45 | # 46 | #POUDRIERE_DATA=${BASEFS}/data 47 | 48 | # Use portlint to check ports sanity 49 | USE_PORTLINT=yes 50 | 51 | # When building packages, a memory device can be used to speedup the build. 52 | # Only one of MFSSIZE or USE_TMPFS is supported. TMPFS is generally faster 53 | # and will expand to the needed amount of RAM. MFS is a bit slower, but is 54 | # more mature and can have its memory usage capped. 55 | 56 | # If set WRKDIRPREFIX will be mdmfs of the given size (mM or gG) 57 | #MFSSIZE=4G 58 | 59 | # Use tmpfs(5) 60 | # This can be a space-separated list of options: 61 | # wrkdir - Use tmpfs(5) for port building WRKDIRPREFIX 62 | # data - Use tmpfs(5) for poudriere cache/temp build data 63 | # localbase - Use tmpfs(5) for LOCALBASE (installing ports for packaging/testing) 64 | # all - Run the entire build in memory, including builder jails. 65 | # yes - Only enables tmpfs(5) for wrkdir 66 | # EXAMPLE: USE_TMPFS="wrkdir data" 67 | USE_TMPFS={{ poudriere_use_tmpfs }} 68 | 69 | # How much memory to limit tmpfs size to for *each builder* in GiB 70 | # (default: none) 71 | #TMPFS_LIMIT=8 72 | 73 | # How much memory to limit jail processes to for *each builder* 74 | # in GiB (default: none) 75 | #MAX_MEMORY=8 76 | 77 | # If set the given directory will be used for the distfiles 78 | # This allows to share the distfiles between jails and ports tree 79 | DISTFILES_CACHE=/usr/ports/distfiles 80 | 81 | # If set the ports or source tree marked to use csup method will use the defined mirror 82 | # Note: csup is deprecated. Use svn instead. 83 | #CSUP_HOST=cvsup._CHANGE_THIS_.freebsd.org 84 | 85 | # If set the ports tree or source tree marked to use svn will use the defined 86 | # mirror (default: svn0.us-west.FreeBSD.org) 87 | # The full mirror list is available here: 88 | # http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/svn-mirrors.html 89 | #SVN_HOST=svn0.us-west.FreeBSD.org 90 | 91 | # Automatic OPTION change detection 92 | # When bulk building packages, compare the options from kept packages to 93 | # the current options to be built. If they differ, the existing package 94 | # will be deleted and the port will be rebuilt. 95 | # Valid options: yes, no, verbose 96 | # verbose will display the old and new options 97 | #CHECK_CHANGED_OPTIONS=verbose 98 | 99 | # Automatic Dependency change detection 100 | # When bulk building packages, compare the dependencies from kept packages to 101 | # the current dependencies for every port. If they differ, the existing package 102 | # will be deleted and the port will be rebuilt. This helps catch changes such 103 | # as DEFAULT_RUBY_VERSION, PERL_VERSION, WITHOUT_X11 that change dependencies 104 | # for many ports. 105 | # Valid options: yes, no 106 | #CHECK_CHANGED_DEPS=yes 107 | 108 | 109 | # Path to the RSA key to sign the PKGNG repo with. See pkg-repo(8) 110 | #PKG_REPO_SIGNING_KEY=/etc/ssl/keys/repo.key 111 | 112 | 113 | # ccache support. Supply the path to your ccache cache directory. 114 | # It will be mounted into the jail and be shared among all jails. 115 | CCACHE_DIR={{ poudriere_ccache_dir }} 116 | 117 | # parallel build support. 118 | # 119 | # By default poudriere uses hw.ncpu to determine the number of builders. 120 | # You can override this default by changing PARALLEL_JOBS here, or 121 | # by specifying the -J flag to bulk/testport. 122 | # 123 | # Example to define PARALLEL_JOBS to one single job 124 | PARALLEL_JOBS={{ poudriere_parallel_jobs }} 125 | MAKE_JOBS_NUMBER={{ poudriere_make_jobs_number }} 126 | 127 | # How many jobs should be used for preparing the build? These tend to 128 | # be more IO bound and may be worth tweaking. Default: Same as PARALLEL_JOBS 129 | #PREPARE_PARALLEL_JOBS={{ poudriere_prepare_parallel_jobs_number }} 130 | 131 | 132 | # If set, failed builds will save the WRKDIR to ${POUDRIERE_DATA}/wrkdirs 133 | # SAVE_WRKDIR=yes 134 | 135 | # Choose the default format for the workdir packing: could be tar,tgz,tbz,txz 136 | # default is tbz 137 | # WRKDIR_ARCHIVE_FORMAT=tbz 138 | 139 | # Disable linux support 140 | # NOLINUX=yes 141 | 142 | # By default poudriere sets FORCE_PACKAGE 143 | # To disable it (useful when building public packages): 144 | # NO_FORCE_PACKAGE=yes 145 | 146 | # By default poudriere sets PACKAGE_BUILDING 147 | # To disable it: 148 | # NO_PACKAGE_BUILDING=yes 149 | 150 | # If you are using a proxy define it here: 151 | # export HTTP_PROXY=bla 152 | # export FTP_PROXY=bla 153 | # 154 | # Cleanout the restricted packages 155 | # NO_RESTRICTED=yes 156 | 157 | # By default MAKE_JOBS is disabled to allow only one process per cpu 158 | # Use the following to allow it anyway 159 | ALLOW_MAKE_JOBS={{ poudriere_allow_make_jobs }} 160 | 161 | # List of packages that will always be allowed to use MAKE_JOBS 162 | # regardless of ALLOW_MAKE_JOBS. This is useful for allowing ports 163 | # which holdup the rest of the queue to build more quickly. 164 | #ALLOW_MAKE_JOBS_PACKAGES="pkg ccache" 165 | 166 | # Timestamp every line of build logs 167 | # Default: no 168 | #TIMESTAMP_LOGS=no 169 | #TIMESTAMP_LOGS=yes 170 | 171 | # URL where your POUDRIERE_DATA/logs are hosted 172 | # This will be used for giving URL hints to the HTML output when 173 | # scheduling and starting builds 174 | URL_BASE={{ poudriere_url_base }} 175 | 176 | 177 | # This defines the max time (in seconds) that a command may run for a build 178 | # before it is killed for taking too long. Default: 86400 179 | #MAX_EXECUTION_TIME=86400 180 | 181 | # This defines the time (in seconds) before a command is considered to 182 | # be in a runaway state for having no output on stdout. Default: 7200 183 | #NOHANG_TIME=7200 184 | 185 | 186 | # The repository is updated atomically if set yes. This leaves the 187 | # repository untouched until the build completes. This involves using 188 | # hardlinks and symlinks. The operations are fast, but can be intrusive 189 | # for remote syncing or backups. 190 | # Recommended to always keep on. 191 | # Default: yes 192 | #ATOMIC_PACKAGE_REPOSITORY=yes 193 | 194 | # When using ATOMIC_PACKAGE_REPOSITORY, commit the packages if some 195 | # packages fail to build. Ignored ports are considered successful. 196 | # This can be set to 'no' to only commit the packages once no failures 197 | # are encountered. 198 | # Default: yes 199 | #COMMIT_PACKAGES_ON_FAILURE=yes 200 | 201 | # Keep older package repositories. This can be used to rollback a system 202 | # or to bisect issues by changing the repository to one of the older 203 | # versions and reinstalling everything with `pkg upgrade -f` 204 | # ATOMIC_PACKAGE_REPOSITORY is required for this. 205 | # Default: no 206 | #KEEP_OLD_PACKAGES=no 207 | 208 | # How many old package repositories to keep with KEEP_OLD_PACKAGES 209 | # Default: 5 210 | #KEEP_OLD_PACKAGES_COUNT=5 211 | 212 | # Make testing errors fatal. 213 | # If set to 'no', ports with test failure will be marked as failed but still 214 | # packaged to permit testing dependent ports (useful for bulk -t -a) 215 | # Default: yes 216 | #PORTTESTING_FATAL=yes 217 | 218 | # Define the building jail hostname to be used when building the packages 219 | # Some port/packages hardcode the hostname of the host during build time 220 | # This is a necessary setup for reproducible builds. 221 | #BUILDER_HOSTNAME=pkg.FreeBSD.org 222 | 223 | # Define to get a predictable timestamp on the ports tree 224 | # This is a necessary setup for reproducible builds. 225 | #PRESERVE_TIMESTAMP=yes 226 | 227 | # Define to yes to build and stage as a regular user 228 | # Default: no 229 | #BUILD_AS_NON_ROOT=yes 230 | 231 | # Define pkgname globs to boost priority for 232 | # Default: none 233 | #PRIORITY_BOOST="pypy openoffice*" 234 | 235 | # Define format for buildnames 236 | # Default: %Y-%m-%d_%Hh%Mm%Ss 237 | # ISO8601: 238 | #BUILDNAME_FORMAT="%FT%TZ" 239 | 240 | # Define format for build duration times 241 | # Default: %H:%M:%S 242 | #DURATION_FORMAT="%H:%M:%S" 243 | 244 | # Use colors when in a TTY 245 | # Default: yes 246 | USE_COLORS=yes 247 | -------------------------------------------------------------------------------- /roles/poudriere/files/subversion_config: -------------------------------------------------------------------------------- 1 | ### This file configures various client-side behaviors. 2 | ### 3 | ### The commented-out examples below are intended to demonstrate 4 | ### how to use this file. 5 | 6 | ### Section for authentication and authorization customizations. 7 | [auth] 8 | ### Set password stores used by Subversion. They should be 9 | ### delimited by spaces or commas. The order of values determines 10 | ### the order in which password stores are used. 11 | ### Valid password stores: 12 | ### gnome-keyring (Unix-like systems) 13 | ### kwallet (Unix-like systems) 14 | ### gpg-agent (Unix-like systems) 15 | ### keychain (Mac OS X) 16 | ### windows-cryptoapi (Windows) 17 | # password-stores = gpg-agent,gnome-keyring,kwallet 18 | ### To disable all password stores, use an empty list: 19 | # password-stores = 20 | ### 21 | ### Set ssl-client-cert-file-prompt to 'yes' to cause the client 22 | ### to prompt for a path to a client cert file when the server 23 | ### requests a client cert but no client cert file is found in the 24 | ### expected place (see the 'ssl-client-cert-file' option in the 25 | ### 'servers' configuration file). Defaults to 'no'. 26 | # ssl-client-cert-file-prompt = no 27 | ### 28 | ### The rest of the [auth] section in this file has been deprecated. 29 | ### Both 'store-passwords' and 'store-auth-creds' can now be 30 | ### specified in the 'servers' file in your config directory 31 | ### and are documented there. Anything specified in this section 32 | ### is overridden by settings specified in the 'servers' file. 33 | # store-passwords = no 34 | # store-auth-creds = no 35 | 36 | ### Section for configuring external helper applications. 37 | [helpers] 38 | ### Set editor-cmd to the command used to invoke your text editor. 39 | ### This will override the environment variables that Subversion 40 | ### examines by default to find this information ($EDITOR, 41 | ### et al). 42 | # editor-cmd = editor (vi, emacs, notepad, etc.) 43 | ### Set diff-cmd to the absolute path of your 'diff' program. 44 | ### This will override the compile-time default, which is to use 45 | ### Subversion's internal diff implementation. 46 | # diff-cmd = diff_program (diff, gdiff, etc.) 47 | ### Diff-extensions are arguments passed to an external diff 48 | ### program or to Subversion's internal diff implementation. 49 | ### Set diff-extensions to override the default arguments ('-u'). 50 | # diff-extensions = -u -p 51 | ### Set diff3-cmd to the absolute path of your 'diff3' program. 52 | ### This will override the compile-time default, which is to use 53 | ### Subversion's internal diff3 implementation. 54 | # diff3-cmd = diff3_program (diff3, gdiff3, etc.) 55 | ### Set diff3-has-program-arg to 'yes' if your 'diff3' program 56 | ### accepts the '--diff-program' option. 57 | # diff3-has-program-arg = [yes | no] 58 | ### Set merge-tool-cmd to the command used to invoke your external 59 | ### merging tool of choice. Subversion will pass 5 arguments to 60 | ### the specified command: base theirs mine merged wcfile 61 | # merge-tool-cmd = merge_command 62 | 63 | ### Section for configuring tunnel agents. 64 | [tunnels] 65 | ### Configure svn protocol tunnel schemes here. By default, only 66 | ### the 'ssh' scheme is defined. You can define other schemes to 67 | ### be used with 'svn+scheme://hostname/path' URLs. A scheme 68 | ### definition is simply a command, optionally prefixed by an 69 | ### environment variable name which can override the command if it 70 | ### is defined. The command (or environment variable) may contain 71 | ### arguments, using standard shell quoting for arguments with 72 | ### spaces. The command will be invoked as: 73 | ### svnserve -t 74 | ### (If the URL includes a username, then the hostname will be 75 | ### passed to the tunnel agent as @.) If the 76 | ### built-in ssh scheme were not predefined, it could be defined 77 | ### as: 78 | #ssh = $SVN_SSH ssh -q 79 | ssh = $SVN_SSH ssh -q -l SVN_SSH_USERNAME 80 | ### If you wanted to define a new 'rsh' scheme, to be used with 81 | ### 'svn+rsh:' URLs, you could do so as follows: 82 | # rsh = rsh 83 | ### Or, if you wanted to specify a full path and arguments: 84 | # rsh = /path/to/rsh -l myusername 85 | ### On Windows, if you are specifying a full path to a command, 86 | ### use a forward slash (/) or a paired backslash (\\) as the 87 | ### path separator. A single backslash will be treated as an 88 | ### escape for the following character. 89 | 90 | ### Section for configuring miscellaneous Subversion options. 91 | [miscellany] 92 | ### Set global-ignores to a set of whitespace-delimited globs 93 | ### which Subversion will ignore in its 'status' output, and 94 | ### while importing or adding files and directories. 95 | ### '*' matches leading dots, e.g. '*.rej' matches '.foo.rej'. 96 | # global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__ 97 | # *.rej *~ #*# .#* .*.swp .DS_Store 98 | ### Set log-encoding to the default encoding for log messages 99 | # log-encoding = latin1 100 | ### Set use-commit-times to make checkout/update/switch/revert 101 | ### put last-committed timestamps on every file touched. 102 | # use-commit-times = yes 103 | ### Set no-unlock to prevent 'svn commit' from automatically 104 | ### releasing locks on files. 105 | # no-unlock = yes 106 | ### Set mime-types-file to a MIME type registry file, used to 107 | ### provide hints to Subversion's MIME type auto-detection 108 | ### algorithm. 109 | # mime-types-file = /path/to/mime.types 110 | ### Set preserved-conflict-file-exts to a whitespace-delimited 111 | ### list of patterns matching file extensions which should be 112 | ### preserved in generated conflict file names. By default, 113 | ### conflict files use custom extensions. 114 | # preserved-conflict-file-exts = doc ppt xls od? 115 | ### Set enable-auto-props to 'yes' to enable automatic properties 116 | ### for 'svn add' and 'svn import', it defaults to 'no'. 117 | ### Automatic properties are defined in the section 'auto-props'. 118 | enable-auto-props = yes 119 | ### Set interactive-conflicts to 'no' to disable interactive 120 | ### conflict resolution prompting. It defaults to 'yes'. 121 | # interactive-conflicts = no 122 | ### Set memory-cache-size to define the size of the memory cache 123 | ### used by the client when accessing a FSFS repository via 124 | ### ra_local (the file:// scheme). The value represents the number 125 | ### of MB used by the cache. 126 | # memory-cache-size = 16 127 | global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo 128 | *.bak *.orig *.rej *~ #*# .#* .*.swp .DS_Store 129 | 130 | ### Section for configuring automatic properties. 131 | [auto-props] 132 | ### The format of the entries is: 133 | ### file-name-pattern = propname[=value][;propname[=value]...] 134 | ### The file-name-pattern can contain wildcards (such as '*' and 135 | ### '?'). All entries which match (case-insensitively) will be 136 | ### applied to the file. Note that auto-props functionality 137 | ### must be enabled, which is typically done by setting the 138 | ### 'enable-auto-props' option. 139 | # *.c = svn:eol-style=native 140 | # *.cpp = svn:eol-style=native 141 | # *.h = svn:keywords=Author Date Id Rev URL;svn:eol-style=native 142 | # *.dsp = svn:eol-style=CRLF 143 | # *.dsw = svn:eol-style=CRLF 144 | # *.sh = svn:eol-style=native;svn:executable 145 | # *.txt = svn:eol-style=native;svn:keywords=Author Date Id Rev URL; 146 | # *.png = svn:mime-type=image/png 147 | # *.jpg = svn:mime-type=image/jpeg 148 | # Makefile = svn:eol-style=native 149 | [auto-props] 150 | *.c = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 151 | *.h = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 152 | *.s = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 153 | *.S = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 154 | *.cc = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 155 | *.cpp = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 156 | *.cxx = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 157 | *.in = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 158 | *.sh = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain; svn:executable 159 | *.pl = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain; svn:executable 160 | *.pm = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 161 | *.py = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 162 | *.rb = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 163 | *.awk = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 164 | *.sed = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 165 | *.txt = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 166 | *.conf = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 167 | Makefile* = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 168 | *.1 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 169 | *.2 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 170 | *.3 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 171 | *.4 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 172 | *.5 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 173 | *.6 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 174 | *.7 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 175 | *.8 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 176 | *.9 = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 177 | 178 | *.css = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/css 179 | *.html = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/html 180 | *.xhtml = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/html+xml 181 | *.xml = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/xml 182 | *.xsd = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/xml 183 | *.xsl = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/xml 184 | *.xslt = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/xml 185 | *.xul = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/xul 186 | *.sgml = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/sgml 187 | *.docbook = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/sgml 188 | 189 | *.pdf = svn:mime-type=application/pdf 190 | *.ps = svn:mime-type=application/postscript 191 | *.eps = svn:mime-type=application/postscript 192 | *.exe = svn:mime-type=application/octet-stream 193 | *.bin = svn:mime-type=application/octet-stream 194 | 195 | *.jpg = svn:mime-type=image/jpeg 196 | *.jpeg = svn:mime-type=image/jpeg 197 | *.gif = svn:mime-type=image/gif 198 | *.png = svn:mime-type=image/png 199 | *.tiff = svn:mime-type=image/tiff 200 | 201 | ### ports specific 202 | bsd.*.mk = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 203 | distinfo* = svn:eol-style=native; fbsd:nokeywords=yes; svn:mime-type=text/plain 204 | extrapatch-* = svn:eol-style=native; fbsd:nokeywords=yes; svn:mime-type=text/plain 205 | extra-patch-*= svn:eol-style=native; fbsd:nokeywords=yes; svn:mime-type=text/plain 206 | patch-* = svn:eol-style=native; fbsd:nokeywords=yes; svn:mime-type=text/plain 207 | pkg-* = svn:eol-style=native; fbsd:nokeywords=yes; svn:mime-type=text/plain 208 | Makefile* = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain 209 | 210 | ### Section for configuring working copies. 211 | [working-copy] 212 | ### Set to a list of the names of specific clients that should use 213 | ### exclusive SQLite locking of working copies. This increases the 214 | ### performance of the client but prevents concurrent access by 215 | ### other clients. Third-party clients may also support this 216 | ### option. 217 | ### Possible values: 218 | ### svn (the command line client) 219 | # exclusive-locking-clients = 220 | ### Set to true to enable exclusive SQLite locking of working 221 | ### copies by all clients using the 1.8 APIs. Enabling this may 222 | ### cause some clients to fail to work properly. This does not have 223 | ### to be set for exclusive-locking-clients to work. 224 | # exclusive-locking = false 225 | --------------------------------------------------------------------------------