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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
package cli
import (
"fmt"
"strings"
"codeberg.org/snonux/gitsyncer/internal/codeberg"
"codeberg.org/snonux/gitsyncer/internal/config"
"codeberg.org/snonux/gitsyncer/internal/github"
)
// syncRepoDescriptions ensures both platforms have the canonical description
// Precedence: Codeberg > GitHub; if Codeberg empty and GitHub has one, use GitHub.
// knownCBDesc and knownGHDesc can be empty; the function fetches as needed.
func syncRepoDescriptions(cfg *config.Config, dryRun bool, repoName, knownCBDesc, knownGHDesc string, cache map[string]string) {
// Load orgs
ghOrg := cfg.FindGitHubOrg()
cbOrg := cfg.FindCodebergOrg()
var ghClient *github.Client
var cbClient *codeberg.Client
if ghOrg != nil {
c := github.NewClient(ghOrg.GitHubToken, ghOrg.Name)
ghClient = &c
}
if cbOrg != nil {
c := codeberg.NewClient(cbOrg.Name, cbOrg.CodebergToken)
cbClient = &c
}
// Get current descriptions (use known if provided)
cbDesc := strings.TrimSpace(knownCBDesc)
ghDesc := strings.TrimSpace(knownGHDesc)
var cbExists, ghExists bool
if cbDesc == "" && cbClient != nil {
if repo, exists, err := cbClient.GetRepo(repoName); err == nil {
cbExists = exists
if exists {
cbDesc = strings.TrimSpace(repo.Description)
}
} else {
fmt.Printf(" Warning: Codeberg repo lookup failed: %v\n", err)
}
} else if cbClient != nil {
cbExists = true
}
if ghClient != nil {
if ghDesc == "" || !ghExists {
if repo, exists, err := ghClient.GetRepo(repoName); err == nil {
ghExists = exists
if exists {
ghDesc = strings.TrimSpace(repo.Description)
}
} else {
fmt.Printf(" Warning: GitHub repo lookup failed: %v\n", err)
}
}
}
// Determine canonical description
canonical := cbDesc
if canonical == "" {
canonical = ghDesc
}
canonical = strings.TrimSpace(canonical)
// If nothing to sync, bail
if canonical == "" {
return
}
// Update Codeberg if needed
if cbClient != nil && cbExists {
if cbDesc != canonical {
if dryRun {
fmt.Printf(" [DRY RUN] Would update Codeberg description for %s -> %q\n", repoName, canonical)
} else if cbClient.HasToken() {
if err := cbClient.UpdateRepoDescription(repoName, canonical); err != nil {
fmt.Printf(" Warning: Failed to update Codeberg description: %v\n", err)
} else {
fmt.Printf(" Updated Codeberg description for %s\n", repoName)
}
} else {
fmt.Println(" Warning: No Codeberg token; cannot update description")
}
}
}
// Update GitHub if needed
if ghClient != nil && ghExists {
if ghDesc != canonical {
if dryRun {
fmt.Printf(" [DRY RUN] Would update GitHub description for %s -> %q\n", repoName, canonical)
} else if ghClient.HasToken() {
if err := ghClient.UpdateRepoDescription(repoName, canonical); err != nil {
fmt.Printf(" Warning: Failed to update GitHub description: %v\n", err)
} else {
fmt.Printf(" Updated GitHub description for %s\n", repoName)
}
} else {
fmt.Println(" Warning: No GitHub token; cannot update description")
}
}
}
// Update cache
if cache != nil {
cache[repoName] = canonical
}
}
|