@@ -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}
0 commit comments