mirror of
https://github.com/aptly-dev/aptly.git
synced 2026-04-20 19:38:39 +00:00
Add -json output flag to repo list|show
Signed-off-by: Joshua Colson <joshua.colson@gmail.com>
This commit is contained in:
committed by
Lorenzo Bolla
parent
f9d08e1377
commit
1f56fb86e3
1
AUTHORS
1
AUTHORS
@@ -40,3 +40,4 @@ List of contributors, in chronological order:
|
|||||||
* Raphael Medaer (https://github.com/rmedaer)
|
* Raphael Medaer (https://github.com/rmedaer)
|
||||||
* Raul Benencia (https://github.com/rul)
|
* Raul Benencia (https://github.com/rul)
|
||||||
* Don Kuntz (https://github.com/dkuntz2)
|
* Don Kuntz (https://github.com/dkuntz2)
|
||||||
|
* Joshua Colson (https://github.com/freakinhippie)
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
@@ -16,8 +17,10 @@ func aptlyRepoList(cmd *commander.Command, args []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
|
raw := cmd.Flag.Lookup("raw").Value.Get().(bool)
|
||||||
|
jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
|
||||||
|
|
||||||
repos := make([]string, context.CollectionFactory().LocalRepoCollection().Len())
|
repos := make([]string, context.CollectionFactory().LocalRepoCollection().Len())
|
||||||
|
jsonRepos := make([]*deb.LocalRepo, context.CollectionFactory().LocalRepoCollection().Len())
|
||||||
i := 0
|
i := 0
|
||||||
context.CollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
|
context.CollectionFactory().LocalRepoCollection().ForEach(func(repo *deb.LocalRepo) error {
|
||||||
if raw {
|
if raw {
|
||||||
@@ -28,7 +31,11 @@ func aptlyRepoList(cmd *commander.Command, args []string) error {
|
|||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
repos[i] = fmt.Sprintf(" * %s (packages: %d)", repo.String(), repo.NumPackages())
|
if jsonFlag {
|
||||||
|
jsonRepos[i] = repo
|
||||||
|
} else {
|
||||||
|
repos[i] = fmt.Sprintf(" * %s (packages: %d)", repo.String(), repo.NumPackages())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
i++
|
i++
|
||||||
return nil
|
return nil
|
||||||
@@ -36,13 +43,22 @@ func aptlyRepoList(cmd *commander.Command, args []string) error {
|
|||||||
|
|
||||||
context.CloseDatabase()
|
context.CloseDatabase()
|
||||||
|
|
||||||
sort.Strings(repos)
|
|
||||||
|
|
||||||
if raw {
|
if raw {
|
||||||
|
sort.Strings(repos)
|
||||||
for _, repo := range repos {
|
for _, repo := range repos {
|
||||||
fmt.Printf("%s\n", repo)
|
fmt.Printf("%s\n", repo)
|
||||||
}
|
}
|
||||||
|
} else if jsonFlag {
|
||||||
|
sort.Slice(jsonRepos, func(i, j int) bool {
|
||||||
|
return jsonRepos[i].Name < jsonRepos[j].Name
|
||||||
|
})
|
||||||
|
if output, e := json.MarshalIndent(jsonRepos, "", " "); e == nil {
|
||||||
|
fmt.Println(string(output))
|
||||||
|
} else {
|
||||||
|
err = e
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
sort.Strings(repos)
|
||||||
if len(repos) > 0 {
|
if len(repos) > 0 {
|
||||||
fmt.Printf("List of local repos:\n")
|
fmt.Printf("List of local repos:\n")
|
||||||
for _, repo := range repos {
|
for _, repo := range repos {
|
||||||
@@ -72,6 +88,7 @@ Example:
|
|||||||
`,
|
`,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd.Flag.Bool("json", false, "display list in JSON format")
|
||||||
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
|
cmd.Flag.Bool("raw", false, "display list in machine-readable format")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|||||||
@@ -1,8 +1,11 @@
|
|||||||
package cmd
|
package cmd
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"sort"
|
||||||
|
|
||||||
|
"github.com/aptly-dev/aptly/deb"
|
||||||
"github.com/smira/commander"
|
"github.com/smira/commander"
|
||||||
"github.com/smira/flag"
|
"github.com/smira/flag"
|
||||||
)
|
)
|
||||||
@@ -16,6 +19,9 @@ func aptlyRepoShow(cmd *commander.Command, args []string) error {
|
|||||||
|
|
||||||
name := args[0]
|
name := args[0]
|
||||||
|
|
||||||
|
jsonFlag := cmd.Flag.Lookup("json").Value.Get().(bool)
|
||||||
|
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
|
||||||
|
|
||||||
repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
|
repo, err := context.CollectionFactory().LocalRepoCollection().ByName(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to show: %s", err)
|
return fmt.Errorf("unable to show: %s", err)
|
||||||
@@ -26,18 +32,42 @@ func aptlyRepoShow(cmd *commander.Command, args []string) error {
|
|||||||
return fmt.Errorf("unable to show: %s", err)
|
return fmt.Errorf("unable to show: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Name: %s\n", repo.Name)
|
if jsonFlag {
|
||||||
fmt.Printf("Comment: %s\n", repo.Comment)
|
// include packages if requested
|
||||||
fmt.Printf("Default Distribution: %s\n", repo.DefaultDistribution)
|
packageList := []string{}
|
||||||
fmt.Printf("Default Component: %s\n", repo.DefaultComponent)
|
if withPackages {
|
||||||
if repo.Uploaders != nil {
|
if repo.RefList() != nil {
|
||||||
fmt.Printf("Uploaders: %s\n", repo.Uploaders)
|
var list *deb.PackageList
|
||||||
}
|
list, err = deb.NewPackageListFromRefList(repo.RefList(), context.CollectionFactory().PackageCollection(), context.Progress())
|
||||||
fmt.Printf("Number of packages: %d\n", repo.NumPackages())
|
if err == nil {
|
||||||
|
packageList = list.Strings() // similar output to /api/{repo}/packages
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
withPackages := context.Flags().Lookup("with-packages").Value.Get().(bool)
|
sort.Strings(packageList)
|
||||||
if withPackages {
|
}
|
||||||
ListPackagesRefList(repo.RefList())
|
|
||||||
|
// merge the repo object with the package list
|
||||||
|
var output []byte
|
||||||
|
if output, err = json.MarshalIndent(struct {
|
||||||
|
*deb.LocalRepo
|
||||||
|
Packages []string
|
||||||
|
}{repo, packageList}, "", " "); err == nil {
|
||||||
|
fmt.Println(string(output))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Printf("Name: %s\n", repo.Name)
|
||||||
|
fmt.Printf("Comment: %s\n", repo.Comment)
|
||||||
|
fmt.Printf("Default Distribution: %s\n", repo.DefaultDistribution)
|
||||||
|
fmt.Printf("Default Component: %s\n", repo.DefaultComponent)
|
||||||
|
if repo.Uploaders != nil {
|
||||||
|
fmt.Printf("Uploaders: %s\n", repo.Uploaders)
|
||||||
|
}
|
||||||
|
fmt.Printf("Number of packages: %d\n", repo.NumPackages())
|
||||||
|
|
||||||
|
if withPackages {
|
||||||
|
ListPackagesRefList(repo.RefList())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return err
|
return err
|
||||||
@@ -57,6 +87,7 @@ ex:
|
|||||||
Flag: *flag.NewFlagSet("aptly-repo-show", flag.ExitOnError),
|
Flag: *flag.NewFlagSet("aptly-repo-show", flag.ExitOnError),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmd.Flag.Bool("json", false, "display record in JSON format")
|
||||||
cmd.Flag.Bool("with-packages", false, "show list of packages")
|
cmd.Flag.Bool("with-packages", false, "show list of packages")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
|||||||
@@ -285,6 +285,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
|
|||||||
;;
|
;;
|
||||||
list)
|
list)
|
||||||
_arguments '1:: :' \
|
_arguments '1:: :' \
|
||||||
|
"-json=[display list in JSON format]:$bool" \
|
||||||
"-raw=[display list in machine−readable format]:$bool"
|
"-raw=[display list in machine−readable format]:$bool"
|
||||||
;;
|
;;
|
||||||
move)
|
move)
|
||||||
@@ -300,6 +301,7 @@ local keyring="*-keyring=[gpg keyring to use when verifying Release file (could
|
|||||||
;;
|
;;
|
||||||
show)
|
show)
|
||||||
_arguments \
|
_arguments \
|
||||||
|
"-json=[display record in JSON format]:$bool" \
|
||||||
"-with-packages=[show list of packages]:$bool" \
|
"-with-packages=[show list of packages]:$bool" \
|
||||||
"(-)2:repo name:$repos"
|
"(-)2:repo name:$repos"
|
||||||
;;
|
;;
|
||||||
|
|||||||
@@ -314,7 +314,11 @@ _aptly()
|
|||||||
;;
|
;;
|
||||||
"list")
|
"list")
|
||||||
if [[ $numargs -eq 0 ]]; then
|
if [[ $numargs -eq 0 ]]; then
|
||||||
COMPREPLY=($(compgen -W "-raw" -- ${cur}))
|
if [[ "$cur" == -* ]]; then
|
||||||
|
COMPREPLY=($(compgen -W "-raw -json" -- ${cur}))
|
||||||
|
else
|
||||||
|
COMPREPLY=($(compgen -W "$(__aptly_repo_list)" -- ${cur}))
|
||||||
|
fi
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
@@ -361,7 +365,7 @@ _aptly()
|
|||||||
"show")
|
"show")
|
||||||
if [[ $numargs -eq 0 ]]; then
|
if [[ $numargs -eq 0 ]]; then
|
||||||
if [[ "$cur" == -* ]]; then
|
if [[ "$cur" == -* ]]; then
|
||||||
COMPREPLY=($(compgen -W "-with-packages" -- ${cur}))
|
COMPREPLY=($(compgen -W "-json -with-packages" -- ${cur}))
|
||||||
else
|
else
|
||||||
COMPREPLY=($(compgen -W "$(__aptly_repo_list)" -- ${cur}))
|
COMPREPLY=($(compgen -W "$(__aptly_repo_list)" -- ${cur}))
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ This checksum is used to create a file tree where each package will reside, with
|
|||||||
|
|
||||||
ex:
|
ex:
|
||||||
|
|
||||||
sha256sum **476e0**cdac6bc757dd2b78bacc1325323b09c45ecb41d4562deec2a1c7c148405 my-package_1.2.3_all.deb
|
sha256sum **476e**0cdac6bc757dd2b78bacc1325323b09c45ecb41d4562deec2a1c7c148405 my-package_1.2.3_all.deb
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
${rootDir}/pool # rootDir defined in aptly.conf
|
${rootDir}/pool # rootDir defined in aptly.conf
|
||||||
@@ -24,12 +24,12 @@ ${rootDir}/pool # rootDir defined in aptly.conf
|
|||||||
|
|
||||||
The following items are concatenated to form the filename under which package is stored.
|
The following items are concatenated to form the filename under which package is stored.
|
||||||
- 5th to the 31st characters of SHA-256 checksum
|
- 5th to the 31st characters of SHA-256 checksum
|
||||||
- "\_" (undescore)
|
- "\_" (undescore)
|
||||||
- filename of uploaded _Debian_ as defined in [Debian package file names](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_debian_package_file_names)
|
- filename of uploaded _Debian_ as defined in [Debian package file names](https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_debian_package_file_names)
|
||||||
|
|
||||||
ex:
|
ex:
|
||||||
|
|
||||||
sha256sum 476e0**cdac6bc757dd2b78bacc13253**23b09c45ecb41d4562deec2a1c7c148405 **my-package_1.2.3_all.deb**
|
sha256sum 476e**0cdac6bc757dd2b78bacc13253**23b09c45ecb41d4562deec2a1c7c148405 **my-package_1.2.3_all.deb**
|
||||||
|
|
||||||
```
|
```
|
||||||
0cdac6bc757dd2b78bacc13253_my-package_1.2.3_all.deb
|
0cdac6bc757dd2b78bacc13253_my-package_1.2.3_all.deb
|
||||||
|
|||||||
1
system/t09_repo/ListRepo5Test_gold
Normal file
1
system/t09_repo/ListRepo5Test_gold
Normal file
@@ -0,0 +1 @@
|
|||||||
|
[]
|
||||||
20
system/t09_repo/ListRepo6Test_gold
Normal file
20
system/t09_repo/ListRepo6Test_gold
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"Name": "repo1",
|
||||||
|
"Comment": "",
|
||||||
|
"DefaultDistribution": "",
|
||||||
|
"DefaultComponent": "main"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "repo2",
|
||||||
|
"Comment": "Cool2",
|
||||||
|
"DefaultDistribution": "",
|
||||||
|
"DefaultComponent": "main"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Name": "repo3",
|
||||||
|
"Comment": "Cool3",
|
||||||
|
"DefaultDistribution": "",
|
||||||
|
"DefaultComponent": "main"
|
||||||
|
}
|
||||||
|
]
|
||||||
7
system/t09_repo/ShowRepo4Test_gold
Normal file
7
system/t09_repo/ShowRepo4Test_gold
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"Name": "repo1",
|
||||||
|
"Comment": "Cool",
|
||||||
|
"DefaultDistribution": "squeeze",
|
||||||
|
"DefaultComponent": "main",
|
||||||
|
"Packages": []
|
||||||
|
}
|
||||||
12
system/t09_repo/ShowRepo5Test_gold
Normal file
12
system/t09_repo/ShowRepo5Test_gold
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"Name": "repo2",
|
||||||
|
"Comment": "Cool",
|
||||||
|
"DefaultDistribution": "wheezy",
|
||||||
|
"DefaultComponent": "contrib",
|
||||||
|
"Packages": [
|
||||||
|
"Pi386 libboost-program-options-dev 1.49.0.1 918d2f433384e378",
|
||||||
|
"Pi386 libboost-program-options-dev 1.62.0.1 7760e62f99c551cb",
|
||||||
|
"Psource pyspi 0.6.1-1.3 3a8b37cbd9a3559e",
|
||||||
|
"Psource pyspi 0.6.1-1.4 f8f1daa806004e89"
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -37,3 +37,20 @@ class ListRepo4Test(BaseTest):
|
|||||||
"aptly repo create repo1",
|
"aptly repo create repo1",
|
||||||
]
|
]
|
||||||
runCmd = "aptly repo list -raw"
|
runCmd = "aptly repo list -raw"
|
||||||
|
|
||||||
|
class ListRepo5Test(BaseTest):
|
||||||
|
"""
|
||||||
|
list local repo: json no repos
|
||||||
|
"""
|
||||||
|
runCmd = "aptly repo list -json"
|
||||||
|
|
||||||
|
class ListRepo6Test(BaseTest):
|
||||||
|
"""
|
||||||
|
list local repo: json normal
|
||||||
|
"""
|
||||||
|
fixtureCmds = [
|
||||||
|
"aptly repo create -comment=Cool3 repo3",
|
||||||
|
"aptly repo create -comment=Cool2 repo2",
|
||||||
|
"aptly repo create repo1",
|
||||||
|
]
|
||||||
|
runCmd = "aptly repo list -json"
|
||||||
|
|||||||
@@ -26,3 +26,22 @@ class ShowRepo3Test(BaseTest):
|
|||||||
"""
|
"""
|
||||||
expectedCode = 1
|
expectedCode = 1
|
||||||
runCmd = "aptly repo show repo3"
|
runCmd = "aptly repo show repo3"
|
||||||
|
|
||||||
|
|
||||||
|
class ShowRepo4Test(BaseTest):
|
||||||
|
"""
|
||||||
|
show local repo: json regular
|
||||||
|
"""
|
||||||
|
fixtureCmds = ["aptly repo create -comment=Cool -distribution=squeeze repo1"]
|
||||||
|
runCmd = "aptly repo show -json repo1"
|
||||||
|
|
||||||
|
|
||||||
|
class ShowRepo5Test(BaseTest):
|
||||||
|
"""
|
||||||
|
show local repo: json -with-packages
|
||||||
|
"""
|
||||||
|
fixtureCmds = [
|
||||||
|
"aptly repo create -comment=Cool -distribution=wheezy -component=contrib repo2",
|
||||||
|
"aptly repo add repo2 ${files}"
|
||||||
|
]
|
||||||
|
runCmd = "aptly repo show -json -with-packages repo2"
|
||||||
|
|||||||
Reference in New Issue
Block a user