mirror of
https://github.com/fiatjaf/nak.git
synced 2025-12-08 16:48:51 +00:00
git: remove unused gitAnnounce.
This commit is contained in:
115
git.go
115
git.go
@@ -665,121 +665,6 @@ var gitFetch = &cli.Command{
|
||||
},
|
||||
}
|
||||
|
||||
var gitAnnounce = &cli.Command{
|
||||
Name: "announce",
|
||||
Usage: "announce repository to Nostr",
|
||||
Flags: defaultKeyFlags,
|
||||
Action: func(ctx context.Context, c *cli.Command) error {
|
||||
// check if current directory is a git repository
|
||||
cmd := exec.Command("git", "rev-parse", "--git-dir")
|
||||
if err := cmd.Run(); err != nil {
|
||||
return fmt.Errorf("current directory is not a git repository")
|
||||
}
|
||||
|
||||
// read nip34.json configuration
|
||||
localConfig, err := readNip34ConfigFile("")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// parse owner
|
||||
owner, err := parsePubKey(localConfig.Owner)
|
||||
if err != nil {
|
||||
return fmt.Errorf("invalid owner public key: %w", err)
|
||||
}
|
||||
|
||||
// setup signer
|
||||
kr, _, err := gatherKeyerFromArguments(ctx, c)
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to gather keyer: %w", err)
|
||||
}
|
||||
currentPk, _ := kr.GetPublicKey(ctx)
|
||||
|
||||
// current signer must match owner otherwise we can't announce
|
||||
if currentPk != owner {
|
||||
return fmt.Errorf("current user is not the owner of this repository, can't announce")
|
||||
}
|
||||
|
||||
// convert local config to nip34.Repository
|
||||
localRepo := nip34.Repository{
|
||||
ID: localConfig.Identifier,
|
||||
Name: localConfig.Name,
|
||||
Description: localConfig.Description,
|
||||
Web: localConfig.Web,
|
||||
EarliestUniqueCommitID: localConfig.EarliestUniqueCommit,
|
||||
Maintainers: []nostr.PubKey{},
|
||||
}
|
||||
for _, server := range localConfig.GraspServers {
|
||||
graspRelayURL := nostr.NormalizeURL(server)
|
||||
url := fmt.Sprintf("http%s/%s/%s.git",
|
||||
graspRelayURL[2:], nip19.EncodeNpub(owner), localConfig.Identifier)
|
||||
localRepo.Clone = append(localRepo.Clone, url)
|
||||
localRepo.Relays = append(localRepo.Relays, graspRelayURL)
|
||||
}
|
||||
for _, maintainer := range localConfig.Maintainers {
|
||||
if pk, err := parsePubKey(maintainer); err == nil {
|
||||
localRepo.Maintainers = append(localRepo.Maintainers, pk)
|
||||
} else {
|
||||
log(color.YellowString("invalid maintainer pubkey '%s': %v\n", maintainer, err))
|
||||
}
|
||||
}
|
||||
|
||||
// these are the relays where we'll publish the announcement to
|
||||
relays := append(sys.FetchOutboxRelays(ctx, owner, 3), localConfig.GraspServers...)
|
||||
for i := range relays {
|
||||
relays[i] = nostr.NormalizeURL(relays[i])
|
||||
}
|
||||
|
||||
// fetch repository announcement (30617) events
|
||||
oks := make([]bool, len(relays))
|
||||
var repo nip34.Repository
|
||||
results := sys.Pool.FetchMany(ctx, relays, nostr.Filter{
|
||||
Kinds: []nostr.Kind{30617},
|
||||
Tags: nostr.TagMap{
|
||||
"d": []string{localConfig.Identifier},
|
||||
},
|
||||
Limit: 1,
|
||||
}, nostr.SubscriptionOptions{
|
||||
Label: "nak-git-announce",
|
||||
CheckDuplicate: func(id nostr.ID, relay string) bool { return false }, // get the same event from multiple relays
|
||||
})
|
||||
for ie := range results {
|
||||
repo = nip34.ParseRepository(ie.Event)
|
||||
|
||||
// check if this is ok or the announcement in this relay needs to be updated
|
||||
if repo.Equals(localRepo) {
|
||||
relayIdx := slices.Index(relays, ie.Relay.URL)
|
||||
oks[relayIdx] = true
|
||||
}
|
||||
}
|
||||
|
||||
// publish repository announcement if needed
|
||||
if slices.Contains(oks, false) {
|
||||
announcementEvent := localRepo.ToEvent()
|
||||
if err := kr.SignEvent(ctx, &announcementEvent); err != nil {
|
||||
return fmt.Errorf("failed to sign announcement event: %w", err)
|
||||
}
|
||||
|
||||
targets := make([]string, 0, len(oks))
|
||||
for i, ok := range oks {
|
||||
if !ok {
|
||||
targets = append(targets, relays[i])
|
||||
}
|
||||
}
|
||||
log("- publishing repository announcement to " + color.CyanString("%v", targets) + "\n")
|
||||
for res := range sys.Pool.PublishMany(ctx, targets, announcementEvent) {
|
||||
if res.Error != nil {
|
||||
log("! error publishing announcement to relay %s: %v\n", color.YellowString(res.RelayURL), res.Error)
|
||||
} else {
|
||||
log("> published announcement to relay %s\n", color.GreenString(res.RelayURL))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
},
|
||||
}
|
||||
|
||||
var gitSync = &cli.Command{
|
||||
Name: "sync",
|
||||
Usage: "sync repository with relays",
|
||||
|
||||
Reference in New Issue
Block a user