diff pylons_app/controllers/changeset.py @ 294:42f5c36820ef

few validation bugfixes/ new repo changesets, first commit changesets
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 14 Jun 2010 01:16:57 +0200
parents cad478edb1c7
children fdf9f6ee5217
line wrap: on
line diff
--- a/pylons_app/controllers/changeset.py	Mon Jun 14 00:17:08 2010 +0200
+++ b/pylons_app/controllers/changeset.py	Mon Jun 14 01:16:57 2010 +0200
@@ -2,6 +2,16 @@
 # encoding: utf-8
 # changeset controller for pylons
 # Copyright (C) 2009-2010 Marcin Kuzminski <marcin@python-works.com>
+from pylons import tmpl_context as c, url
+from pylons.controllers.util import redirect
+from pylons_app.lib.auth import LoginRequired
+from pylons_app.lib.base import BaseController, render
+from pylons_app.model.hg_model import HgModel
+from vcs.exceptions import RepositoryError
+from vcs.nodes import FileNode
+from vcs.utils import diffs as differ
+import logging
+import traceback
  
 # This program is free software; you can redistribute it and/or
 # modify it under the terms of the GNU General Public License
@@ -22,13 +32,6 @@
 changeset controller for pylons
 @author: marcink
 """
-from pylons import tmpl_context as c
-from pylons_app.lib.auth import LoginRequired
-from pylons_app.lib.base import BaseController, render
-from pylons_app.model.hg_model import HgModel
-from vcs.utils import diffs as differ
-import logging
-from vcs.nodes import FileNode
 
 
 log = logging.getLogger(__name__)
@@ -41,46 +44,53 @@
         
     def index(self, revision):
         hg_model = HgModel()
-        c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
-        c.changeset_old = c.changeset.parents[0]
-        c.changes = []
-        
+        try:
+            c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
+        except RepositoryError:
+            log.error(traceback.format_exc())
+            return redirect(url('hg_home'))
+        else:
+            try:
+                c.changeset_old = c.changeset.parents[0]
+            except IndexError:
+                c.changeset_old = None
+            c.changes = []
+            
+            for node in c.changeset.added:
+                filenode_old = FileNode(node.path, '')
+                if filenode_old.is_binary or node.is_binary:
+                    diff = 'binary file'
+                else:    
+                    f_udiff = differ.get_udiff(filenode_old, node)
+                    diff = differ.DiffProcessor(f_udiff).as_html()
+                    try:
+                        diff = unicode(diff)
+                    except:
+                        log.warning('Decoding failed of %s', filenode_old)
+                        log.warning('Decoding failed of %s', node)
+                        diff = 'unsupported type'
+                cs1 = None
+                cs2 = node.last_changeset.raw_id                                        
+                c.changes.append(('added', node, diff, cs1, cs2))
                 
-        for node in c.changeset.added:
-            filenode_old = FileNode(node.path, '')
-            if filenode_old.is_binary or node.is_binary:
-                diff = 'binary file'
-            else:    
-                f_udiff = differ.get_udiff(filenode_old, node)
-                diff = differ.DiffProcessor(f_udiff).as_html()
-                try:
-                    diff = unicode(diff)
-                except:
-                    log.warning('Decoding failed of %s', filenode_old)
-                    log.warning('Decoding failed of %s', node)
-                    diff = 'unsupported type'
-            cs1 = None
-            cs2 = node.last_changeset.raw_id                                        
-            c.changes.append(('added', node, diff, cs1, cs2))
-            
-        for node in c.changeset.changed:
-            filenode_old = c.changeset_old.get_node(node.path)
-            if filenode_old.is_binary or node.is_binary:
-                diff = 'binary file'
-            else:    
-                f_udiff = differ.get_udiff(filenode_old, node)
-                diff = differ.DiffProcessor(f_udiff).as_html()
-                try:
-                    diff = unicode(diff)
-                except:
-                    log.warning('Decoding failed of %s', filenode_old)
-                    log.warning('Decoding failed of %s', node)                    
-                    diff = 'unsupported type'
-            cs1 = filenode_old.last_changeset.raw_id
-            cs2 = node.last_changeset.raw_id                    
-            c.changes.append(('changed', node, diff, cs1, cs2))
-            
-        for node in c.changeset.removed:
-            c.changes.append(('removed', node, None, None, None))            
+            for node in c.changeset.changed:
+                filenode_old = c.changeset_old.get_node(node.path)
+                if filenode_old.is_binary or node.is_binary:
+                    diff = 'binary file'
+                else:    
+                    f_udiff = differ.get_udiff(filenode_old, node)
+                    diff = differ.DiffProcessor(f_udiff).as_html()
+                    try:
+                        diff = unicode(diff)
+                    except:
+                        log.warning('Decoding failed of %s', filenode_old)
+                        log.warning('Decoding failed of %s', node)                    
+                        diff = 'unsupported type'
+                cs1 = filenode_old.last_changeset.raw_id
+                cs2 = node.last_changeset.raw_id                    
+                c.changes.append(('changed', node, diff, cs1, cs2))
+                
+            for node in c.changeset.removed:
+                c.changes.append(('removed', node, None, None, None))            
             
         return render('changeset/changeset.html')