Staging
v0.8.1
v0.8.1
https://foss.heptapod.net/mercurial/hgview
Revision df7af11a5ea2143444341e527210ba220bc45f40 authored by Carine Dengler on 11 February 2020, 15:15:42 UTC, committed by Carine Dengler on 11 February 2020, 15:15:42 UTC
1 parent d52361f
Tip revision: df7af11a5ea2143444341e527210ba220bc45f40 authored by Carine Dengler on 11 February 2020, 15:15:42 UTC
[pkg] version 1.13.1
[pkg] version 1.13.1
Tip revision: df7af11
hgmanifestdialog.py
# -*- coding: utf-8 -*-
# Copyright (c) 2003-2012 LOGILAB S.A. (Paris, FRANCE).
# http://www.logilab.fr/ -- mailto:contact@logilab.fr
#
# 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 2 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/>.
"""
Qt4 dialogs to display hg revisions of a file
"""
import os.path as osp
from mercurial.error import LookupError
from PyQt4 import QtGui, QtCore
from hgviewlib.application import ManifestViewer as _ManifestViewer
from hgviewlib.util import tounicode, tohg, binary
from hgviewlib.qt4.mixins import HgDialogMixin, ActionsMixin, ui2cls
from hgviewlib.qt4.hgrepomodel import ManifestModel
from hgviewlib.qt4.widgets import SourceViewer
class ManifestViewer(ActionsMixin, HgDialogMixin, ui2cls('manifestviewer.ui'), QtGui.QMainWindow, _ManifestViewer):
"""
Qt4 dialog to display all files of a repo at a given revision
"""
def __init__(self, repo, noderev):
self.repo = repo
super(ManifestViewer, self).__init__()
self.load_ui()
self.load_config(repo)
self.setWindowTitle('hgview manifest: %s revision %s' % (repo.root, noderev))
# hg repo
self.rev = noderev
self.setupModels()
self.createActions()
self.setupTextview()
def load_config(self, repo):
super(ManifestViewer, self).load_config(repo)
self.max_file_size = self.cfg.getMaxFileSize()
def setupModels(self):
self.treemodel = ManifestModel(self.repo, self.rev)
self.treeView.setModel(self.treemodel)
self.treeView.selectionModel().currentChanged.connect(
self.fileSelected)
def createActions(self):
# XXX to factorize
self.add_action(
'close', self.actionClose,
icon='quit',
callback=self.close,
)
def setupTextview(self):
lay = QtGui.QHBoxLayout(self.mainFrame)
lay.setSpacing(0)
lay.setContentsMargins(0,0,0,0)
self.textView = SourceViewer(self.mainFrame)
self.setFont(self._font)
lay.addWidget(self.textView)
def fileSelected(self, index, *args):
if not index.isValid():
return
path = self.treemodel.pathFromIndex(index)
try:
fc = self.repo[self.rev].filectx(tohg(path))
except LookupError:
# may occur when a directory is selected
self.textView.setMarginWidth(1, '00')
self.textView.setText('')
return
if fc.size() > self.max_file_size:
data = u"file too big"
else:
# return the whole file
data = fc.data()
if binary(data):
data = u"binary file"
else:
data = tounicode(data)
self.textView.set_text(path, data, flag='+', cfg=self.cfg)
def setCurrentFile(self, filename):
index = QtCore.QModelIndex()
path = filename.split(osp.sep)
for p in path:
self.treeView.expand(index)
for row in range(self.treemodel.rowCount(index)):
newindex = self.treemodel.index(row, 0, index)
if newindex.internalPointer().data(0) == p:
index = newindex
break
self.treeView.setCurrentIndex(index)
Computing file changes ...