-
Notifications
You must be signed in to change notification settings - Fork 1
/
import.go
78 lines (72 loc) · 2.24 KB
/
import.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package modules
import (
"context"
"github.com/goark/depm/golist"
"github.com/goark/depm/packages"
"github.com/goark/errs"
)
//ImportModules gets modules dependency information
func ImportModules(ctx context.Context, gctx golist.Context, name string, updFlag bool, withInternal bool) (*Modules, error) {
ps, err := packages.ImportPackages(ctx, gctx, name)
if err != nil {
return nil, errs.Wrap(err, errs.WithContext("name", name), errs.WithContext("updFlag", updFlag))
}
ms := importModules(ps, withInternal)
if updFlag {
for _, m := range ms.List() {
ml, err := gctx.GetModules(ctx, m.Name.Path, true)
if err != nil {
return nil, errs.Wrap(err, errs.WithContext("path", m.Name.Path), errs.WithContext("updFlag", updFlag))
}
if upd := searchModule(m.Name, ml); upd != nil && upd.Update != nil {
if !m.Name.EqualAll(upd.Update.Path, upd.Update.Version) {
m.Update = newName(upd.Update.Path, upd.Update.Version)
}
}
}
}
return ms, nil
}
func importModules(ps *packages.Packages, withInternal bool) *Modules {
ms := &Modules{list: []*Module{}}
for _, p := range ps.List() {
if m := ms.Add(p.Contained); m != nil {
if withInternal || (!withInternal && !p.IsInternal()) {
m.SetPackage(p)
}
for _, path := range p.Imports {
if dp := ps.Get(path); dp != nil {
if dm := m.SetDep(dp.Contained); dm != nil {
dm = ms.Set(dm)
if withInternal || (!withInternal && !dp.IsInternal()) {
dm.SetPackage(dp)
}
}
}
}
}
}
return ms
}
func searchModule(name Name, mlist []golist.Module) *golist.Module {
for _, m := range mlist {
if name.EqualAll(m.Path, m.Version) {
return &m
}
}
return nil
}
/* Copyright 2020 Spiegel
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/