Add managed namespace wiki reset deploy
This commit is contained in:
@@ -33,21 +33,22 @@ const (
|
||||
)
|
||||
|
||||
type DeployWikiOptions struct {
|
||||
SourceDir string
|
||||
Endpoint string
|
||||
Token string
|
||||
Version string
|
||||
Namespaces []string
|
||||
CategoryIDs map[string]int
|
||||
ManifestPath string
|
||||
DryRun bool
|
||||
Force bool
|
||||
AllowCreates bool
|
||||
StalePolicy string
|
||||
Username string
|
||||
Password string
|
||||
NotesDelimiter string
|
||||
TitlePrefixMinLength int
|
||||
SourceDir string
|
||||
Endpoint string
|
||||
Token string
|
||||
Version string
|
||||
Namespaces []string
|
||||
CategoryIDs map[string]int
|
||||
ManifestPath string
|
||||
DryRun bool
|
||||
Force bool
|
||||
AllowCreates bool
|
||||
ResetManagedNamespaces bool
|
||||
StalePolicy string
|
||||
Username string
|
||||
Password string
|
||||
NotesDelimiter string
|
||||
TitlePrefixMinLength int
|
||||
}
|
||||
|
||||
type deployResult struct {
|
||||
@@ -456,6 +457,23 @@ func planNodeBBDeploy(pages map[string]wikiDeployPage, manifest wikiDeployManife
|
||||
remotePagesByCID := map[int][]nodeBBWikiPage{}
|
||||
var plans []wikiDeployPlan
|
||||
var result deployResult
|
||||
if opts.ResetManagedNamespaces {
|
||||
if !opts.AllowCreates && len(pageIDs) > 0 {
|
||||
return nil, result, next, errors.New("wiki managed namespace reset requires --create so current generated pages can be recreated")
|
||||
}
|
||||
resetPlans, purged, err := planManagedNamespaceReset(opts, client)
|
||||
if err != nil {
|
||||
return nil, result, next, err
|
||||
}
|
||||
plans = append(plans, resetPlans...)
|
||||
result.Purged += purged
|
||||
manifest = wikiDeployManifest{Version: "nodebb-v1", Pages: map[string]wikiDeployManifestPage{}}
|
||||
for _, cid := range opts.CategoryIDs {
|
||||
if cid != 0 {
|
||||
remotePagesByCID[cid] = []nodeBBWikiPage{}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for _, pageID := range pageIDs {
|
||||
page := pages[pageID]
|
||||
@@ -615,6 +633,52 @@ func planNodeBBDeploy(pages map[string]wikiDeployPage, manifest wikiDeployManife
|
||||
return plans, result, next, nil
|
||||
}
|
||||
|
||||
func planManagedNamespaceReset(opts DeployWikiOptions, client *nodeBBClient) ([]wikiDeployPlan, int, error) {
|
||||
namespaces := slices.Clone(opts.Namespaces)
|
||||
if len(namespaces) == 0 {
|
||||
for namespace := range opts.CategoryIDs {
|
||||
namespaces = append(namespaces, namespace)
|
||||
}
|
||||
}
|
||||
slices.Sort(namespaces)
|
||||
|
||||
seenTIDs := map[int]struct{}{}
|
||||
var plans []wikiDeployPlan
|
||||
for _, namespace := range namespaces {
|
||||
cid := opts.CategoryIDs[namespace]
|
||||
if cid == 0 {
|
||||
continue
|
||||
}
|
||||
remotePages, err := client.listNamespacePages(cid)
|
||||
if err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
slices.SortFunc(remotePages, func(a, b nodeBBWikiPage) int {
|
||||
return a.TID - b.TID
|
||||
})
|
||||
for _, remotePage := range remotePages {
|
||||
if remotePage.TID == 0 {
|
||||
continue
|
||||
}
|
||||
if _, ok := seenTIDs[remotePage.TID]; ok {
|
||||
continue
|
||||
}
|
||||
seenTIDs[remotePage.TID] = struct{}{}
|
||||
title := strings.TrimSpace(remotePage.Title)
|
||||
if title == "" {
|
||||
title = strings.TrimSpace(remotePage.TitleLeaf)
|
||||
}
|
||||
pageID := fmt.Sprintf("%s:reset-topic-%d", namespace, remotePage.TID)
|
||||
plans = append(plans, wikiDeployPlan{
|
||||
Page: wikiDeployPage{PageID: pageID, Title: title, Namespace: namespace},
|
||||
Entry: wikiDeployManifestPage{TID: remotePage.TID, CID: cid, Namespace: namespace, Title: title},
|
||||
Action: "purge",
|
||||
})
|
||||
}
|
||||
}
|
||||
return plans, len(plans), nil
|
||||
}
|
||||
|
||||
func findMappedRemotePage(entry wikiDeployManifestPage, remotePagesByCID map[int][]nodeBBWikiPage, client *nodeBBClient) (nodeBBWikiPage, bool, error) {
|
||||
remotePages, ok := remotePagesByCID[entry.CID]
|
||||
if !ok {
|
||||
|
||||
Reference in New Issue
Block a user