Skip to content
This repository has been archived by the owner on Oct 15, 2024. It is now read-only.

Commit

Permalink
kdb-cli: rewrite basename command
Browse files Browse the repository at this point in the history
... and remove cpp implementation
  • Loading branch information
hannes99 committed Sep 23, 2022
1 parent 1e10ff1 commit 38873a0
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 76 deletions.
65 changes: 65 additions & 0 deletions src/tools/kdb/basename.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
/**
* @file
*
* @brief Implementation of kdb basename command
*
* @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
*/

#include <basename.h>
#include <command.h>

#include <kdb.h>
#include <kdbassert.h>
#include <kdbease.h>
#include <kdberrors.h>
#include <stdio.h>
#include <string.h>

#define COMMAND_NAME "basename"

#define GET_OPTION_KEY(options, name) GET_OPT_KEY (options, COMMAND_BASE_KEY (COMMAND_NAME) "/" name)
#define GET_OPTION(options, name) GET_OPT (options, COMMAND_BASE_KEY (COMMAND_NAME) "/" name)

void addBasenameSpec (KeySet * spec)
{
ksAppendKey (spec, keyNew (COMMAND_SPEC_KEY (COMMAND_NAME), KEY_META, "description", "Get the basename of a key.",
KEY_META, "command", COMMAND_NAME, KEY_END));
ksAppendKey (spec, keyNew (COMMAND_SPEC_KEY (COMMAND_NAME) "/name", KEY_META, "description", "The name of the key", KEY_META,
"args", "indexed", KEY_META, "args/index", "0", KEY_END));

ADD_BASIC_OPTIONS (spec, COMMAND_SPEC_KEY (COMMAND_NAME))
}

int execBasename (KeySet * options, Key * errorKey)
{
bool verbose = false;
Key * tmp = GET_OPTION_KEY (options, "verbose");
if (tmp != NULL)
{
elektraKeyToBoolean (GET_OPTION_KEY (options, "verbose"), &verbose);
}

const char * rawName = GET_OPTION (options, "name");
bool resolved = false;
const char * name = expandKeyName (options, rawName, &resolved);
if (name == NULL)
{
ELEKTRA_SET_VALIDATION_SEMANTIC_ERRORF (errorKey, "could not resolve bookmark in '%s'", rawName);
return -1;
}

if (verbose && resolved)
{
printf ("resolved bookmark: \'%s\' -> \'%s\'\n", rawName, name);
}

Key * key = keyNew (name, KEY_END);
if (key == NULL)
{
ELEKTRA_SET_VALIDATION_SEMANTIC_ERRORF (errorKey, "'%s' is not avlid key name.", name);
return 1;
}
printf ("%s", keyBaseName (key));
return 0;
}
27 changes: 0 additions & 27 deletions src/tools/kdb/basename.cpp

This file was deleted.

33 changes: 33 additions & 0 deletions src/tools/kdb/basename.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
/**
* @file
*
* @brief Header for basename command
*
* @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
*/

#ifndef ELEKTRA_KDB_BASENAME_H
#define ELEKTRA_KDB_BASENAME_H

#include <kdb.h>

/**
* Adds options specification of basename command to @spec
*
* @param spec the base spec where the commands spec should be added
*/
void addBasenameSpec (KeySet * spec);

/**
* Executes the basename command
*
* @param options cli options and arguments as specified in @addBasenameSpec()
* @param errorKey key where errors and warnings should be saved
*
* @retval 0 ls command ran without errors
* @retval 1 errors occurred, keyGetMeta (errorKey, "error/reason") for info
*
*/
int execBasename (KeySet * options, Key * errorKey);

#endif // ELEKTRA_KDB_BASENAME_H
47 changes: 0 additions & 47 deletions src/tools/kdb/basename.hpp

This file was deleted.

2 changes: 0 additions & 2 deletions src/tools/kdb/factory.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
#include <external.hpp>

// TODO: to add a new command, 1.) include your header here
#include <basename.hpp>
#include <cache.hpp>
#include <cmerge.hpp>
#include <complete.hpp>
Expand Down Expand Up @@ -124,7 +123,6 @@ class Factory
m_factory.insert (std::make_pair ("list-commands", std::make_shared<Cnstancer<ListCommandsCommand>> ()));
m_factory.insert (std::make_pair ("gen", std::make_shared<Cnstancer<GenCommand>> ()));
m_factory.insert (std::make_pair ("namespace", std::make_shared<Cnstancer<NamespaceCommand>> ()));
m_factory.insert (std::make_pair ("basename", std::make_shared<Cnstancer<BasenameCommand>> ()));
m_factory.insert (std::make_pair ("dirname", std::make_shared<Cnstancer<DirnameCommand>> ()));
}

Expand Down
2 changes: 2 additions & 0 deletions src/tools/kdb/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* @copyright BSD License (see LICENSE.md or https://www.libelektra.org)
*/

#include <basename.h>
#include <get.h>
#include <ls.h>

Expand All @@ -22,6 +23,7 @@
extern char ** environ;

command subcommands[] = {
{ "basename", addBasenameSpec, execBasename },
{ "get", addGetSpec, execGet },
{ "ls", addLsSpec, execLs },
};
Expand Down

0 comments on commit 38873a0

Please sign in to comment.