def create_tag(repourl, tagname, username): tags = svnbrowse.get_tags(repourl) if tagname in tags: raise TagExists("""'%s' is already tagged, please try using a different tag name""" % tagname) elif re.sub('[\w\.-]', '', tagname) != '': raise BadName("""'%s' is an invalid name. Try using just letters, numbers, dashes, underscores and periods.""" % tagname) reponame = svnbrowse.get_root_info(repourl)['repository_root'].split('/')[-1] #logging.debug("reponame %s" % (reponame,)) with TemporaryFile() as tmperr: with TemporaryFile() as tmpout: out = call(['svn', 'copy', '%s/trunk' % repourl, '%s/tags/%s' % (repourl, tagname), '-m', 'Tagging the %s release' % tagname], stderr=tmperr, stdout=tmpout) if out is not 0: tmperr.seek(0) msg = tmperr.read() logging.error(msg) raise Error(msg) tmpout.seek(0) rev = re.search('Committed revision (\d+)', tmpout.read()).groups()[0] logging.info("changing the author of %s r%s to %s" % (reponame, rev, username)) with NamedTemporaryFile() as tmpauthor: #logging.debug("tmperr %r, tmpout %r, tmpauthor %r" % (tmperr, tmpout, tmpauthor)) tmpauthor.write(username) tmpauthor.seek(0) out = call(['svnadmin', 'setrevprop', '/usr/local/svn/repositories/%s' % reponame, '-r', rev, 'svn:author', tmpauthor.name]) if out is not 0: raise Error("Failed to set the commit author") return True
def post(self, reponame): url = settings.repositories[reponame] tagname = self.get_argument('tagname') try: svnmanage.create_tag(url, tagname, self.get_current_user()['username']) self.redirect("/%s/tags" % reponame) except svnmanage.Error, e: self._render_page(reponame, [str(e)], svnbrowse.get_tags(url))
def get(self, reponame): url = settings.repositories[reponame] self._render_page(reponame, [], svnbrowse.get_tags(url))