code: def search_upwards(self, fpath=None, repodirname='.svn', upwards={}):
          
          fpath = fpath or self.fpath
          uuid = self.unique_id
          last_path = self
  
          path_comp = fpath.split(os.path.sep)
          # [0:-1], [0:-2], [0:-1*len(path_comp)]
          for n in xrange(1, len(path_comp)-1):
              checkpath = os.path.join(*path_comp[0:-1 * n])
              repodir = os.path.join(checkpath, repodirname)
              upw_uuid = upwards.get(repodir)
              if upw_uuid:
                  if upw_uuid == uuid:
                      last_path = SvnRepository(checkpath)
                      continue
                  else:
                      break
              elif os.path.exists(repodir):
                  repo = SvnRepository(checkpath)
                  upw_uuid = repo.unique_id
                  upwards[repodir] = upw_uuid
                  # TODO: match on REVISION too
                  if upw_uuid == uuid:
                      last_path = repo
                      continue
                  else:
                      break
  
          return last_path
docs: Traverse filesystem upwards, searching for .svn directories
          with matching UUIDs (Recursive)
  
          Args:
              fpath (str): file path to search upwards from
              repodirname (str): directory name to search for (``.svn``)
              upwards (dict): dict of already-searched directories
  
          example::
  
              repo/.svn
              repo/dir1/.svn
              repo/dir1/dir2/.svn
  
              >> search_upwards('repo/')
              << 'repo/'
              >> search_upwards('repo/dir1')
              << 'repo/'
              >> search_upwards('repo/dir1/dir2')
              << 'repo/'
  
              repo/.svn
              repo/dirA/
              repo/dirA/dirB/.svn
  
              >> search_upwards('repo/dirA')
              << 'repo/'
              >> search_upwards('repo/dirA/dirB')
              >> 'repo/dirB')