From 64925cd401144fe02cfd2cf9fc96fbda0477bf70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Thu, 18 Jun 2015 22:38:18 +0200 Subject: [PATCH] Populate versionCode and versionName in adb.Installed() --- adb/adb.go | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/adb/adb.go b/adb/adb.go index dbc5a2f..8e5796f 100644 --- a/adb/adb.go +++ b/adb/adb.go @@ -9,6 +9,7 @@ import ( "net" "os/exec" "regexp" + "strconv" "strings" ) @@ -114,12 +115,15 @@ func (d Device) Uninstall(pkg string) error { type Package struct { ID string - VName string VCode int - + VName string } -var packageRegex = regexp.MustCompile(`Package \[([^\s]+)\]`) +var ( + packageRegex = regexp.MustCompile(`^ Package \[([^\s]+)\]`) + verCodeRegex = regexp.MustCompile(`^ versionCode=([0-9]+)`) + verNameRegex = regexp.MustCompile(`^ versionName=(.+)`) +) func (d Device) Installed() ([]Package, error) { cmd := d.AdbShell("dumpsys", "package", "packages") @@ -132,16 +136,21 @@ func (d Device) Installed() ([]Package, error) { } var packages []Package scanner := bufio.NewScanner(stdout) + var cur *Package for scanner.Scan() { - line := scanner.Text() - m := packageRegex.FindStringSubmatch(line) - if m == nil { - continue - } - p := Package{ - ID: m[1], + l := scanner.Text() + if m := packageRegex.FindStringSubmatch(l); m != nil { + packages = append(packages, Package{ID: m[1]}) + cur = &packages[len(packages)-1] + } else if m := verCodeRegex.FindStringSubmatch(l); m != nil { + n, err := strconv.Atoi(m[1]) + if err != nil { + panic(err) + } + cur.VCode = n + } else if m := verNameRegex.FindStringSubmatch(l); m != nil { + cur.VName = m[1] } - packages = append(packages, p) } return packages, nil }