{"id":17977609,"url":"https://github.com/martinmoene/svn-churn","last_synced_at":"2025-04-04T00:21:37.945Z","repository":{"id":22835351,"uuid":"26182506","full_name":"martinmoene/svn-churn","owner":"martinmoene","description":"A simple Python script to determine file churn and fix count of a Subversion repository.","archived":false,"fork":false,"pushed_at":"2014-11-05T10:55:56.000Z","size":132,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-09T12:17:40.799Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martinmoene.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-11-04T18:27:46.000Z","updated_at":"2023-02-22T16:41:34.000Z","dependencies_parsed_at":"2022-08-17T17:00:45.497Z","dependency_job_id":null,"html_url":"https://github.com/martinmoene/svn-churn","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fsvn-churn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fsvn-churn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fsvn-churn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fsvn-churn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martinmoene","download_url":"https://codeload.github.com/martinmoene/svn-churn/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247098943,"owners_count":20883286,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-29T17:28:39.914Z","updated_at":"2025-04-04T00:21:37.927Z","avatar_url":"https://github.com/martinmoene.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"svn-churn \n=========\nA simple Python script to determine file churn and fix count of a Subversion repository [1].\n\nUsage\n-----\n\n\tUsage: svn-churn [options] [repos...]\n\t\n\tOptions\n\t    -h, --help  this help screen\n\t            --  end options section\n\t    Other options upto -- are passed on to the 'svn log' command.\n\t\n\tsvn-churn mines the log of the given Subversion repository\n\tand presents the number of changes and fixes for each file.\n\tRepos can be specified as a working copy path or a URL.\n\t\n\tExamples\n\t    Use repositories configured in script:\n\t        ./svn-churn.py\n\t\n\t    Use repositories configured in script and limit log used to latest 200 items:\n\t        ./svn-churn.py --limit 200 --\n\t\n\t    Report 50 most changed and fixed files (sort on changes*fixes):\n\t        ./svn-churn.py |sort -n -t , +2 | tail -n 50 |sort -r -n -t , +2\n\t\n\tNote\n\t    Among a few other things, you can configure the SVN repository in the script.\n\nExample\n-------\n`svn-churn` creates output as shown below. \n\nTitle line:\n\n\tChurn,Fixes,Churn*Fixes,File [repository...] \n\nThe above title line disappears from the output in the following command:\n\n\tprompt\u003esvn-churn.py --limit 200 -- https://svn.webkit.org/repository/webkit/trunk \\\n\t\t\t|sort -n -t , +2 |grep -v ChangeLog |tail -n 10 |sort -r -n -t , +2\n\t14,3,42,/trunk/Source/WebKit2/UIProcess/mac/WKActionMenuController.mm\n\t8,4,32,/trunk/Source/WebCore/WebCore.exp.in\n\t5,5,25,/trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm\n\t7,3,21,/trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj\n\t5,4,20,/trunk/Source/WebCore/css/CSSSelector.cpp\n\t6,3,18,/trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp\n\t4,4,16,/trunk/Source/WebCore/loader/cache/CachedRawResource.cpp\n\t5,3,15,/trunk/Source/WebKit2/CMakeLists.txt\n\t5,3,15,/trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj\n\t5,3,15,/trunk/Source/WebCore/CMakeLists.txt\n\nConfiguration\n-------------\nAt the top of the script you can configure the following items.\n\n### cfg_reposes \n`cfg_reposes` contains the default repositories to use.\n \n\tcfg_reposes = ['https://svn.webkit.org/repository/webkit/trunk']\n\n### cfg_fixed_issues \n`cfg_fixed_issues` contains the patterns to recognise log message that concern a fix.\n\n\tcfg_fixed_issues = (\n\t    '[Ii]ssue[s]? #',\n\t    '[Ff]ix',\n\t    '[Cc]orrect'\n\t)\n\n### cfg_edited_paths \n`cfg_edited_paths` allows you to specify patterns for partial paths with a replacement. This can be used to map paths used in the past to currently used paths, or to strip a path prefix. \n\n\tcfg_edited_paths = (\n\t    ( r'/trunk/Source/core/', '/trunk/Source/WebCore/' ),\n\t    ( r'/trunk/Source/'     , ''                       ),\n\t )\n\n### cfg_svn \n`cfg_svn` specifies the (path of the) Subversion svn command to use.\n\n\tcfg_svn = 'svn'\n\nReferences\n----------\n[1] Michael Feathers. [Getting Empirical about Refactoring](http://www.stickyminds.com/article/getting-empirical-about-refactoring). February 15, 2011.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinmoene%2Fsvn-churn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartinmoene%2Fsvn-churn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinmoene%2Fsvn-churn/lists"}