{ "info": { "author": "Tim Littlefair", "author_email": "tim_littlefair@hotmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "README\n======\n\nThis repository contains a small (presently <300 line) script in Python 3.X\nwhich can be used to convert a git or subversion change log into a\nreport estimating how many hours each contributor spent working on the\nproject. \n \nThe report is broken down per-contributor, per-day, and\nincludes some summary lines at the end.\n\nThe recommended ways of running the script is to run something like one\nof the following commands:\n\npython3 vceffort.py { \u2013git \\| \u2013svn } path/to/local/repository\n\npython3 vceffort.py { \u2013git \\| \u2013svn } http://url.for.remote.repository\n\ngit \u2013git-dir=local/path/.git log \u2013date=iso \\| python3 vceffort.py \u2013git \u2013\n\nsvn log -q local.path.or.remote.url \\| python3 vceffort.py \u2013svn \u2013\n\nExample report\n--------------\n\n::\n\n Entries:\n --------\n 2016-09-10 UTC+08:00 5.3 Tim Littlefair\n 2016-09-11 UTC+08:00 3.0 Tim Littlefair\n 2016-09-17 UTC+00:00 1.0 Tim Littlefair\n 2016-09-17 UTC+08:00 1.0 Tim Littlefair\n 2016-09-18 UTC+08:00 1.9 Tim Littlefair\n 2016-09-19 UTC+08:00 1.0 Tim Littlefair\n 2016-09-25 UTC+08:00 2.8 Tim Littlefair\n 2016-09-26 UTC+08:00 1.0 Tim Littlefair\n ========\n Summary:\n --------\n Total active contributor days: 8\n Total hours worked: 17.0\n Mean hours per day: 2.125\n\nApproximations made by the tool\n-------------------------------\n\nThe tool makes the following assumptions in order to convert\na series of instantaneous events into a presumed sequence of\ncontinuous activities:\n\n- when a commit is seen after a period of inactivity, the tool\n assumes that the contributor has been working for 45 minutes\n prior to the commit;\n- when a commit is seen within 2 hours of the previous commit\n by the same contributor, the tool assumes that the contributor\n has been working between the two commits; and\n- when a commit is followed by a period of inactivity of more\n than 2 hours, the tool assumes that the contributor worked\n for 15 minutes after the commit then stopped working.\n\nDuring the analysis, the tool separates the stream of log events up\ninto calendar days in the contributor\u2019s timezone. Two events\nwhich are either side of midnight will never be combined into a\nsingle activity sequence. If there are log events associated with\nthe same contributor in different timezones, these will be treated\nas if they were from different contributors (for example the\nexample report above shows the effect of a commit which occurred\non 2016-09-11 at bitbucket.org, and had a different timezone\nfrom other commits which happened on the same day on a local git\nrepository on my workstation).\n\nMotivations for this project\n----------------------------\n\nOriginally, this script was a side-project of a side-project.\nI wanted to write a presentation about some work I was doing\nand I wanted to give the audience as sense of how much of my\npersonal time had been invested to date.\n\nAs I worked on the script, I discovered that it was a nice\nsmall scope problem which was a good showcase for some of the\npractices the earlier side-project was intended to help me\nexplore:\n\n- measuring code coverage achieved by my unit tests;\n- using pylint to train myself to conform to the PEP-8 coding\n style recommendations for Python;\n- implementing continuous integration using Jenkins.\n\nAs of the current HEAD state, code coverage is at or near 100%.\n\nFrom my point of view at the moment, the following tasks\nremain to be done:\n\n- implement continuous integraton using Jenkins;\n- package and publish the library via PyPi and \n resolve any bug reports I receive against the \n existing scope of behaviour.\n\nI am using the bitbucket issue tracking feature to\nmaintain a backlog for the project. See the up-to-date\nlist `here`_\n\nI have no ambition for this project to grow beyond the\nsize required to complete the tasks above. My hope\nand expectation is that it will never contain more than\n1000 lines of code (excluding test data).\n\nContribution Guidelines\n-----------------------\n\nThis work is licensed under `the MIT License`_.\n\nThe license permits you to copy the source, and work with it in \nwhatever way you like, providing credit is given for whatever remains \nof my own work in your product.\n\nThe development/test environment for the project requires an installation \nof Python 2 or 3 (preferably 3.5) with PyLint and the coverage module \ninstalled. The scripts showcase.sh and showcase.cmd bootstrap a suitable\nenvironment and run the tests within it.\n\nIf you are interested in contributing to the copy of this project\nwhich I am managing myself, please note that I do not have an\nambition for it to become a long-running open ended project.\nI will be happy to receive messages and pull requests via bitbucket,\nbut please note that this is intended by me as a showcase codebase,\nso integration of contributions will depend on them maintaining the\npylint and code coverage stats at at least the current level\nat the time of your contribution.\n\nSee the section below for details of how to get in touch with me.\n\nWho do I talk to?\n-----------------\n\nDue to past experience publishing my email address in relation to\nopen source projects, I am deliberately not publishing an email\naddress as part of this project.\n\nIf you want to talk to me about this project my preferred method\nis for you to create an account on http://bitbucket.org and use\nthe facility there to send me a message.\n\nYou can also find me on `LinkedIn`_.\n\nYou should expect me to respond to your message in the\nfirst instance via bitbucket or LinkedIn, not via direct email.\n\n.. _here: https://bitbucket.org/tim_littlefair/vclog2timesheet/issues\n.. _the MIT License: https://opensource.org/licenses/MIT\n.. _LinkedIn: https://www.linkedin.com/in/tim-littlefair/\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.com/tim_littlefair/vceffort", "keywords": "version control,metrics,example", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "vceffort", "package_url": "https://pypi.org/project/vceffort/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/vceffort/", "project_urls": { "Homepage": "https://bitbucket.com/tim_littlefair/vceffort" }, "release_url": "https://pypi.org/project/vceffort/0.3.5/", "requires_dist": null, "requires_python": "", "summary": "A script to estimate development hours from version control system log(s)", "version": "0.3.5" }, "last_serial": 2729987, "releases": { "0.3.5": [ { "comment_text": "", "digests": { "md5": "9ae5ea48b6b54b105ff761efc76c5088", "sha256": "316fb7ae5624730ab9c4c716c1c7afb9d631de88b5566387d4e6d29511e75c62" }, "downloads": -1, "filename": "vceffort-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9ae5ea48b6b54b105ff761efc76c5088", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8315, "upload_time": "2017-03-25T08:39:18", "url": "https://files.pythonhosted.org/packages/14/18/f053305fa882b26463b08fe7e3cad862e1402f63b7be4982a7da07802c82/vceffort-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "97eaab4ea5c913a08a53a739b12f8a62", "sha256": "d5ebd6ca8e9d601d3a6b6832120b2078b543eef6163c8935daf826d9908792a8" }, "downloads": -1, "filename": "vceffort-0.3.5.tar.gz", "has_sig": false, "md5_digest": "97eaab4ea5c913a08a53a739b12f8a62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8319, "upload_time": "2017-03-25T08:39:21", "url": "https://files.pythonhosted.org/packages/8e/b4/e1885034f1939472a91e77c07bb185b4bfbbfc23b7a044b94539be5b5bb4/vceffort-0.3.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9ae5ea48b6b54b105ff761efc76c5088", "sha256": "316fb7ae5624730ab9c4c716c1c7afb9d631de88b5566387d4e6d29511e75c62" }, "downloads": -1, "filename": "vceffort-0.3.5-py3-none-any.whl", "has_sig": false, "md5_digest": "9ae5ea48b6b54b105ff761efc76c5088", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8315, "upload_time": "2017-03-25T08:39:18", "url": "https://files.pythonhosted.org/packages/14/18/f053305fa882b26463b08fe7e3cad862e1402f63b7be4982a7da07802c82/vceffort-0.3.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "97eaab4ea5c913a08a53a739b12f8a62", "sha256": "d5ebd6ca8e9d601d3a6b6832120b2078b543eef6163c8935daf826d9908792a8" }, "downloads": -1, "filename": "vceffort-0.3.5.tar.gz", "has_sig": false, "md5_digest": "97eaab4ea5c913a08a53a739b12f8a62", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8319, "upload_time": "2017-03-25T08:39:21", "url": "https://files.pythonhosted.org/packages/8e/b4/e1885034f1939472a91e77c07bb185b4bfbbfc23b7a044b94539be5b5bb4/vceffort-0.3.5.tar.gz" } ] }