func (o *Environment) Diff(pkg *gdf.Package, includeImportTypeDiffs bool) (diff *pkgDiff, err error) { dbpkg, exps, imps, e := o.db.GetPackage(pkg.Path, true, true) if e != nil { err = fmt.Errorf("package not registered: %s\n", pkg.Path) return } if pkg.JsonMd5() != dbpkg.JsonMd5 { pkgjs := pkg var oldExports = map[string]string{} for _, dbExp := range exps { oldExports[dbExp.Name] = dbExp.Value } pDiff := &pkgDiff{} pDiff.Path = pkg.Path pDiff.Exports = mapDiff(oldExports, pkgjs.Exports, true) var oldImports = map[string]string{} for _, dbImp := range imps { oldImports[dbImp.Import+"."+dbImp.Name] = dbImp.Value } pDiff.Imports = mapDiff(oldImports, pkgjs.Imports, includeImportTypeDiffs) if len(pDiff.Exports) > 0 || len(pDiff.Imports) > 0 { return pDiff, nil } } return nil, nil }
// TODO: get rid of it func (env *Environment) packageToDBFormat(pkgMap map[string]*dbPkg, pkg *gdf.Package, includeImported bool) (dbExps []*exp, dbImps []*imp) { p := &dbPkg{} p.Package = pkg.Path p.Json = niceJson(pkg) p.JsonMd5 = pkg.JsonMd5() pkgMap[pkg.Path] = p dbExps = []*exp{} dbImps = []*imp{} if includeImported { for im, _ := range pkg.ImportedPackages { if _, has := pkgMap[im]; has { continue } imPkg, err := env.GetPkg(im) if err != nil { panic(fmt.Sprintf("%s imports not existing package %s", pkg.Path, im)) } pExp, pImp := env.packageToDBFormat(pkgMap, imPkg, includeImported) dbExps = append(dbExps, pExp...) dbImps = append(dbImps, pImp...) } } pkgjs := pkg for k, v := range pkgjs.Exports { dbE := &exp{} dbE.Package = pkg.Path dbE.Name = k dbE.Value = v dbExps = append(dbExps, dbE) } for k, v := range pkgjs.Imports { dbI := &imp{} dbI.Package = pkg.Path importPath, name := gdf.SplitImportSymbol(k) dbI.Name = name dbI.Value = v dbI.Import = importPath dbImps = append(dbImps, dbI) } return }