func open(repoPath string) (repo.Repo, error) { packageLock.Lock() defer packageLock.Unlock() r, err := newFSRepo(repoPath) if err != nil { return nil, err } // Check if its initialized if err := checkInitialized(r.path); err != nil { return nil, err } r.lockfile, err = lockfile.Lock(r.path) if err != nil { return nil, err } keepLocked := false defer func() { // unlock on error, leave it locked on success if !keepLocked { r.lockfile.Close() } }() // Check version, and error out if not matching ver, err := mfsr.RepoPath(r.path).Version() if err != nil { if os.IsNotExist(err) { return nil, ErrNoVersion } return nil, err } if ver != RepoVersion { return nil, fmt.Errorf(errIncorrectRepoFmt, ver, RepoVersion) } // check repo path, then check all constituent parts. if err := dir.Writable(r.path); err != nil { return nil, err } if err := r.openConfig(); err != nil { return nil, err } if err := r.openDatastore(); err != nil { return nil, err } // setup eventlogger configureEventLoggerAtRepoPath(r.config, r.path) keepLocked = true return r, nil }
func open(repoPath string) (repo.Repo, error) { packageLock.Lock() defer packageLock.Unlock() r, err := newFSRepo(repoPath) if err != nil { return nil, err } // Check if its initialized if err := checkInitialized(r.path); err != nil { return nil, err } r.lockfile, err = lockfile.Lock(r.path) if err != nil { return nil, err } keepLocked := false defer func() { // unlock on error, leave it locked on success if !keepLocked { r.lockfile.Close() } }() // Check version, and error out if not matching ver, err := mfsr.RepoPath(r.path).Version() if err != nil { if os.IsNotExist(err) { return nil, ErrNoVersion } return nil, err } if RepoVersion > ver { return nil, ErrNeedMigration } else if ver > RepoVersion { // program version too low for existing repo return nil, fmt.Errorf(programTooLowMessage, RepoVersion, ver) } // check repo path, then check all constituent parts. if err := dir.Writable(r.path); err != nil { return nil, err } if err := r.openConfig(); err != nil { return nil, err } if err := r.openDatastore(); err != nil { return nil, err } keepLocked = true return r, nil }