{"id":1767,"date":"2007-03-24T09:54:23","date_gmt":"2007-03-24T09:54:23","guid":{"rendered":"http:\/\/gurkan.wordpress.com\/?p=1767"},"modified":"2017-09-06T00:15:32","modified_gmt":"2017-09-06T00:15:32","slug":"bugtracker-net-and-subversion","status":"publish","type":"post","link":"https:\/\/www.havatopraksu.org\/blog\/2007\/03\/24\/bugtracker-net-and-subversion\/","title":{"rendered":"BugTracker.Net and Subversion"},"content":{"rendered":"<p><a href=\"http:\/\/ifdefined.com\">Corey Trager<\/a> of <a href=\"http:\/\/www.ifdefined.com\/bugtrackernet.html\">BugTracker.NET<\/a> has sent this vbs script below which can be enhanced to integrate SVN and BugTracker. It grabs entries from SVN when files are committed and posts to the database that BugTracker.Net uses.<\/p>\n<p>I didn&#8217;t want this code to be lost in comments and copied here with formatting.<\/p>\n<p>Thanks very much Corey.<\/p>\n<p>\u00a0<\/p>\n<p><!-- code formatted by http:\/\/manoli.net\/csharpformat\/ --> <\/p>\n<pre class=\"csharpcode\"><span class=\"kwrd\">option<\/span> explicit\n<span class=\"rem\">' HOW TO USE THIS SCRIPT<\/span>\n\n<span class=\"rem\">' This script is a Subversion \"post-commit hook\".<\/span>\n<span class=\"rem\">' To execute this script first create a file in your repository hooks folder<\/span>\n<span class=\"rem\">' called \"post-commit.bat\".<\/span>\n\n<span class=\"rem\">' Put just one line in the .bat file which will point to this script.<\/span>\n<span class=\"rem\">' c:\\somewhere\\btnet_post_commit.vbs %1 %2<\/span>\n\n<span class=\"rem\">' Put this script where the .bat file is pointing to, and then edit the<\/span>\n<span class=\"rem\">' lines below.<\/span>\n\n<span class=\"rem\">' Change this line so that it's the path to your Subversion\\bin\\svnlook.exe<\/span>\n<span class=\"kwrd\">dim<\/span> svnlook_path\nsvnlook_path = <span class=\"str\">\"\"<\/span><span class=\"str\">\"c:\\program files\\subversion\\bin\\svnlook\"<\/span><span class=\"str\">\"\"<\/span>\n\n<span class=\"rem\">' Change the database connection string here.<\/span>\n<span class=\"rem\">' This is NOT the same as the one in web.config. Web.config is using ADO.NET.<\/span>\n<span class=\"rem\">' This one is using plain old ADO.<\/span>\n<span class=\"kwrd\">dim<\/span> connection_string\nconnection_string = <span class=\"str\">\"Provider=SQLOLEDB; Data Source=(local); Initial Catalog=btnet; User ID=sa; Password=;\"<\/span>\n\n<span class=\"kwrd\">dim<\/span> temp_file\ntemp_file = <span class=\"str\">\"C:\\temp\\btnet_svntemp.txt\"<\/span><\/pre>\n<pre class=\"csharpcode\"><span class=\"str\"><\/span>\n<span class=\"rem\">' END OF THE PARTS YOU HAVE TO CHANGE. THE REST SHOULD BE OK<\/span><\/pre>\n<pre class=\"csharpcode\"><span class=\"rem\"><\/span>\n<span class=\"kwrd\">dim<\/span> repos\n<span class=\"kwrd\">dim<\/span> rev\nrepos = wscript.arguments(0)\nrev = wscript.arguments(1)\n<span class=\"rem\">' repos = \"c:\\cit\\svnrepos\" for testing<\/span>\n<span class=\"rem\">' rev = 12 for testing<\/span>\n\n<span class=\"kwrd\">dim<\/span> shell\n<span class=\"kwrd\">set<\/span> shell = WScript.Createobject(<span class=\"str\">\"WScript.Shell\"<\/span>)\n\n<span class=\"kwrd\">dim<\/span> cmd\n<span class=\"kwrd\">dim<\/span> results_object\n<span class=\"kwrd\">dim<\/span> log_string\n<span class=\"kwrd\">dim<\/span> changed_string\n\n<span class=\"rem\">' run the svnlook log command<\/span>\ncmd = svnlook_path &amp; <span class=\"str\">\" log -r \"<\/span> &amp; rev &amp; <span class=\"str\">\" \"<\/span> &amp; repos\n<span class=\"kwrd\">set<\/span> results_object = shell.exec(cmd)\nlog_string = results_object.stdout.readall\n\n<span class=\"rem\">' run the svnlook changed command<\/span>\ncmd = svnlook_path &amp; <span class=\"str\">\" changed -r \"<\/span> &amp; rev &amp; <span class=\"str\">\" \"<\/span> &amp; repos\n<span class=\"kwrd\">set<\/span> results_object = shell.exec(cmd)\nchanged_string = results_object.stdout.readall\n\n<span class=\"rem\">' for debugging<\/span>\n<span class=\"rem\">' wscript.echo log_string<\/span>\n<span class=\"rem\">' wscript.echo changed_string<\/span>\n\n<span class=\"rem\">' look for the bugid as the first digits in the checkin comment<\/span>\n<span class=\"kwrd\">dim<\/span> re\n<span class=\"kwrd\">set<\/span> re = <span class=\"kwrd\">new<\/span> regexp\nre.pattern = <span class=\"str\">\"^[0-9]*\"<\/span>\n\n<span class=\"kwrd\">dim<\/span> matches\n<span class=\"kwrd\">set<\/span> matches = re.execute(log_string)\n\n<span class=\"kwrd\">dim<\/span> bugid\n<span class=\"kwrd\">if<\/span> matches.count &gt; 0 <span class=\"kwrd\">then<\/span>\n<span class=\"kwrd\">set<\/span> bugid = matches(0)\n<span class=\"kwrd\">else<\/span>\n<span class=\"rem\">' no digits, nothing to do<\/span>\nwscript.quit 0\n<span class=\"kwrd\">end<\/span> <span class=\"kwrd\">if<\/span>\n\n<span class=\"rem\">' at this point, we have a bugid<\/span>\n\n<span class=\"kwrd\">dim<\/span> conn\n<span class=\"kwrd\">set<\/span> conn = createobject(<span class=\"str\">\"adodb.connection\"<\/span>)\nconn.open(connection_string)\n\n<span class=\"rem\">' loop through the files, the output of the \"changed\" command<\/span>\n<span class=\"kwrd\">dim<\/span> lines\nlines = split(changed_string, vbcrlf)\n<span class=\"kwrd\">if<\/span> ubound(lines) &gt; 0 <span class=\"kwrd\">then<\/span>\n<span class=\"kwrd\">dim<\/span> i\n<span class=\"kwrd\">for<\/span> i = 0 <span class=\"kwrd\">to<\/span> ubound(lines) - 1\n<span class=\"kwrd\">dim<\/span> cols\ncols = split(lines(i), <span class=\"str\">\" \"<\/span>)\n<span class=\"kwrd\">if<\/span> ubound(cols) = 1 <span class=\"kwrd\">then<\/span>\n<span class=\"kwrd\">dim<\/span> action\n<span class=\"kwrd\">dim<\/span> file\naction = cols(0)\nfile = cols(1)\n\n<span class=\"kwrd\">dim<\/span> sql\nsql = <span class=\"str\">\"insert into bug_file_revisions \"<\/span>\nsql = sql &amp; <span class=\"str\">\" (bfr_bug, bfr_revision, bfr_action, bfr_file, bfr_date) \"<\/span>\nsql = sql &amp; <span class=\"str\">\" values ($bug, $rev, N'$act', N'$file', getdate())\"<\/span>\nsql = replace(sql,<span class=\"str\">\"$bug\"<\/span>,bugid)\nsql = replace(sql,<span class=\"str\">\"$rev\"<\/span>,rev)\nsql = replace(sql,<span class=\"str\">\"$act\"<\/span>,action)\nsql = replace(sql,<span class=\"str\">\"$file\"<\/span>,file)\n\nconn.execute(sql)\n\n<span class=\"kwrd\">end<\/span> <span class=\"kwrd\">if<\/span>\n<span class=\"kwrd\">next<\/span>\n<span class=\"kwrd\">end<\/span> if<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Corey Trager of BugTracker.NET has sent this vbs script below which can be enhanced to integrate SVN and BugTracker. It grabs entries from SVN when files are committed and posts to the database that BugTracker.Net uses. I didn&#8217;t want this code to be lost in comments and copied here with formatting. Thanks very much Corey. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[207,213],"tags":[],"class_list":["post-1767","post","type-post","status-publish","format-standard","hentry","category-bilisim","category-english"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p90nFK-sv","jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/posts\/1767","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/comments?post=1767"}],"version-history":[{"count":1,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/posts\/1767\/revisions"}],"predecessor-version":[{"id":3145,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/posts\/1767\/revisions\/3145"}],"wp:attachment":[{"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/media?parent=1767"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/categories?post=1767"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.havatopraksu.org\/blog\/wp-json\/wp\/v2\/tags?post=1767"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}