module stratego/xtc/Register
imports
stratego/xtc/Repository
strategies
// Finding an entry in the repository
xtc-find-warning =
xtc-find
xtc-find =
?tool
; xtc-load
; (xtc-find-version-loc <+ xtc-find-loc)
; log(|Vomit(), ["Found ", tool, " at ", <id>])
<+ log(|Error(), ["No XTC registration for ", <id>, " found"])
; fail
xtc-find-silent =
xtc-load
; (xtc-find-version-loc <+ xtc-find-loc)
xtc-find-version-loc :
(tool, version) -> loc
where <table-get>(XTC, Tool(tool)); fetch(?(version, loc))
xtc-find-loc :
tool -> loc
where <table-get> (XTC, Tool(tool)) => [(version, loc) | _]
xtc-find-path =
xtc-find; dirname
// Registering an entry
xtc-register =
<get-config> "-t" => tools
; log(|Debug(), ["Tools : " | <separate-by(|", ")> tools])
; <get-config> "-V" => version
; log(|Debug(), ["Version : ", version])
; if <get-config> "--path" then
<get-config> "--path" => path
; log(|Debug(), ["Path : ", path])
; xtc-register-path(|tools, version, path)
else
<get-config> "-l" => loc
; log(|Debug(), ["Location : ", loc])
; xtc-register(|tools, version, loc)
end
; !tools
strategies
/**
* @param tools String or List(String)
* @param version String
* @param loc Directory of tools
*/
xtc-register(|tools, version, loc) =
where(
!tools
; (is-list <+ ![<id>])
; map({tool:
?tool
; xtc-register-path(|tool, version, <conc-strings> (loc, "/", tool))
})
)
/**
* @param tools List(String)
* @param version String
* @param path Directory of tools
*/
xtc-register-path(|tools, version, path) =
where(
<is-list> tools
; !tools
; map({tool:
?tool
; xtc-register-path(|tool, version, path)
})
)
/**
* @param tools String
* @param version String
* @param path Directory of tools
*/
xtc-register-path(|tool, version, path) =
where(
<not(is-list)> tool
; xtc-load
; tbl := <lookup-table(|XTC())>
; if val := <hashtable-get(|Tool(tool))> tbl then
!val
// remove existing entries for this path
; remove-all(?(_, path))
// if the version already exists then replace, else insert
; if fetch(?(version, _)) then
fetch(((version, _) -> (version, path)))
else
![(version, path) | <id>]
end
else
![(version, path)]
end
; ?newval
; <hashtable-put(|Tool(tool), newval)> tbl
)
strategies
register-import =
<get-config> "import" => imports
; log(|Vomit(),"Registering imports",<id>)
; <get-config> "import" => reps
; log(|Vomit(),"Importing",<id>)
; <table-union> (XTC, Import, reps)