Mark DATASETS to be discarded or discard associated data.

    Without any options the specified datasets are marked to be
    discarded via `marv cleanup --discarded`. Use `marv undiscard` to
    undo this operation.

    Otherwise, selected data associated with the specified datasets is
    discarded right away.

def marvcli_discard(datasets, all_nodes, nodes, tags, comments, confirm):
    """Mark DATASETS to be discarded or discard associated data.

    Without any options the specified datasets are marked to be
    discarded via `marv cleanup --discarded`. Use `marv undiscard` to
    undo this operation.

    Otherwise, selected data associated with the specified datasets is
    discarded right away.
    """
    mark_discarded = not any([all_nodes, nodes, tags, comments])

    site = create_app().site
    setids = parse_setids(datasets)

    if tags or comments:
        if confirm:
            msg = ' and '.join(filter(None, ['tags' if tags else None,
                                             'comments' if comments else None]))
            click.echo('About to delete {}'.format(msg))
            click.confirm('This cannot be undone. Do you want to continue?', abort=True)

        ids = [x[0] for x in db.session.query(Dataset.id).filter(Dataset.setid.in_(setids))]
        if tags:
            where = dataset_tag.c.dataset_id.in_(ids)
            stmt = dataset_tag.delete().where(where)
            db.session.execute(stmt)

        if comments:
            comment_table = Comment.__table__
            where = comment_table.c.dataset_id.in_(ids)
            stmt = comment_table.delete().where(where)
            db.session.execute(stmt)

    if nodes or all_nodes:
        storedir = site.config.marv.storedir
        for setid in setids:
            setdir = os.path.join(storedir, setid)
        # TODO: see where we are getting with dep tree tables

    if mark_discarded:
        dataset = Dataset.__table__
        stmt = dataset.update()\
                      .where(dataset.c.setid.in_(setids))\
                      .values(discarded=True)
        db.session.execute(stmt)

    db.session.commit()