{ "info": { "author": "Trent Nelson", "author_email": "trent@snakebite.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Unix Shell", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Version Control" ], "description": "\n### What is Enversion?\n\nEnversion is a server-side tool that sits in front of your Subversion\nrepositories and validates incoming commits. It can detect a wide variety\nof problematic commits ([over 80](/lib/evn/constants.py#L34)) and will block\nthem at the pre-commit stage.\n\nEnversion was designed specifically for enterprise Subversion deployments,\nwhich have vastly different usage patterns than typical open source Subversion\nrepositories.\n\nSee the [wiki](/../../wiki/) for more information:\n - [Tutorial 1 - Creating a new, Enversion-enabled Subversion Repository](/../../wiki/Tutorial-1-New-Repository)\n - [Tutorial 2 - Enabling Enversion against an existing Subversion Repository](/../../wiki/Tutorial-2-Existing-Repository)\n\n### Installation & Quick Start: Cheatsheet\nPre-requisites:\n```\n% wget http://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86_64.sh\n% bash Miniconda-3.3.0-Linux-x86_64.sh\n% source ~/.bashrc\n% conda config --add channels enversion\n```\n\nTo install:\n```\n% conda install enversion\n```\n\nTo update to the latest version:\n```\n% conda update enversion\n```\n\nTo create isolated environments with different versions:\n```\n% conda create -n evn-0.2.5 enversion=0.2.5\n% source activate evn-0.2.5\n```\n\n```\n% conda create -n evn-0.2.6 enversion=0.2.6\n% source activate evn-0.2.6\n```\n\nTo create a new Subversion repository automatically protected by Enversion:\n```\n% evnadmin create foo\n```\n\nTo verify Enversion is installed and working:\n```\n% evnadmin show-repo-hook-status test\n+-------------------------------------------------------------------------+\n| Repository Hook Status for 'test' |\n| (/home/evnadm/test) |\n+-------------------------------------------------------------------------+\n| Name | Exists? | Valid? | Exe? | Cnfgrd? | Enbld? | Rdb? |\n+---------------------|---------|--------|------|---------|--------|------+\n| post-revprop-change| Y | - | Y | Y | Y | N |\n| start-commit| Y | - | Y | Y | Y | N |\n| post-lock| Y | - | Y | Y | Y | N |\n| pre-lock| Y | - | Y | Y | Y | N |\n| post-unlock| Y | - | Y | Y | Y | N |\n| pre-unlock| Y | - | Y | Y | Y | N |\n| pre-commit| Y | - | Y | Y | Y | N |\n| post-commit| Y | - | Y | Y | Y | N |\n| pre-revprop-change| Y | - | Y | Y | Y | N |\n|=====================|=========|========|======|=========|========|======|\n| evn.sh| Y | Y | Y | 9/9 | 9/9 | - |\n+-------------------------------------------------------------------------+\n```\n\nTo enable Enversion against an existing repository, first, analyze it:\n```\n% evnadmin analyze myrepo\n```\n\nThen enable:\n```\n% evnadmin enable myrepo\n```\n\nTutorials:\n - [Tutorial 1 - Creating a new, Enversion-enabled Subversion Repository](/../../wiki/Tutorial-1-New-Repository)\n - [Tutorial 2 - Enabling Enversion against an existing Subversion Repository](/../../wiki/Tutorial-2-Existing-Repository)\n\n### Installation Guide - Detailed\n\nThe easiest (and recommended) way to install Enversion is via ``conda``, the\ncross-platform (Windows, Linux and OS X) binary package manager from [Continuum\nAnalytics](http://continuum.io).\n\n> Already have ``conda`` installed? Enversion installation is simple:\n> ```\n> % conda config --add channels enversion\n> % conda install enversion\n> ```\n\nYou can get ``conda`` in one of two ways:\n\n - Install [Anaconda](https://store.continuum.io/cshop/anaconda/) (245MB\n to 483MB depending on platform).\n\n - Install [Miniconda](http://conda.pydata.org/miniconda.html#miniconda)\n (18MB to 30MB depending on platform).\n\n[Anaconda](https://store.continuum.io/cshop/anaconda/) is a fully-fledged,\ncompletely free, enterprise-ready Python distribution for large-scale data\nprocessing, predictive analytics, and scientific computing. [It ships with\nover 125 of the most popular Python packages for science, math, engineering and\ndata analysis](http://docs.continuum.io/anaconda/pkgs.html).\n\n[Miniconda](http://conda.pydata.org/miniconda.html#miniconda) is a bare-bones\nversion of Anaconda that only includes the small subset of Python packages\nrequired by ``conda``.\n\n> Pro-tip: installed Miniconda, but want to try out Anaconda? Simply run:\n> ```\n> % conda install anaconda\n> ```\n\n#### Miniconda Installation (Linux)\n\nMiniconda installation is trivial:\n\n```\n[evnadm@centos5x64 ~]$ wget http://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86_64.sh\n--2014-03-25 08:12:37-- http://repo.continuum.io/miniconda/Miniconda-3.3.0-Linux-x86_64.sh\nResolving repo.continuum.io... 72.21.195.181\nConnecting to repo.continuum.io|72.21.195.181|:80... connected.\nHTTP request sent, awaiting response... 200 OK\nLength: 19998995 (19M) [application/x-sh]\nSaving to: `Miniconda-3.3.0-Linux-x86_64.sh'\n\n100%[=========================================>] 19,998,995 1.81M/s in 9.2s\n\n2014-03-25 08:12:50 (2.07 MB/s) - `Miniconda-3.3.0-Linux-x86_64.sh' saved [19998995/19998995]\n\n[evnadm@centos5x64 ~]$\n```\n\nOnce downloaded, simply execute the file via bash to install:\n\n```\n[evnadm@centos5x64 ~]$ bash Miniconda-3.3.0-Linux-x86_64.sh\n\nWelcome to Miniconda 3.3.0 (by Continuum Analytics, Inc.)\n\nIn order to continue the installation process, please review the license\nagreement.\nPlease, press ENTER to continue\n>>>\n===================================\nAnaconda END USER LICENSE AGREEMENT\n===================================\n\n\n1. You include a copy of this EULA in all copies of the derived software.\n2. In advertising and labeling material for products built with Anaconda\n\nDo you approve the license terms? [yes|no]\n[no] >>> yes\n\nMiniconda will now be installed into this location:\n/home/evnadm/miniconda\n\n - Press ENTER to confirm the location\n - Press CTRL-C to abort the installation\n - Or specify an different location below\n\n[/home/evnadm/miniconda] >>>\nPREFIX=/home/evnadm/miniconda\ninstalling: python-2.7.6-1 ...\ninstalling: openssl-1.0.1c-0 ...\ninstalling: pycosat-0.6.0-py27_0 ...\ninstalling: pyyaml-3.10-py27_0 ...\ninstalling: readline-6.2-2 ...\ninstalling: sqlite-3.8.4.1-0 ...\ninstalling: system-5.8-1 ...\ninstalling: tk-8.5.13-0 ...\ninstalling: yaml-0.1.4-0 ...\ninstalling: zlib-1.2.7-0 ...\ninstalling: conda-3.3.0-py27_0 ...\nPython 2.7.6 :: Continuum Analytics, Inc.\ncreating default environment...\ninstallation finished.\nDo you wish the installer to prepend the Miniconda install location\nto PATH in your /home/evnadm/.bashrc ? [yes|no]\n[no] >>> yes\n\nPrepending PATH=/home/evnadm/miniconda/bin to PATH in /home/evnadm/.bashrc\nA backup will be made to: /home/evnadm/.bashrc-miniconda.bak\n\n\nFor this change to become active, you have to open a new terminal.\n\nThank you for installing Miniconda!\n```\n\nThen simply source .bashrc again (or open a new terminal) and you should have\naccess to conda:\n\n```\n[evnadm@centos5x64 ~]$ source .bashrc\n[evnadm@centos5x64 ~]$ which conda\n~/miniconda/bin/conda\n```\n\nThen simply run the following to install Enversion:\n```\n[evnadm@centos5x64 ~]$ conda config --add channels enversion\n[evnadm@centos5x64 ~]$ conda install enversion\nFetching package metadata: ...\nSolving package specifications: .\nPackage plan for installation in environment /home/evnadm/miniconda:\n\nThe following packages will be downloaded:\n\n package | build\n ---------------------------|-----------------\n enversion-0.2.5 | py27_1 151 KB\n expat-2.1.0 | 0 307 KB\n httpd-2.2.26 | 0 4.3 MB\n pcre-8.31 | 0 535 KB\n serf-1.2.1 | 0 307 KB\n sqlite-3.7.13 | 0 1.9 MB\n subversion-1.8.8 | py27_0 11.8 MB\n swig-2.0.12 | py27_0 1.8 MB\n ------------------------------------------------------------\n Total: 21.0 MB\n\nThe following packages will be UN-linked:\n\n package | build\n ---------------------------|-----------------\n conda-3.3.0 | py27_0\n sqlite-3.8.4.1 | 0\n\nThe following packages will be linked:\n\n package | build\n ---------------------------|-----------------\n apr-1.5.0 | 0 hard-link\n apr-iconv-1.2.1 | 0 hard-link\n apr-util-1.5.3 | 0 hard-link\n conda-3.3.2 | py27_0 hard-link\n enversion-0.2.5 | py27_1 hard-link\n expat-2.1.0 | 0 hard-link\n httpd-2.2.26 | 0 hard-link\n pcre-8.31 | 0 hard-link\n serf-1.2.1 | 0 hard-link\n sqlite-3.7.13 | 0 hard-link\n subversion-1.8.8 | py27_0 hard-link\n swig-2.0.12 | py27_0 hard-link\n\nProceed ([y]/n)? y\n\nFetching packages ...\nenversion-0.2.5-py27_1.tar.bz2 100% |################| Time: 0:00:00 1.48 MB/s\nexpat-2.1.0-0.tar.bz2 100% |#########################| Time: 0:00:00 1.51 MB/s\nhttpd-2.2.26-0.tar.bz2 100% |########################| Time: 0:00:02 2.12 MB/s\npcre-8.31-0.tar.bz2 100% |###########################| Time: 0:00:00 1.86 MB/s\nserf-1.2.1-0.tar.bz2 100% |##########################| Time: 0:00:00 1.39 MB/s\nsqlite-3.7.13-0.tar.bz2 100% |#######################| Time: 0:00:01 1.89 MB/s\nsubversion-1.8.8-py27_0.tar.bz2 100% |###############| Time: 0:00:06 2.06 MB/s\nswig-2.0.12-py27_0.tar.bz2 100% |####################| Time: 0:00:00 1.97 MB/s\nExtracting packages ...\n[ COMPLETE ] |##################################################| 100%\nUnlinking packages ...\n[ COMPLETE ] |##################################################| 100%\nLinking packages ...\n[ COMPLETE ] |##################################################| 100%\n[evnadm@centos5x64 ~]$\n```\n\nThis will install Enversion, which is administered via the command line program\n``evnadmin``, and all required dependencies. Note that the entire installation\nis contained within the Miniconda installation, ensuring that there aren't any\nconflicts with other versions of Subversion/HTTPD that may be installed on your\nsystem.\n\nAdditionally, because the Enversion conda package manages all dependencies, no\nroot access is required, nor are there any base-system RPM dependencies. This\nis one of the reasons conda is the recommended installation technique.\n\n```\n[evnadm@centos5x64 ~]$ which svn\n~/miniconda/bin/svn\n[evnadm@centos5x64 ~]$ which evnadmin\n~/miniconda/bin/evnadmin\n[evnadm@centos5x64 ~]$ evnadmin create test\n[evnadm@centos5x64 ~]$ evnadmin show-repo-hook-status test\n+-------------------------------------------------------------------------+\n| Repository Hook Status for 'test' |\n| (/home/evnadm/test) |\n+-------------------------------------------------------------------------+\n| Name | Exists? | Valid? | Exe? | Cnfgrd? | Enbld? | Rdb? |\n+---------------------|---------|--------|------|---------|--------|------+\n| post-revprop-change| Y | - | Y | Y | Y | N |\n| start-commit| Y | - | Y | Y | Y | N |\n| post-lock| Y | - | Y | Y | Y | N |\n| pre-lock| Y | - | Y | Y | Y | N |\n| post-unlock| Y | - | Y | Y | Y | N |\n| pre-unlock| Y | - | Y | Y | Y | N |\n| pre-commit| Y | - | Y | Y | Y | N |\n| post-commit| Y | - | Y | Y | Y | N |\n| pre-revprop-change| Y | - | Y | Y | Y | N |\n|=====================|=========|========|======|=========|========|======|\n| evn.sh| Y | Y | Y | 9/9 | 9/9 | - |\n+-------------------------------------------------------------------------+\n```\n\n#### Upgrading\n\nUpgrading to the latest version of Enversion is trivial:\n\n```\n[evnadm@centos5x64 ~]$ conda update enversion\nFetching package metadata: ...\nSolving package specifications: .\nPackage plan for installation in environment /home/evnadm/miniconda:\n\nThe following packages will be downloaded:\n\n package | build\n ---------------------------|-----------------\n enversion-0.2.6 | py27_0 151 KB\n\nThe following packages will be UN-linked:\n\n package | build\n ---------------------------|-----------------\n enversion-0.2.5 | py27_1\n\nThe following packages will be linked:\n\n package | build\n ---------------------------|-----------------\n enversion-0.2.6 | py27_0 hard-link\n\nProceed ([y]/n)? y\n\nFetching packages ...\nenversion-0.2.6-py27_0.tar.bz2 100% |################| Time: 0:00:00 421.03 kB/s\nExtracting packages ...\n[ COMPLETE ] |##################################################| 100%\nUnlinking packages ...\n[ COMPLETE ] |##################################################| 100%\nLinking packages ...\n[ COMPLETE ] |##################################################| 100%\n[evnadm@centos5x64 ~]$ evnadmin version\n0.2.6\n```\n\nIf there are no new versions available:\n\n```\n[evnadm@centos5x64 ~]$ conda update enversion\nFetching package metadata: ...\n# All requested packages already installed.\n# packages in environment at /home/evnadm/miniconda:\n#\nenversion 0.2.6 py27_0\n```\n\n#### Custom Environments\n\nYou can leverage ``conda``'s support for isolated environments to install\ndifferent versions of Enversion. The following example creates two completely\nisolated enversion environments, named ``enversion-0.2.5`` and\n``enversion-0.2.6`` (for v0.2.5 and v0.2.6 respectively):\n\n```\n[evnadm@centos5x64 ~]$ conda create -n enversion-0.2.5 enversion=0.2.5\nFetching package metadata: ...\nSolving package specifications: .\nPackage plan for installation in environment /home/evnadm/miniconda/envs/enversion-0.2.5:\n\nThe following packages will be linked:\n\n package | build\n ---------------------------|-----------------\n apr-1.5.0 | 0 hard-link\n apr-iconv-1.2.1 | 0 hard-link\n apr-util-1.5.3 | 0 hard-link\n enversion-0.2.5 | py27_1 hard-link\n expat-2.1.0 | 0 hard-link\n httpd-2.2.26 | 0 hard-link\n openssl-1.0.1c | 0 hard-link\n pcre-8.31 | 0 hard-link\n python-2.7.6 | 1 hard-link\n readline-6.2 | 2 hard-link\n serf-1.2.1 | 0 hard-link\n sqlite-3.7.13 | 0 hard-link\n subversion-1.8.8 | py27_0 hard-link\n swig-2.0.12 | py27_0 hard-link\n system-5.8 | 1 hard-link\n tk-8.5.13 | 0 hard-link\n zlib-1.2.7 | 0 hard-link\n\nProceed ([y]/n)? y\n\nLinking packages ...\n[ COMPLETE ] |##################################################| 100%\n#\n# To activate this environment, use:\n# $ source activate enversion-0.2.5\n#\n# To deactivate this environment, use:\n# $ source deactivate\n#\n[evnadm@centos5x64 ~]$ source activate enversion-0.2.5\ndiscarding /home/evnadm/miniconda/bin from PATH\nprepending /home/evnadm/miniconda/envs/enversion-0.2.5/bin to PATH\n(enversion-0.2.5)[evnadm@centos5x64 ~]$ which evnadmin\n~/miniconda/envs/enversion-0.2.5/bin/evnadmin\n(enversion-0.2.5)[evnadm@centos5x64 ~]$ evnadmin version\n0.2.5\n(enversion-0.2.5)[evnadm@centos5x64 ~]$ source deactivate\ndiscarding /home/evnadm/miniconda/envs/enversion-0.2.5/bin from PATH\n[evnadm@centos5x64 ~]$ conda create -n enversion-0.2.6 enversion=0.2.6\nFetching package metadata: ...\nSolving package specifications: .\nPackage plan for installation in environment /home/evnadm/miniconda/envs/enversion-0.2.6:\n\nThe following packages will be linked:\n\n package | build\n ---------------------------|-----------------\n apr-1.5.0 | 0 hard-link\n apr-iconv-1.2.1 | 0 hard-link\n apr-util-1.5.3 | 0 hard-link\n enversion-0.2.6 | py27_0 hard-link\n expat-2.1.0 | 0 hard-link\n httpd-2.2.26 | 0 hard-link\n openssl-1.0.1c | 0 hard-link\n pcre-8.31 | 0 hard-link\n python-2.7.6 | 1 hard-link\n readline-6.2 | 2 hard-link\n serf-1.2.1 | 0 hard-link\n sqlite-3.7.13 | 0 hard-link\n subversion-1.8.8 | py27_0 hard-link\n swig-2.0.12 | py27_0 hard-link\n system-5.8 | 1 hard-link\n tk-8.5.13 | 0 hard-link\n zlib-1.2.7 | 0 hard-link\n\nProceed ([y]/n)? y\n\nLinking packages ...\n[ COMPLETE ] |##################################################| 100%\n#\n# To activate this environment, use:\n# $ source activate enversion-0.2.6\n#\n# To deactivate this environment, use:\n# $ source deactivate\n#\n[evnadm@centos5x64 ~]$ source activate enversion-0.2.6\ndiscarding /home/evnadm/miniconda/bin from PATH\nprepending /home/evnadm/miniconda/envs/enversion-0.2.6/bin to PATH\n(enversion-0.2.6)[evnadm@centos5x64 ~]$ which evnadmin\n~/miniconda/envs/enversion-0.2.6/bin/evnadmin\n(enversion-0.2.6)[evnadm@centos5x64 ~]$ evnadmin version\n0.2.6\n(enversion-0.2.6)[evnadm@centos5x64 ~]$\n```\n\n### Quick Start\n\n```\nevnadmin create foo\nsvn mkdir -m \"Initializing repository.\" file://`pwd`/foo/trunk\nsvn mkdir -m \"Initializing repository.\" file://`pwd`/foo/branches\nsvn mkdir -m \"Initializing repository.\" file://`pwd`/foo/tags\nsvn cp -m \"Branching trunk to 1.x.\" file://`pwd`/foo/trunk \\\n file://`pwd`/foo/branches/1.x\nsvn cp -m \"Branching trunk to 2.x.\" file://`pwd`/foo/trunk \\\n file://`pwd`/foo/branches/2.x\nsvn cp -m \"Tagging 1.0.\" file://`pwd`/foo/trunk \\\n file://`pwd`/foo/tags/1.0\n```\n\nRoot tracking:\n```\n% evnadmin show-roots foo\nShowing roots for repository 'foo' at r6:\n{'/branches/1.x/': {'created': 4},\n '/branches/2.x/': {'created': 5},\n '/tags/1.0/': {'copied_from': ('/trunk/', 5),\n 'copies': {},\n 'created': 6,\n 'creation_method': 'copied',\n 'errors': []},\n '/trunk/': {'created': 1}}\n%\n```\n\nIndividual root information:\n```\n% evnadmin root-info /branches/1.x/ foo\n'/branches/1.x/': {\n 'copies': { },\n 'copied_from': ('/trunk/', 3),\n 'creation_method': 'copied',\n 'errors': [],\n 'created': 4,\n}\n%\n```\n\nForward-copy information:\n```\n% evnadmin root-info /trunk/ foo\n'/trunk/': {\n 'copies': {\n 3: [('/branches/1.x/', 4)],\n 4: [('/branches/2.x/', 5)],\n 5: [('/tags/1.0/', 6)]\n },\n 'creation_method': 'created',\n 'created': 1,\n}\n```\n\nExtensive protection [against over 80+ types of undesirable commits](/lib/evn/constants.py#L34):\n\n```\n% svn co file://`pwd`/foo foo.wc\n% cd foo.wc\n% svn mkdir branches/3.x\n% svn ci -m \"Manual directory creation.\"\nAdding branches/3.x\nsvn: E165001: Commit failed (details follow):\nsvn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:\nerror: errors:\n{'/branches/3.x/': ['branch directory created manually']}\n\nCommits with errors or warnings can be forced through by the following repository admins: , or support staff:\n\n% svn ci -m \"Removing tag.\" tags/1.0\nDeleting tags/1.0\nsvn: E165001: Commit failed (details follow):\nsvn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:\nerror: errors:\n{'/tags/1.0/': ['tag removed']}\n\nCommits with errors or warnings can be forced through by the following repository admins: , or support staff:\n```\n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://www.enversion.org/", "keywords": "subversion,svn,scm,pysvn", "license": "Apache", "maintainer": null, "maintainer_email": null, "name": "enversion", "package_url": "https://pypi.org/project/enversion/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/enversion/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://www.enversion.org/" }, "release_url": "https://pypi.org/project/enversion/0.2.17/", "requires_dist": null, "requires_python": null, "summary": "Enterprise Subversion Framework", "version": "0.2.17" }, "last_serial": 1456341, "releases": { "0.2.17": [ { "comment_text": "", "digests": { "md5": "90a659b292c33910cd99dfe3c2d4d85c", "sha256": "4bc91a7a10cd48829374d26ce22903e6488c95e72fbbbbb2209c6899f9af61c2" }, "downloads": -1, "filename": "enversion-0.2.17.tar.gz", "has_sig": false, "md5_digest": "90a659b292c33910cd99dfe3c2d4d85c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127139, "upload_time": "2015-03-10T19:26:42", "url": "https://files.pythonhosted.org/packages/cf/cf/2a33da379db5f98f2dcdf8121d15e15b0b6790739a1bb87939591133c877/enversion-0.2.17.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "90a659b292c33910cd99dfe3c2d4d85c", "sha256": "4bc91a7a10cd48829374d26ce22903e6488c95e72fbbbbb2209c6899f9af61c2" }, "downloads": -1, "filename": "enversion-0.2.17.tar.gz", "has_sig": false, "md5_digest": "90a659b292c33910cd99dfe3c2d4d85c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 127139, "upload_time": "2015-03-10T19:26:42", "url": "https://files.pythonhosted.org/packages/cf/cf/2a33da379db5f98f2dcdf8121d15e15b0b6790739a1bb87939591133c877/enversion-0.2.17.tar.gz" } ] }