public Repository open(C req, String name)throws RepositoryNotFoundException, ServiceNotEnabledException {if (isUnreasonableName(name))throw new RepositoryNotFoundException(name);Repository db = exports.get(nameWithDotGit(name));if (db != null) {db.incrementOpen();return db;}for (File base : exportBase) {File dir = FileKey.resolve(new File(base, name), FS.DETECTED);if (dir == null)continue;try {FileKey key = FileKey.exact(dir, FS.DETECTED);db = RepositoryCache.open(key, true);} catch (IOException e) {throw new RepositoryNotFoundException(name, e);}try {if (isExportOk(req, name, db)) {return db;}throw new ServiceNotEnabledException();} catch (RuntimeException | IOException e) {db.close();throw new RepositoryNotFoundException(name, e);} catch (ServiceNotEnabledException e) {db.close();throw e;}}if (exportBase.size() == 1) {File dir = new File(exportBase.iterator().next(), name);throw new RepositoryNotFoundException(name,new RepositoryNotFoundException(dir));}throw new RepositoryNotFoundException(name);}

public override Repository Open(C req, string name){if (IsUnreasonableName(name)){throw new RepositoryNotFoundException(name);}Repository db = exports.Get(NameWithDotGit(name));if (db != null){db.IncrementOpen();return db;}foreach (FilePath @base in exportBase){FilePath dir = RepositoryCache.FileKey.Resolve(new FilePath(@base, name), FS.DETECTED);if (dir == null){continue;}try{RepositoryCache.FileKey key = RepositoryCache.FileKey.Exact(dir, FS.DETECTED);db = RepositoryCache.Open(key, true);}catch (IOException e){throw new RepositoryNotFoundException(name, e);}try{if (IsExportOk(req, name, db)){return db;}else{throw new ServiceNotEnabledException();}}catch (RuntimeException e){db.Close();throw new RepositoryNotFoundException(name, e);}catch (IOException e){db.Close();throw new RepositoryNotFoundException(name, e);}catch (ServiceNotEnabledException e){db.Close();throw;}}if (exportBase.Count == 1){FilePath dir = new FilePath(exportBase.Iterator().Next(), name);throw new RepositoryNotFoundException(name, new RepositoryNotFoundException(dir));}throw new RepositoryNotFoundException(name);}
