* feat: add web flag to cs list subcommand
web flag only works with repo flag, because,
currently there only param for listing with repo_id
* feat: add web flag to cs crate subcommand
web flag used for creating codespace through web UI instead of terminal.
web flag cannot be used with display-name, idle-timeout,
or retention retention-period
because there's no option for that in the Web UI
* refactor: extract mutual excusive logic to PreRunE
- changed web flag mutual exclusive logic, using cmdutil
- extract that logic to PreRunE clause in createCmd
- move web flag up to make it close to PreRunE clause (for clarity)
- add new param to newCreateCmd fn to facilitate test logic
- apply new newCreateCmd fn to root.go
* fix: clarify flag desc and error message
- remove 'yet' from error messages that can cause misunderstanding
- clarify list web flag can only be used with repo flag
* fix: skip machine check when we use web flag ...
(..and no machine flag provided)
+ add test for this new case
+ adjust related test cases for this new change.
* refactor: move flag check logic to PreRunE
why: err on PreRunE or RunE will also print help if error happened
+ move web, repo, org, user mutual exclusive logic to PreRunE clause
+ move repo, org, user mutual exclusive logic to PreRunE
+ move limit check flag to PreRunE
+ modify newListCmd fn to facilitate test logic
+ apply new newListCmd to root.go
+ add test cases to check PreRunE clause
- remove mutual exclusive test cases from Test_AppList
* refactor: remove the opts equality checks
* fix: mutually exclusive misfires
because of wrong logic
+ refine test case too
* cleanup:removing useWeb check in fn getMachineName
because it's no longer needed
+ remove redundant test-case
* refactor: remove redundant ifs
* refactor: clarify test name
* re-clarify web flag desc in list.go
* refactor: break long lines, use more idiomatic err
* add test case for nonexistent/wrong machine
* Add --repo flag to commands
* Example of using common args
* Add -r to stop
* Add validation to the add helper
* Skip prompt for single option
* Migrate (mostly) everything to addGetOrChooseCodespaceCommandArgs
* Fix typo in logsCmd
* Use R instead of r
* Update a couple -r usages
* Refactor to codespace_selector
* Clean up selector, apply it in a couple examples
* Use apiClient instead in constructor
* Restore addDeprecatedRepoShorthand
* Finish implementing the commands
* Update existing tests to use the selector
* Add tests for selector
* linter
* Catch case where there's no conflict
* Make the flag persistent for ports
* Add support to stop
When a username option is not provided for the `gh codespace delete`
command, we will use the authenticated user's login as the default to
avoid deleting anyone else's codespace by mistake.
Prior to this change, running `gh codespace delete --org MYORG --all`
would fetch all of the codespacese associated with the org regardless of
user and then only delete the ones associated with the authenticated
user, which would lead to 404 errors when MYORG had codespaces owned by
members other than the authenticated member.
Co-authored-by: Victoria Dye <vdye@github.com>
Co-authored-by: Lessley Dennington <ldennington@github.com>
The REST API for codespaces returns the following schema:
```
"git_status": {
"ahead": 0,
"behind": 0,
"has_unpushed_changes": false,
"has_uncommitted_changes": false,
"ref": "main"
},
```
The CLI was looking for `has_uncommited_changes` in the response instead of `has_uncommitted_changes`, leading to it always reporting a `false` value which could be different than the API response.