From aabbd293104b3ac6238366631dce1f3c5dafdf22 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Sun, 27 Sep 2020 20:21:49 -0500 Subject: [PATCH] `.. peer untrack` command --- README.md | 4 ++-- project/cli.go | 13 ++++++++++++- project/peers.go | 32 ++++++++++++++++++++++++++------ 3 files changed, 40 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 95ae1da..12ecb04 100644 --- a/README.md +++ b/README.md @@ -22,8 +22,6 @@ You can override this value by specifying a `PIGEON_PATH` ENV var. |Done?|Noun |Verb | Flag / arg 1 | Flag 2 | |-----|------------|-----------|---------------|-----------| - | |peers |list | | | - | |peer |untrack | peer mhash | | | |blob |create | file path | | | |blob |create | pipe | | | |blob |find | | | @@ -36,6 +34,8 @@ You can override this value by specifying a `PIGEON_PATH` ENV var. | |message |show | message mhash | | | |bundle |create | | | | |bundle |ingest | | | + | X |peer |untrack | peer mhash | | + | X |peers |list | | | | X |peer |block | peer mhash | | | X |peer |follow | peer mhash | | | X |identity |show | | | diff --git a/project/cli.go b/project/cli.go index 455a1a0..602b474 100644 --- a/project/cli.go +++ b/project/cli.go @@ -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. func BootstrapCLI() { rootCmd.AddCommand(versionCmd) @@ -106,8 +117,8 @@ func BootstrapCLI() { rootCmd.AddCommand(peerRootCmd) peerRootCmd.AddCommand(peerBlockCmd) peerRootCmd.AddCommand(peerFollowCmd) + peerRootCmd.AddCommand(peerUntrackedCmd) peerRootCmd.AddCommand(peerListCmd) - if err := rootCmd.Execute(); err != nil { fmt.Println(err) os.Exit(1) diff --git a/project/peers.go b/project/peers.go index 1cad14a..430643e 100644 --- a/project/peers.go +++ b/project/peers.go @@ -20,13 +20,14 @@ type peer struct { status PeerStatus } -const createPeer = "INSERT INTO peers(mhash, status) VALUES(?1, ?2)" -const findPeerByStatus = "SELECT status FROM peers WHERE mhash=$1;" -const getAllPeers = "SELECT mhash, status FROM peers ORDER BY status DESC, mhash ASC;" +const sqlCreatePeer = "INSERT INTO peers(mhash, status) VALUES(?1, ?2);" +const sqlFindPeerByStatus = "SELECT status FROM peers WHERE mhash=$1;" +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 { var status PeerStatus - row := getDB().QueryRow(findPeerByStatus, mHash) + row := getDB().QueryRow(sqlFindPeerByStatus, mHash) switch err := row.Scan(&status); err { case sql.ErrNoRows: return "unknown" @@ -43,7 +44,7 @@ func addPeer(mHash string, status PeerStatus) { if err != nil { panicf("Failed to begin addPeer trx (0): %s", err) } - _, err2 := tx.Exec(createPeer, mHash, status) + _, err2 := tx.Exec(sqlCreatePeer, mHash, status) if err2 != nil { // This .Commit() call never gets hit: 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 { var ( status PeerStatus mhash string ) - rows, err := getDB().Query(getAllPeers) + rows, err := getDB().Query(sqlGetAllPeers) if err != nil { panicf("showPeers query failure: %s", err) }