{ "info": { "author": "Kai Lautaportti", "author_email": "kai.lautaportti@hexagonit.fi", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Version Control" ], "description": ".. contents::\n\nGit clone URL: git://github.com/dokai/gitctl.git\n\nProject page: http://github.com/dokai/gitctl\n\n\nChange history\n**************\n\n2.0a8 (2010-04-11)\n==================\n\n - Bound GitPython dependency at version 0.1.7. gitctl is not compatible with\n the newer versions. [dokai]\n\n - Added experimental Growl support. You need to have the Growl python\n bindings installed for it to work.\n\n2.0a7 (2009-08-03)\n==================\n\n - Added a new --from-file option which tells to read the names of components\n from a given file. The command then applies to the given components only.\n [rnd]\n\n - Added \"gitctl path\" command which prints path(s) to directories for given\n component name(s). [rnd]\n\n - Added \"gitctl sh\" command which performs specified shell commands (given\n with -c option) in each component's directory. E.g. gitctl sh -c 'git\n status' will execute \"git status\" for each component. [rnd]\n\n2.0a6 (2009-05-27)\n==================\n\n - Refactored the \"gitctl pending\" command to support only the comparison\n between the pinned down revisions in the externals configuration and the\n HEADs of the production branches. In practice this means the the former\n --production switch is the default behavior and the --production, --staging\n and --dev options have been removed. The refactored \"gitctl status\"\n replaces the former functionality. [dokai]\n\n - Refactored the \"gitctl status\" command to give more elaborate information\n about the status of the repository. [dokai]\n\n - Refactored the pretty printer to include a space between the component\n name and the dotted justification. This will make it easier to use the\n output of gitctl in other scripts. [dokai]\n\n - Added a new --verbose global option. Providing the --verbose option will\n give the same output as 2.0a5. Without the option the gitctl will only\n report changed components which will reduce the output significantly and\n make it easier to see what changed.\n\n - Print normal program output to stdout and only errors to stderr. [dokai]\n\n - When updating a hard-pinned revision perform a \"git reset --hard\" to enforce\n the revision. This fixes some\n issue where the working directory was in an inconsistent state and the\n checkout failed. [dokai]\n\n - Refactored the ``generate_externals`` function to guarantee the order of\n sections in the generated configuration file. [dokai]\n\n2.0a5 (2008-10-01)\n==================\n\n - Changed 'gitctl update' to attempt a fast-forward merge on all configured\n branches. If fast-forward is not possible a message will be shown and the\n branch left unchanged. [dokai]\n\n2.0a4 (2008-09-25)\n==================\n\n - Fixed 'gitctl pending --production' which compared the wrong trees. When\n using pinned down revisions (HEADless working directories) we need to\n always compare against the remote branches. [dokai]\n\n - Fixed a bug in 'gitctl pending' if not all branches were available. [dokai]\n\n - Added the '-v' switch to show the version of the gitctl. [dokai]\n\n2.0a3 (2008-09-21)\n==================\n\n - Added support for specifying the initial commit message by using\n 'gitctl create --message'. [dokai]\n\n - Fixed 'gitctl create' to not leave the upstream repository's HEAD in broken\n state. [dokai]\n\n - Added support for specifying which projects to operate on in addition to\n performing an operation on all the projects in the externals\n configuration. [dokai]\n\n - Added a --no-fetch option to 'gitctl pending' to avoid fetching. [dokai]\n\n - 'gitctl update' now shows which projects were updated and which were not\n when using pinned down revisions [dokai]\n\n2.0a2 (2008-09-15)\n==================\n\n - Fixed a critical bug with 'gitctl update' when using pinned down revisions.\n [dokai]\n\n2.0a1 (2008-09-15)\n==================\n\n - Complete overhaul to implement (a particular) Git workflow process in\n addition to custom externals handling. This breaks backward compatibility\n with the 1.x version but provides somewhat equivalent functionality.\n [dokai]\n\n1.0b1 (2008-06-12)\n==================\n\n - Initial public release [dokai]\n\n\nPurpose\n*******\n\nThe purpose of this package is to implement a particular workflow for using\nGit to manage a project that consists of multiple independent subprojects. The\noriginal motivation is a zc.buildout driven system, but the implementation is\nnot dependent on this. This is not a 100% generic tool, but the workflow is\nfairly common so it may be adaptable for other use cases also.\n\nThe workflow consists of using three pre-defined branches to model the\n``development``, ``staging`` and ``production`` phases of code. We assume the\nuse of a canonical central repository that developers use to sync their\nofficial changes. This repository is considered to be the canonical source and\nprovides the \"official\" state of the projects. Developers are free to use any\nnumber of branches, tags and repositories as part of their daily work.\n\nThe code normally flows from ``development`` to ``staging`` to ``production``\nand the package provides tools to facilitate this process. Each individual Git\nrepository is managed using any of the tools that Git provides.\n\nIn addition, the package provides a light-weight \"externals\" mechanism for\neasily pulling in and managing the subprojects. This differs from the\nfunctionality provided by ``git-submodule`` in that both pinned-down and open\ndependencies can be defined. This resembles the way externals are handled in\nSubversion. Also, the individual Git repositories are not aware of the\nexternals and the externals configuration is kept in a single location.\n\n\nConfiguration\n*************\n\nThe package uses two different configuration files. The ``gitctl.cfg`` file\nprovides the higher level configuration and allows you to specify things like\nthe canonical repository and the names of your ``development``, ``staging``\nand ``production`` branches. The ``gitexternals.cfg`` defines your project\nspecific configuration of required sub-components.\n\ngitctl.cfg\n**********\n\n``upstream``\n\n The name used to refer to the canonical repository server, e.g. \"origin\".\n\n``upstream-url``\n\n The address of the canonical repository server. This address needs to\n point to the server in a manner that supports pushing. Currently only SSH\n is tested. Example: git@my.gitserver.com\n\n``branches``\n\n List of newline separated branches that will be tracked in the local\n repository. When the repositories are clone for each branch listed here a\n local tracking branch will be automatically created.\n\n``development-branch``\n\n Name of the development branch. The above ``branches`` listing will be\n made to implicitly contain this branch.\n\n``staging-branch``\n\n Name of the staging branch. The above ``branches`` listing will be made to\n implicitly contain this branch.\n\n``production-branch``\n\n Name of the production branch. The above ``branches`` listing will be made\n to implicitly contain this branch.\n\n``commit-email``\n\n Email address where commit emails will be sent. Only used when creating\n new repositories.\n\n``commit-email-prefix``\n\n The commit email prefix. Only used when creating new repositories.\n\n\nAn example configuration follows::\n\n [gitctl]\n upstream = origin\n upstream-url = git@myserver.com\n branches =\n development\n staging\n production\n development-branch = development\n staging-branch = staging\n production-branch = production\n commit-email = commit@myserver.com\n commit-email-prefix = [GIT]\n\n``gitexternals.cfg``\n********************\n\nThe externals configuration consists of one or more sections that have the\nfollowing properties. Each section name will be used to name the directory\nwhere the external will be cloned into.\n\n``url`` (mandatory)\n\n Full URL to the remote repository, e.g git@myserver.com:my.project.git\n\n``type`` (optional)\n\n The type of the remote repository. Currently only ``git`` is supported.\n\n``treeish`` (optional)\n\n The name of a \"treeish\" object that is checked out by default when first\n cloning the remote repository. The treeish object may refer, for example,\n to a branch or a tag. Defaults to ``master``.\n\n``container`` (optional)\n\n The name of the directory where the project will be checked out\n into. An additional directory will be created under this one where\n the project files will be located so it is safe to use the same\n value for multiple projects. Relative paths are considered\n relative to the location of the config file.\n\nAn example configuration follows::\n\n [my.project]\n url = git@myserver.com:my.project.git\n type = git\n treeish = v1.0-dev\n container = src\n\nThis results in the my.project.git repository to be cloned into\n./src/my.project and the v1.0-dev to be checked out into the working\ndirectory.\n\n\n``gitctl`` script\n*****************\n\nThe ``gitctl`` script provides subcommands to implement the workflow. Each\nsubcommand provides additional options. See ``gitctl [subcommand] --help`` for\ndetails::\n\n\n usage: gitctl [-h] [-v] [--config CONFIG] [--externals EXTERNALS] [--verbose]\n {status,create,update,sh,branch,path,fetch,pending} ...\n\n Git workflow utility for managing projects containing multiple git\n repositories.\n\n positional arguments:\n {status,create,update,sh,branch,path,fetch,pending}\n Commands\n create Initializes a new local repository and creates a\n matching upstream repository.\n update Updates the configured repositories by either\n attempting a fast-forward merge on existing project\n branches or cloning new projects.\n path Shows the path to the project directory.\n sh Executes shell command for specified projects.\n status Shows the status of each external project and alerts\n if any are out of sync with the upstream repository.\n branch Provides information and operates on the branches of\n the projects.\n pending Checks if there are any pending changes in the\n production branches compared to the pinned down\n versions in externals configuration.\n fetch Updates the remote branches on all projects without\n merging.\n\n optional arguments:\n -h, --help show this help message and exit\n -v, --version show program's version number and exit\n --config CONFIG Location of the configuration file. If omitted the\n following locations will be search: $PWD/gitctl.cfg,\n ~/.gitctl.cfg.\n --externals EXTERNALS\n Location of the externals configuration file. Defaults\n to $PWD/gitexternals.cfg\n --verbose Prints more verbose output about repositories.\n\n\nInstallation\n************\n\nUsing setuptools::\n\n $ easy_install gitctl\n\nExamples\n********\n\ngitctl path\n===========\n\nOutputs the path(s) of the project directories::\n\n $ cd /Users/rnd/buildout/\n $ gitctl path -f refactoring_these_projects\n /Users/rnd/buildout/products/Project1\n /Users/rnd/buildout/products/Project2\n /Users/rnd/buildout/src/Project3\n\nwhere the ``refactoring_these_projects`` file contains project names,\none per line::\n\n ProjectI\n ProjectII\n ProjectIII\n\nThese project names map to the sections in the ``gitexternals.cfg``\nconfiguration.\n\nWithout providing project names, all project paths will be output.\n\ngitctl sh\n=========\n\nExecutes shell command in each project directory (that is, the\ndirectory with path ``gitctl path`` shows). Some examples (using the\nsame file ``refactoring_these_projects`` as above).\n\nShow branches for each project (``PROJECT`` environment variable holds\nthe name of the project)::\n\n gitctl sh -f refactoring_these_projects -c 'echo $PROJECT; git branch'\n\nMaking feature branch::\n\n gitctl sh -f refactoring_these_projects -c 'git checkout -b my_f_branch'\n\nMass-check out certain feature branch (first, all projects to development,\nthen checkout feature branch only for projects under refacture)::\n\n gitctl sh -c 'git checkout development'\n gitctl sh -f refactoring_these_projects -c 'git checkout my_f_branch'\n\n\nGet a list of projects which have production different from\ndevelopment (N.B. checked via commit, not diff, so, some listed\nproject may really be textually identical)::\n\n gitctl sh -f refactoring_these_projects -c '[ `git rev-parse development` != `git rev-parse origin/production` ] && echo $PROJECT' 2> /dev/null\n\nMake some operations on selected projects::\n\n gitctl sh -f refactoring_these_projects -c 'git commit -m \"Added newfeature\"'\n\n\nDependencies\n************\n\n * Git_ >= 1.6\n * argparse_\n * GitPython_ == 0.1.7\n\n.. _Git: http://git-scm.com/\n.. _argparse: http://argparse.python-hosting.com/\n.. _GitPython: http://gitorious.org/projects/git-python\n\nContributors\n************\n\n - Kai Lautaportti, Author [dokai]\n - Roman Susi, [rnd]", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/dokai/gitctl", "keywords": "git workflow", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "gitctl", "package_url": "https://pypi.org/project/gitctl/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/gitctl/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/dokai/gitctl" }, "release_url": "https://pypi.org/project/gitctl/2.0a8/", "requires_dist": null, "requires_python": null, "summary": "A particular Git workflow implementation with a development/staging/production code-flow model and support for multiple repositories as part of a larger project.", "version": "2.0a8" }, "last_serial": 792455, "releases": { "1.0b1": [ { "comment_text": "", "digests": { "md5": "d806014546c978b21a71811078b43b24", "sha256": "2aa9191fbb7be97e3a6fab3c1e30527697ff074d07fb47e7c7cb63a8ed20c84e" }, "downloads": -1, "filename": "gitctl-1.0b1.tar.gz", "has_sig": false, "md5_digest": "d806014546c978b21a71811078b43b24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6676, "upload_time": "2008-06-12T20:36:09", "url": "https://files.pythonhosted.org/packages/0d/10/42e7c8dacfc5664dcbe076e37de2e0d6afcc4ca64eb98f7c8314a2dc5756/gitctl-1.0b1.tar.gz" } ], "2.0a1": [ { "comment_text": "", "digests": { "md5": "4674a4dd056670b93e4f96086df86bf1", "sha256": "93255a1875aeb87dfe0687587d4b2946f1bdf86889ff28225ad8125fdb0d84ab" }, "downloads": -1, "filename": "gitctl-2.0a1.tar.gz", "has_sig": false, "md5_digest": "4674a4dd056670b93e4f96086df86bf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16304, "upload_time": "2008-09-15T07:32:02", "url": "https://files.pythonhosted.org/packages/d9/b8/947277c9d168ecc1312273026a883e0988ccb3d804d10e8cd3cceed443e6/gitctl-2.0a1.tar.gz" } ], "2.0a2": [ { "comment_text": "", "digests": { "md5": "be59486bfc7f86b64758df01c63bcb3c", "sha256": "59834858e7df395e3db295c551f716935448d1e041c06f13b0dbe7ddecee3be0" }, "downloads": -1, "filename": "gitctl-2.0a2.tar.gz", "has_sig": false, "md5_digest": "be59486bfc7f86b64758df01c63bcb3c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16837, "upload_time": "2008-09-15T18:59:21", "url": "https://files.pythonhosted.org/packages/3c/28/c83d85bf2dd4d5344595280603d21110c4844eb5c92426c4baa2759f60cc/gitctl-2.0a2.tar.gz" } ], "2.0a3": [ { "comment_text": "", "digests": { "md5": "e9baac3be908e3c9acb433a8b2ce3ee0", "sha256": "af85b2dd7b0f8eb0e5d20dcb84b8bda42c76f0ad9ca7d3551a1bb3cfdaa4cc30" }, "downloads": -1, "filename": "gitctl-2.0a3.tar.gz", "has_sig": false, "md5_digest": "e9baac3be908e3c9acb433a8b2ce3ee0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17646, "upload_time": "2008-09-21T19:04:31", "url": "https://files.pythonhosted.org/packages/e2/09/323c06ba7888325bc46f061b6483b002d93b0feead331712f6f9f1a60f67/gitctl-2.0a3.tar.gz" } ], "2.0a4": [ { "comment_text": "", "digests": { "md5": "97ccd3e25cb9712ac3977e0ab85679ea", "sha256": "c158f4e2bcf56c4b626cc87933e48218c6cffdaa657f124d4cc4efed973e465b" }, "downloads": -1, "filename": "gitctl-2.0a4.tar.gz", "has_sig": false, "md5_digest": "97ccd3e25cb9712ac3977e0ab85679ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18244, "upload_time": "2008-09-25T11:12:37", "url": "https://files.pythonhosted.org/packages/e1/8a/ffa4c82dfced17d7585828f24f06310cb3cab1e58758d965293d2451f6e0/gitctl-2.0a4.tar.gz" } ], "2.0a5": [ { "comment_text": "", "digests": { "md5": "c566cc1a79645b876688bc4ee8abd932", "sha256": "f7fa124ea922b4660945988f6ad99ad7858f747a9c00e770ed647532e232161f" }, "downloads": -1, "filename": "gitctl-2.0a5.tar.gz", "has_sig": false, "md5_digest": "c566cc1a79645b876688bc4ee8abd932", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19260, "upload_time": "2008-10-01T11:43:52", "url": "https://files.pythonhosted.org/packages/f5/92/344e6271c21ccf79d99011ac41931d6190a4352cefcf06392c84b341e99d/gitctl-2.0a5.tar.gz" } ], "2.0a6": [ { "comment_text": "", "digests": { "md5": "8b4e5e545c94d24e8382d709b08b595e", "sha256": "c6f657184e621d1fbc5edfd5c41644522cf193b8c084dfabcf1a3ea01cb8e859" }, "downloads": -1, "filename": "gitctl-2.0a6.tar.gz", "has_sig": false, "md5_digest": "8b4e5e545c94d24e8382d709b08b595e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21298, "upload_time": "2009-05-27T21:27:22", "url": "https://files.pythonhosted.org/packages/e5/46/c45b2a7e0f8771f3099716ff0c0f80f5e00330c54175d9a0dbc24dab5d3d/gitctl-2.0a6.tar.gz" } ], "2.0a7": [ { "comment_text": "", "digests": { "md5": "4637d72b90e0939a6b84d7439e2d0302", "sha256": "506e68103a609a192b28f5c780dc52633f958be284d0fd634fe34f6c19b38752" }, "downloads": -1, "filename": "gitctl-2.0a7.tar.gz", "has_sig": false, "md5_digest": "4637d72b90e0939a6b84d7439e2d0302", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23392, "upload_time": "2009-08-03T08:10:26", "url": "https://files.pythonhosted.org/packages/1c/3d/7611a6eb6acaabbcb130ec767a9a2b695f1c4b20cbf507adc2f42e3c4a3b/gitctl-2.0a7.tar.gz" } ], "2.0a8": [ { "comment_text": "", "digests": { "md5": "8943e80f2ea512729bbe66b674227648", "sha256": "0de2d6619431b36bd1925faf77be8d4c71ae324395eedada9ed3e4d6d6cfd653" }, "downloads": -1, "filename": "gitctl-2.0a8.tar.gz", "has_sig": false, "md5_digest": "8943e80f2ea512729bbe66b674227648", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26185, "upload_time": "2011-04-11T09:43:25", "url": "https://files.pythonhosted.org/packages/9d/0f/fee251e712ce25ab1f5a8d6ef346e60778f297c92b31440fd19cb7250900/gitctl-2.0a8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8943e80f2ea512729bbe66b674227648", "sha256": "0de2d6619431b36bd1925faf77be8d4c71ae324395eedada9ed3e4d6d6cfd653" }, "downloads": -1, "filename": "gitctl-2.0a8.tar.gz", "has_sig": false, "md5_digest": "8943e80f2ea512729bbe66b674227648", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26185, "upload_time": "2011-04-11T09:43:25", "url": "https://files.pythonhosted.org/packages/9d/0f/fee251e712ce25ab1f5a8d6ef346e60778f297c92b31440fd19cb7250900/gitctl-2.0a8.tar.gz" } ] }