Skip to content

Commit 6950c96

Browse files
authored
fix: Package manager error with lock file (#192)
1 parent 8f028b7 commit 6950c96

2 files changed

Lines changed: 38 additions & 19 deletions

File tree

internal/core/get.go

Lines changed: 37 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,24 @@ func (c *Core) Get(ctx context.Context, requestedModule models.Module) error {
2828
}
2929

3030
if !needToInstall {
31-
lockFileInfo, err := c.lockFile.Read(requestedModule.Name)
32-
if err != nil {
33-
return fmt.Errorf("c.lockFile.Read: %w", err)
34-
}
35-
36-
if lockFileInfo.Hash != installedModuleInfo.Hash {
37-
return fmt.Errorf("c.lockFile.Read: lock file hash mismatch")
31+
if err := c.checkInstalledPackage(requestedModule, installedModuleInfo); err != nil {
32+
return fmt.Errorf("c.checkInstalledPackage: %w", err)
3833
}
3934

40-
// TODO: calc hash
41-
4235
c.logger.Debug("Module is installed",
4336
"name", requestedModule.Name, "version", requestedModule.Version,
4437
)
45-
return nil
38+
} else {
39+
installedModuleInfo, err = c.get(ctx, requestedModule)
40+
if err != nil {
41+
return fmt.Errorf("c.get: %w", err)
42+
}
4643
}
47-
_ = installedModuleInfo
4844

49-
installedModuleInfo, err = c.get(ctx, requestedModule)
50-
if err != nil {
51-
return fmt.Errorf("c.get: %w", err)
45+
if err := c.lockFile.Write(
46+
requestedModule.Name, installedModuleInfo.RevisionVersion, installedModuleInfo.Hash,
47+
); err != nil {
48+
return fmt.Errorf("c.lockFile.Write: %w", err)
5249
}
5350

5451
return nil
@@ -119,11 +116,32 @@ func (c *Core) get(ctx context.Context, requestedModule models.Module) (models.I
119116
return models.InstalledModuleInfo{}, fmt.Errorf("c.storage.WriteInstalledModuleInfo: %w", err)
120117
}
121118

122-
if err := c.lockFile.Write(
123-
requestedModule.Name, installedModuleInfo.RevisionVersion, installedModuleInfo.Hash,
124-
); err != nil {
125-
return models.InstalledModuleInfo{}, fmt.Errorf("c.lockFile.Write: %w", err)
119+
return installedModuleInfo, nil
120+
}
121+
122+
// checkInstalledPackage checked if installed version is valid
123+
func (c *Core) checkInstalledPackage(
124+
requestedModule models.Module, installedModuleInfo models.InstalledModuleInfo,
125+
) error {
126+
lockFileInfo, err := c.lockFile.Read(requestedModule.Name)
127+
if err != nil {
128+
if errors.Is(err, models.ErrModuleNotFoundInLockFile) {
129+
// not in lock file have no to compare with
130+
return nil
131+
}
132+
133+
return fmt.Errorf("c.lockFile.Read: %w", err)
126134
}
127135

128-
return installedModuleInfo, nil
136+
if lockFileInfo.Version == string(requestedModule.Version) {
137+
c.logger.Debug("version is match check hash")
138+
139+
if lockFileInfo.Hash != installedModuleInfo.Hash {
140+
return models.ErrHashDependencyMismatch
141+
}
142+
}
143+
144+
// TODO: calc hash
145+
146+
return nil
129147
}

internal/core/models/errors.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ var (
99
ErrFileNotFound = errors.New("file not found")
1010
ErrModuleNotInstalled = errors.New("module not installed")
1111
ErrModuleInfoFileNotFound = errors.New("module info file not found")
12+
ErrHashDependencyMismatch = errors.New("hash dependency mismatch")
1213
)

0 commit comments

Comments
 (0)