Skip to content

Commit 4a8ec6e

Browse files
committed
Merge branch 'package-version-get'
2 parents c955862 + fdd120c commit 4a8ec6e

File tree

3 files changed

+141
-1
lines changed

3 files changed

+141
-1
lines changed

command/package.go

Lines changed: 113 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"net/textproto"
1111
"os"
1212
"path/filepath"
13+
"strconv"
1314
"strings"
1415
"time"
1516

@@ -49,6 +50,9 @@ func init() {
4950
packageVersionReleaseCmd.Flags().StringP("version-id", "v", "", "Package Version ID (required)")
5051
packageVersionReleaseCmd.MarkFlagRequired("version-id")
5152

53+
packageVersionGetCmd.Flags().StringP("version-id", "v", "", "Package Version ID (required)")
54+
packageVersionGetCmd.MarkFlagRequired("version-id")
55+
5256
packageVersionListCmd.Flags().StringP("package-id", "i", "", "Package ID (optional, filter by package)")
5357
packageVersionListCmd.Flags().StringP("namespace", "", "", "Package namespace (alternative to --package-id)")
5458
packageVersionListCmd.Flags().BoolP("released", "r", false, "Show only released versions")
@@ -60,6 +64,7 @@ func init() {
6064
packageCmd.AddCommand(packageInstalledCmd)
6165
packageVersionCmd.AddCommand(packageVersionCreateCmd)
6266
packageVersionCmd.AddCommand(packageVersionReleaseCmd)
67+
packageVersionCmd.AddCommand(packageVersionGetCmd)
6368
packageVersionCmd.AddCommand(packageVersionListCmd)
6469
packageCmd.AddCommand(packageInstallCmd)
6570
packageCmd.AddCommand(packageUninstallCmd)
@@ -181,6 +186,16 @@ var packageVersionReleaseCmd = &cobra.Command{
181186
},
182187
}
183188

189+
var packageVersionGetCmd = &cobra.Command{
190+
Use: "get",
191+
Short: "Show package version details",
192+
Args: cobra.NoArgs,
193+
Run: func(cmd *cobra.Command, args []string) {
194+
versionId, _ := cmd.Flags().GetString("version-id")
195+
runGetPackageVersion(versionId)
196+
},
197+
}
198+
184199
var packageVersionListCmd = &cobra.Command{
185200
Use: "list",
186201
Short: "List package versions",
@@ -190,7 +205,6 @@ var packageVersionListCmd = &cobra.Command{
190205
namespace, _ := cmd.Flags().GetString("namespace")
191206
releasedOnly, _ := cmd.Flags().GetBool("released")
192207
verbose, _ := cmd.Flags().GetBool("verbose")
193-
194208
runListPackageVersions(packageId, namespace, releasedOnly, verbose)
195209
},
196210
}
@@ -874,6 +888,104 @@ func runReleasePackageVersion(versionId string) {
874888
fmt.Printf("Package version released successfully: %s\n", versionId)
875889
}
876890

891+
func runGetPackageVersion(versionId string) {
892+
if versionId == "" {
893+
ErrorAndExit("Package version ID is required")
894+
}
895+
896+
query := fmt.Sprintf("SELECT Id, Name, Description, Tag, MajorVersion, MinorVersion, PatchVersion, BuildNumber, Package2Id, Package2.Name, Package2.NamespacePrefix, SubscriberPackageVersionId, AncestorId, IsReleased, CreatedDate, LastModifiedDate FROM Package2Version WHERE Id = '%s'", versionId)
897+
898+
result, err := force.Query(query, func(options *lib.QueryOptions) {
899+
options.IsTooling = true
900+
})
901+
if err != nil {
902+
ErrorAndExit("Failed to query package version: " + err.Error())
903+
}
904+
if len(result.Records) == 0 {
905+
ErrorAndExit(fmt.Sprintf("No package version found with ID: %s", versionId))
906+
}
907+
908+
record := result.Records[0]
909+
910+
fmt.Printf("Package Version Details:\n")
911+
fmt.Printf(" ID: %s\n", getStringValue(record, "Id"))
912+
fmt.Printf(" Name: %s\n", getStringValue(record, "Name"))
913+
fmt.Printf(" Description: %s\n", getStringValue(record, "Description"))
914+
fmt.Printf(" Tag: %s\n", getStringValue(record, "Tag"))
915+
major := getIntValue(record, "MajorVersion")
916+
minor := getIntValue(record, "MinorVersion")
917+
patch := getIntValue(record, "PatchVersion")
918+
build := getIntValue(record, "BuildNumber")
919+
920+
fmt.Printf(" Version Number: %d.%d.%d.%d\n", major, minor, patch, build)
921+
fmt.Printf(" Major Version: %d\n", major)
922+
fmt.Printf(" Minor Version: %d\n", minor)
923+
fmt.Printf(" Patch Version: %d\n", patch)
924+
fmt.Printf(" Build Number: %d\n", build)
925+
926+
if pkg, ok := record["Package2"].(map[string]interface{}); ok && pkg != nil {
927+
fmt.Printf(" Package2 ID: %s\n", getStringValue(record, "Package2Id"))
928+
fmt.Printf(" Package2 Name: %s\n", getStringValue(pkg, "Name"))
929+
fmt.Printf(" Package2 Namespace: %s\n", getStringValue(pkg, "NamespacePrefix"))
930+
} else {
931+
fmt.Printf(" Package2 ID: %s\n", getStringValue(record, "Package2Id"))
932+
}
933+
934+
fmt.Printf(" Subscriber Package Version ID: %s\n", getStringValue(record, "SubscriberPackageVersionId"))
935+
fmt.Printf(" Ancestor ID: %s\n", getStringValue(record, "AncestorId"))
936+
fmt.Printf(" Is Released: %t\n", getBoolValue(record, "IsReleased"))
937+
fmt.Printf(" Created Date: %s\n", getStringValue(record, "CreatedDate"))
938+
fmt.Printf(" Last Modified Date: %s\n", getStringValue(record, "LastModifiedDate"))
939+
}
940+
941+
func getStringValue(record map[string]interface{}, key string) string {
942+
if value, ok := record[key]; ok && value != nil {
943+
switch v := value.(type) {
944+
case string:
945+
return v
946+
case fmt.Stringer:
947+
return v.String()
948+
default:
949+
return fmt.Sprintf("%v", v)
950+
}
951+
}
952+
return ""
953+
}
954+
955+
func getIntValue(record map[string]interface{}, key string) int {
956+
if value, ok := record[key]; ok && value != nil {
957+
switch v := value.(type) {
958+
case float64:
959+
return int(v)
960+
case int:
961+
return v
962+
case int32:
963+
return int(v)
964+
case int64:
965+
return int(v)
966+
case string:
967+
if parsed, err := strconv.Atoi(v); err == nil {
968+
return parsed
969+
}
970+
}
971+
}
972+
return 0
973+
}
974+
975+
func getBoolValue(record map[string]interface{}, key string) bool {
976+
if value, ok := record[key]; ok && value != nil {
977+
if b, ok := value.(bool); ok {
978+
return b
979+
}
980+
if s, ok := value.(string); ok {
981+
if parsed, err := strconv.ParseBool(s); err == nil {
982+
return parsed
983+
}
984+
}
985+
}
986+
return false
987+
}
988+
877989
func runListPackageVersions(packageId string, namespace string, releasedOnly bool, verbose bool) {
878990
if namespace != "" {
879991
query := fmt.Sprintf("SELECT Id, Name FROM Package2 WHERE NamespacePrefix = '%s'", namespace)

docs/force_package_version.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Manage package versions
2020

2121
* [force package](force_package.md) - Manage installed packages
2222
* [force package version create](force_package_version_create.md) - Create a new package version
23+
* [force package version get](force_package_version_get.md) - Show package version details
2324
* [force package version list](force_package_version_list.md) - List package versions
2425
* [force package version release](force_package_version_release.md) - Release a package version
2526

docs/force_package_version_get.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
## force package version get
2+
3+
Show package version details
4+
5+
```
6+
force package version get [flags]
7+
```
8+
9+
### Options
10+
11+
```
12+
-h, --help help for get
13+
-v, --version-id string Package Version ID (required)
14+
```
15+
16+
### Options inherited from parent commands
17+
18+
```
19+
-a, --account username account username to use
20+
-V, --apiversion string API version to use
21+
--config string config directory to use (default: .force)
22+
```
23+
24+
### SEE ALSO
25+
26+
* [force package version](force_package_version.md) - Manage package versions
27+

0 commit comments

Comments
 (0)