Repository: opendatacube/datacube-core

Issue:
dataset archive command needs improvements
### Expected behaviour

when running `dataset archive` without passing in `dataset id`, CLI prompts `no dataset provided`

### Actual behaviour

```
root@23cc2b57c82c:/# datacube dataset archive
Usage:  [OPTIONS] [IDS]...

  Archive datasets

Options:
  -d, --archive-derived  Also recursively archive derived datasets
  --dry-run              Don't archive. Display datasets that would get
                         archived
  --all                  Ignore id list - archive ALL non-archived datasets
                         (warning: may be slow on large databases)
  --help                 Show this message and exit.
root@23cc2b57c82c:/# datacube --version
Open Data Cube core, version 1.8.9
````


### Steps to reproduce the behaviour

run `datacube dataset archive` without passing in `dataset ids`

### Environment information
```
root@23cc2b57c82c:/# datacube --version
Open Data Cube core, version 1.8.9
```


Discussion:

Resolving patch:
diff --git a/datacube/scripts/dataset.py b/datacube/scripts/dataset.py
--- a/datacube/scripts/dataset.py
+++ b/datacube/scripts/dataset.py
@@ -170,6 +170,7 @@ def index_cmd(index, product_names,
               dataset_paths):
 
     if not dataset_paths:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(index_cmd)
         sys.exit(1)
 
@@ -249,6 +250,7 @@ def parse_update_rules(keys_that_can_change):
 @ui.pass_index()
 def update_cmd(index, keys_that_can_change, dry_run, location_policy, dataset_paths):
     if not dataset_paths:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(update_cmd)
         sys.exit(1)
 
@@ -416,6 +418,7 @@ def info_cmd(index: Index, show_sources: bool, show_derived: bool,
              max_depth: int,
              ids: Iterable[str]) -> None:
     if not ids:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(info_cmd)
         sys.exit(1)
 
@@ -486,6 +489,7 @@ def uri_search_cmd(index: Index, paths: List[str], search_mode):
     PATHS may be either file paths or URIs
     """
     if not paths:
+        click.echo('Error: no locations provided\n')
         print_help_msg(uri_search_cmd)
         sys.exit(1)
 
@@ -511,6 +515,7 @@ def uri_search_cmd(index: Index, paths: List[str], search_mode):
 @ui.pass_index()
 def archive_cmd(index: Index, archive_derived: bool, dry_run: bool, all_ds: bool, ids: List[str]):
     if not ids and not all_ds:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(archive_cmd)
         sys.exit(1)
 
@@ -559,6 +564,7 @@ def archive_cmd(index: Index, archive_derived: bool, dry_run: bool, all_ds: bool
 def restore_cmd(index: Index, restore_derived: bool, derived_tolerance_seconds: int,
                 dry_run: bool, all_ds: bool, ids: List[str]):
     if not ids and not all_ds:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(restore_cmd)
         sys.exit(1)
 
@@ -606,6 +612,7 @@ def within_tolerance(dataset):
 @ui.pass_index()
 def purge_cmd(index: Index, dry_run: bool, all_ds: bool, ids: List[str]):
     if not ids and not all_ds:
+        click.echo('Error: no datasets provided\n')
         print_help_msg(purge_cmd)
         sys.exit(1)
 


Test patch: