# -*- coding: utf-8 -*-""" rhodecode.controllers.branches ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ branches controller for rhodecode :created_on: Apr 21, 2010 :author: marcink :copyright: (C) 2010-2012 Marcin Kuzminski <marcin@python-works.com> :license: GPLv3, see COPYING for more details."""# This program is free software: you can redistribute it and/or modify# it under the terms of the GNU General Public License as published by# the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.## This program is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU General Public License for more details.## You should have received a copy of the GNU General Public License# along with this program. If not, see <http://www.gnu.org/licenses/>.importloggingimportbinasciifrompylonsimporttmpl_contextascfromrhodecode.lib.authimportLoginRequired,HasRepoPermissionAnyDecoratorfromrhodecode.lib.baseimportBaseRepoController,renderfromrhodecode.lib.compatimportOrderedDictfromrhodecode.lib.utils2importsafe_unicodelog=logging.getLogger(__name__)classBranchesController(BaseRepoController):def__before__(self):super(BranchesController,self).__before__()@LoginRequired()@HasRepoPermissionAnyDecorator('repository.read','repository.write','repository.admin')defindex(self):def_branchtags(localrepo):bt_closed={}forbn,headsinlocalrepo.branchmap().iteritems():tip=heads[-1]if'close'inlocalrepo.changelog.read(tip)[5]:bt_closed[bn]=tipreturnbt_closedcs_g=c.rhodecode_repo.get_changesetc.repo_closed_branches={}ifc.rhodecode_db_repo.repo_type=='hg':bt_closed=_branchtags(c.rhodecode_repo._repo)_closed_branches=[(safe_unicode(n),cs_g(binascii.hexlify(h)),)forn,hinbt_closed.items()]c.repo_closed_branches=OrderedDict(sorted(_closed_branches,key=lambdactx:ctx[0],reverse=False))_branches=[(safe_unicode(n),cs_g(h))forn,hinc.rhodecode_repo.branches.items()]c.repo_branches=OrderedDict(sorted(_branches,key=lambdactx:ctx[0],reverse=False))returnrender('branches/branches.html')