Fixing Type A DM issues S1→Let P v migrate to Go Modules ab1: Promoting the migration to Go Modules uc1: Breaking compatibility with P v ’ s downstream module-unaware projects:ĭp1, dp2 ,…, dpn ∈ Ds (in GOPATH and using DM tools) S2→Let P v ’ s v2+ upstream project up i (in Go Modules and released by mbs) roll back to GOPATH ab2: Supporting up i ’ s downstream module-unaware projects uc2: Hindering the migration to the ecosystem S3→Let P v ’s v2+ upstream project up i in Go Modules change its releasing strategy from mbs to mss ab2: Supporting up i ’ s downstream module-unaware projects uc3: Increasing maintenance efforts S4→Let P v maintain v2+ upstream project up i (in Go Modules, released by mbs) in Vendor directory Mss is short for the major subdirectory strategy "S1-8" denote fixing solutions 1-8 ab1-3 and uc1-4 correspond to theĪdditional benefits and undesired consequences of fixing solutions info is the customized information by Hero. Issues are described as follows, where P v is the project under analysis mbs is short for the major branch strategy Templates of customized fixing suggestions for three types of DM vd denotes a collection of import paths (set of URLs) referencing those upstream libraries that are maintained in P v ’s Vendor directory but cannot be found in the repositories pointed to by URLs (e.g., due to removal or renaming) įor each detected DM issue, Hero suggests all applicable solutions to developers byĬustomizing the template with potential impact analysis based on the associated Ii denotes whether upi is transitively introduced into Pv by any project in GOPATH ( yes or no)Ĥ. Si denotes whether upi is released by the major branch strategy ( yes or no)ģ. REST APIs " repository_url" and " code_search_url" are defined byĢ. Hero reports a warning of Type C issue for P v. However, build errors would occur if such projects exist in future. Violation may not introduce build errors when P v has no downstream projects in Go Thus, Hero reports a warning of Typeįigure (d) shows a scenario, where project P v in Go Modules violates SIV rules. However, if P v has such downstream projects, the latter would fetch up a via its import path (i.e., hosting repository) rather than from P v ’s Vendor directory,Ĭausing build errors due to failing to fetch up a. No build errors occur when P v has no downstream projects in Go Project upa maintained only in its Vendor directory (i.e., up a has already been deleted įigure (c) shows a scenario, where project P v in GOPATH references an upstream Hero reports a warning of Type B.1 issue for P v. V2.0.0), while P v would use up b ’s old v0/v1 version, causing inconsistencies.
Modules interpret import paths differently, up a would use up b ’s latest version (e.g., Through another module-unaware project up a in GOPATH. V2+ upstream project up b in Go Modules (released by the major branch strategy)
įigure (b) shows a scenario, where project P v in Go Modules transitively references a Such a possibility, Hero reports a warning of Type A issue for P v. Latest version, it will not be able to recognize up b ’ s virtual import path. However, if P v updates up a to reference the In P v when it references up a ’s old version.
With a v2+ version released using the major branch strategy. Latest version, which newly introduces another upstream project up b in Go Modules Version of its upstream project up a in Go Modules. Scenarios for which HERO reports issues: Type A:įigure (a) shows a scenario, where a module-unaware project P v references a specific v i: up i's latest version number ip i: up i's declared module path md i: up i's library-referencing mode ( GOPATH or Go Modules) S i: If up i is a v2+ project in Go Modules, field S i denotes whether it is released by the major branch strategy (yes or no), implying whether ip i is a virtual import path I i: If both projects up i and P v are in Go Modules, field I i denotes whether upi is transitively introduced into P v by any project in GOPATH Ds = is a collection of P v's upstream projects up i , where up i = (v i, ip i, md i, S i, I i). ip: P v 's declared module path md: P v 's library-referencing mode ( GOPATH or Go Modules) t: whether P v depends on any DM tool (yes or no) vd: a collection of import paths (set of URLs) referencing those upstream libraries that are maintained in P v 's Vendor directory but cannot be found in the repositories pointed to by URLs (e.g., due to removal or renaming) 2. Pr = (ip, md, t, vd) records the information of the current project.
The dependency model D( P v) for version v of a project P is a 3-tuple ( P r, D s, U s): 1.