Add a "list" subcommand to depstool

PiperOrigin-RevId: 481773074
diff --git a/depstool/depstool.go b/depstool/depstool.go
index cbc27bc..8ada2d9 100644
--- a/depstool/depstool.go
+++ b/depstool/depstool.go
@@ -7,11 +7,33 @@
 	"io/ioutil"
 	"log"
 	"os"
+	"time"
 
 	"github.com/bazelbuild/buildtools/build"
 	"quiche.googlesource.com/quiche/depstool/deps"
 )
 
+func list(path string, contents []byte) {
+	flags, err := deps.ParseHTTPArchiveRules(contents)
+	if err != nil {
+		log.Fatalf("Failed to parse %s: %v", path, err)
+	}
+
+	fmt.Println("+------------------------------+--------------------------+")
+	fmt.Println("|                   Dependency | Last updated             |")
+	fmt.Println("+------------------------------+--------------------------+")
+	for _, flag := range flags {
+		lastUpdated, err := time.Parse("2006-01-02", flag.LastUpdated)
+		if err != nil {
+			log.Fatalf("Failed to parse date %s: %v", flag.LastUpdated, err)
+		}
+		delta := time.Since(lastUpdated)
+		days := int(delta.Hours() / 24)
+		fmt.Printf("| %28s | %s, %3d days ago |\n", flag.Name, flag.LastUpdated, days)
+	}
+	fmt.Println("+------------------------------+--------------------------+")
+}
+
 func validate(path string, contents []byte) {
 	file, err := build.ParseWorkspace(path, contents)
 	if err != nil {
@@ -42,7 +64,10 @@
 usage: depstool [WORKSPACE file] [subcommand]
 
 Available subcommands:
+    list       Lists all of the rules in the file
     validate   Validates that the WORKSPACE file is parsable
+
+If no subcommand is specified, "list" is assumed.
 `)
 	flag.PrintDefaults()
 }
@@ -62,6 +87,10 @@
 
 	subcommand := flag.Arg(1)
 	switch subcommand {
+	case "":
+		fallthrough // list is the default action
+	case "list":
+		list(path, contents)
 	case "validate":
 		validate(path, contents)
 	default: