diff --git a/MANIFEST.in b/MANIFEST.in
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -10,5 +10,6 @@ recursive-include rhodecode/public/image
 include rhodecode/public/js/yui2.js
 include rhodecode/public/js/excanvas.min.js
 include rhodecode/public/js/yui.flot.js
+include rhodecode/public/js/graph.js
 #templates
 recursive-include rhodecode/templates *
diff --git a/docs/changelog.rst b/docs/changelog.rst
--- a/docs/changelog.rst
+++ b/docs/changelog.rst
@@ -3,6 +3,14 @@
 Changelog
 =========
 
+1.0.2 (**2010-11-XX**)
+----------------------
+
+- fixed #59 missing graph.js
+- fixed repo_size crash when repository had broken symlinks
+- fixed python2.5 crashes.
+- tested under python2.7
+- bumped sqlalcehmy and celery versions
 
 1.0.1 (**2010-11-10**)
 ----------------------
diff --git a/rhodecode/__init__.py b/rhodecode/__init__.py
--- a/rhodecode/__init__.py
+++ b/rhodecode/__init__.py
@@ -24,7 +24,7 @@ versioning implementation: http://semver
 @author: marcink
 """
 
-VERSION = (1, 0, 1,)
+VERSION = (1, 0, 2,)
 
 __version__ = '.'.join((str(each) for each in VERSION[:4]))
 
diff --git a/rhodecode/lib/celerylib/__init__.py b/rhodecode/lib/celerylib/__init__.py
--- a/rhodecode/lib/celerylib/__init__.py
+++ b/rhodecode/lib/celerylib/__init__.py
@@ -12,7 +12,7 @@ log = logging.getLogger(__name__)
 class ResultWrapper(object):
     def __init__(self, task):
         self.task = task
-        
+
     @LazyProperty
     def result(self):
         return self.task
@@ -23,15 +23,22 @@ def run_task(task, *args, **kwargs):
         log.info('running task %s', t.task_id)
         return t
     except socket.error, e:
-        if  e.errno == 111:
+
+        try:
+            conn_failed = e.errno == 111
+        except AttributeError:
+            conn_failed = False
+
+        if  conn_failed:
             log.debug('Unable to connect to celeryd. Sync execution')
         else:
-            log.error(traceback.format_exc())    
+            log.debug('Unable to connect to celeryd. Sync execution')
+
     except KeyError, e:
             log.debug('Unable to connect to celeryd. Sync execution')
     except Exception, e:
         log.error(traceback.format_exc())
-    
+
     return ResultWrapper(task(*args, **kwargs))
 
 
@@ -39,7 +46,7 @@ def locked_task(func):
     def __wrapper(func, *fargs, **fkwargs):
         params = list(fargs)
         params.extend(['%s-%s' % ar for ar in fkwargs.items()])
-            
+
         lockkey = 'task_%s' % \
             md5(str(func.__name__) + '-' + \
                 '-'.join(map(str, params))).hexdigest()
@@ -51,14 +58,14 @@ def locked_task(func):
             return ret
         except LockHeld:
             log.info('LockHeld')
-            return 'Task with key %s already running' % lockkey   
+            return 'Task with key %s already running' % lockkey
 
-    return decorator(__wrapper, func)      
-            
+    return decorator(__wrapper, func)
+
+
 
-        
-        
-    
-    
-    
-  
+
+
+
+
+
diff --git a/rhodecode/lib/hooks.py b/rhodecode/lib/hooks.py
--- a/rhodecode/lib/hooks.py
+++ b/rhodecode/lib/hooks.py
@@ -37,11 +37,17 @@ def repo_size(ui, repo, hooktype=None, *
     for path, dirs, files in os.walk(repo.root):
         if path.find('.hg') != -1:
             for f in files:
-                size_hg += os.path.getsize(os.path.join(path, f))
+                try:
+                    size_hg += os.path.getsize(os.path.join(path, f))
+                except OSError:
+                    pass
         else:
             for f in files:
-                size_root += os.path.getsize(os.path.join(path, f))
-                
+                try:
+                    size_root += os.path.getsize(os.path.join(path, f))
+                except OSError:
+                    pass
+
     size_hg_f = h.format_byte_size(size_hg)
     size_root_f = h.format_byte_size(size_root)
     size_total_f = h.format_byte_size(size_root + size_hg)
diff --git a/rhodecode/lib/utils.py b/rhodecode/lib/utils.py
--- a/rhodecode/lib/utils.py
+++ b/rhodecode/lib/utils.py
@@ -465,7 +465,7 @@ def create_test_env(repos_test_path, con
     import tarfile
     import shutil
     from os.path import dirname as dn, join as jn, abspath
-    from rhodecode.tests import REPO_PATH, NEW_REPO_PATH
+    from rhodecode.tests import REPO_PATH, NEW_REPO_PATH, FORK_REPO_PATH
 
     log = logging.getLogger('TestEnvCreator')
     # create logger
@@ -505,6 +505,9 @@ def create_test_env(repos_test_path, con
     if os.path.isdir(NEW_REPO_PATH):
         log.debug('REMOVING %s', NEW_REPO_PATH)
         shutil.rmtree(NEW_REPO_PATH)
+    if os.path.isdir(FORK_REPO_PATH):
+        log.debug('REMOVING %s', FORK_REPO_PATH)
+        shutil.rmtree(FORK_REPO_PATH)
 
     cur_dir = dn(dn(abspath(__file__)))
     tar = tarfile.open(jn(cur_dir, 'tests', "vcs_test.tar.gz"))
diff --git a/rhodecode/tests/__init__.py b/rhodecode/tests/__init__.py
--- a/rhodecode/tests/__init__.py
+++ b/rhodecode/tests/__init__.py
@@ -34,6 +34,7 @@ environ = {}
 TEST_DIR = '/tmp'
 REPO_PATH = os.path.join(TEST_DIR, 'vcs_test')
 NEW_REPO_PATH = os.path.join(TEST_DIR, 'vcs_test_new')
+FORK_REPO_PATH = os.path.join(TEST_DIR, 'vcs_test_fork')
 
 class TestController(TestCase):
 
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -4,13 +4,13 @@ py_version = sys.version_info
 
 requirements = [
         "Pylons>=1.0.0",
-        "SQLAlchemy==0.6.4",
+        "SQLAlchemy==0.6.5",
         "Mako>=0.3.2",
         "vcs==0.1.8",
         "pygments>=1.3.0",
         "mercurial==1.6.4",
         "whoosh==1.2.5",
-        "celery==2.1.2",
+        "celery==2.1.3",
         "py-bcrypt",
         "babel",
     ]