`.. peer untrack` command

This commit is contained in:
Netscape Navigator 2020-09-27 20:21:49 -05:00
parent f17c9eb440
commit aabbd29310
3 changed files with 40 additions and 9 deletions

View File

@ -22,8 +22,6 @@ You can override this value by specifying a `PIGEON_PATH` ENV var.
|Done?|Noun |Verb | Flag / arg 1 | Flag 2 | |Done?|Noun |Verb | Flag / arg 1 | Flag 2 |
|-----|------------|-----------|---------------|-----------| |-----|------------|-----------|---------------|-----------|
| |peers |list | | |
| |peer |untrack | peer mhash | |
| |blob |create | file path | | | |blob |create | file path | |
| |blob |create | pipe | | | |blob |create | pipe | |
| |blob |find | | | | |blob |find | | |
@ -36,6 +34,8 @@ You can override this value by specifying a `PIGEON_PATH` ENV var.
| |message |show | message mhash | | | |message |show | message mhash | |
| |bundle |create | | | | |bundle |create | | |
| |bundle |ingest | | | | |bundle |ingest | | |
| X |peer |untrack | peer mhash | |
| X |peers |list | | |
| X |peer |block | peer mhash | | | X |peer |block | peer mhash | |
| X |peer |follow | peer mhash | | | X |peer |follow | peer mhash | |
| X |identity |show | | | | X |identity |show | | |

View File

@ -95,6 +95,17 @@ var peerFollowCmd = &cobra.Command{
}, },
} }
var peerUntrackedCmd = &cobra.Command{
Use: "untrack",
Short: "Stop following/blocking a peer",
Aliases: []string{"unblock", "unfollow"},
Run: func(cmd *cobra.Command, args []string) {
mHash := validateMhash(args[0])
removePeer(mHash)
fmt.Printf("Untracked %s\n", mHash)
},
}
// BootstrapCLI wires up all the relevant commands. // BootstrapCLI wires up all the relevant commands.
func BootstrapCLI() { func BootstrapCLI() {
rootCmd.AddCommand(versionCmd) rootCmd.AddCommand(versionCmd)
@ -106,8 +117,8 @@ func BootstrapCLI() {
rootCmd.AddCommand(peerRootCmd) rootCmd.AddCommand(peerRootCmd)
peerRootCmd.AddCommand(peerBlockCmd) peerRootCmd.AddCommand(peerBlockCmd)
peerRootCmd.AddCommand(peerFollowCmd) peerRootCmd.AddCommand(peerFollowCmd)
peerRootCmd.AddCommand(peerUntrackedCmd)
peerRootCmd.AddCommand(peerListCmd) peerRootCmd.AddCommand(peerListCmd)
if err := rootCmd.Execute(); err != nil { if err := rootCmd.Execute(); err != nil {
fmt.Println(err) fmt.Println(err)
os.Exit(1) os.Exit(1)

View File

@ -20,13 +20,14 @@ type peer struct {
status PeerStatus status PeerStatus
} }
const createPeer = "INSERT INTO peers(mhash, status) VALUES(?1, ?2)" const sqlCreatePeer = "INSERT INTO peers(mhash, status) VALUES(?1, ?2);"
const findPeerByStatus = "SELECT status FROM peers WHERE mhash=$1;" const sqlFindPeerByStatus = "SELECT status FROM peers WHERE mhash=$1;"
const getAllPeers = "SELECT mhash, status FROM peers ORDER BY status DESC, mhash ASC;" const sqlGetAllPeers = "SELECT mhash, status FROM peers ORDER BY status DESC, mhash ASC;"
const sqlRemovePeer = "DELETE FROM peers WHERE mhash=$1;"
func getPeerStatus(mHash string) PeerStatus { func getPeerStatus(mHash string) PeerStatus {
var status PeerStatus var status PeerStatus
row := getDB().QueryRow(findPeerByStatus, mHash) row := getDB().QueryRow(sqlFindPeerByStatus, mHash)
switch err := row.Scan(&status); err { switch err := row.Scan(&status); err {
case sql.ErrNoRows: case sql.ErrNoRows:
return "unknown" return "unknown"
@ -43,7 +44,7 @@ func addPeer(mHash string, status PeerStatus) {
if err != nil { if err != nil {
panicf("Failed to begin addPeer trx (0): %s", err) panicf("Failed to begin addPeer trx (0): %s", err)
} }
_, err2 := tx.Exec(createPeer, mHash, status) _, err2 := tx.Exec(sqlCreatePeer, mHash, status)
if err2 != nil { if err2 != nil {
// This .Commit() call never gets hit: // This .Commit() call never gets hit:
err1 := tx.Rollback() err1 := tx.Rollback()
@ -58,12 +59,31 @@ func addPeer(mHash string, status PeerStatus) {
} }
} }
func removePeer(mHash string) {
tx, err := getDB().Begin()
if err != nil {
panicf("Failed to begin removePeer trx (0): %s", err)
}
_, err2 := tx.Exec(sqlRemovePeer, mHash)
if err2 != nil {
err1 := tx.Rollback()
if err1 != nil {
panicf("Failed to rollback removePeer (1): %s", err)
}
panic(fmt.Sprintf("Failure. Possible duplicate peer?: %s", err2))
}
err1 := tx.Commit()
if err1 != nil {
panicf("Failed to commit peer removal (2): %s", err)
}
}
func listPeers() []peer { func listPeers() []peer {
var ( var (
status PeerStatus status PeerStatus
mhash string mhash string
) )
rows, err := getDB().Query(getAllPeers) rows, err := getDB().Query(sqlGetAllPeers)
if err != nil { if err != nil {
panicf("showPeers query failure: %s", err) panicf("showPeers query failure: %s", err)
} }