mirror of
https://github.com/systemd/systemd.git
synced 2025-01-25 10:04:04 +03:00
analyze: split out "unit-files" verb
This commit is contained in:
parent
36258fbe74
commit
0c2d69df7f
52
src/analyze/analyze-unit-files.c
Normal file
52
src/analyze/analyze-unit-files.c
Normal file
@ -0,0 +1,52 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include "analyze.h"
|
||||
#include "analyze-unit-files.h"
|
||||
#include "path-lookup.h"
|
||||
#include "strv.h"
|
||||
|
||||
static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
|
||||
char **s;
|
||||
|
||||
STRV_FOREACH(s, strv)
|
||||
if (strv_fnmatch_or_empty(patterns, *s, flags))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
int do_unit_files(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_hashmap_free_ Hashmap *unit_ids = NULL, *unit_names = NULL;
|
||||
_cleanup_(lookup_paths_free) LookupPaths lp = {};
|
||||
char **patterns = strv_skip(argv, 1);
|
||||
const char *k, *dst;
|
||||
char **v;
|
||||
int r;
|
||||
|
||||
r = lookup_paths_init(&lp, arg_scope, 0, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "lookup_paths_init() failed: %m");
|
||||
|
||||
r = unit_file_build_name_map(&lp, NULL, &unit_ids, &unit_names, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "unit_file_build_name_map() failed: %m");
|
||||
|
||||
HASHMAP_FOREACH_KEY(dst, k, unit_ids) {
|
||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||
!strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
|
||||
continue;
|
||||
|
||||
printf("ids: %s → %s\n", k, dst);
|
||||
}
|
||||
|
||||
HASHMAP_FOREACH_KEY(v, k, unit_names) {
|
||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||
!strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
|
||||
continue;
|
||||
|
||||
_cleanup_free_ char *j = strv_join(v, ", ");
|
||||
printf("aliases: %s ← %s\n", k, j);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
4
src/analyze/analyze-unit-files.h
Normal file
4
src/analyze/analyze-unit-files.h
Normal file
@ -0,0 +1,4 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
#pragma once
|
||||
|
||||
int do_unit_files(int argc, char *argv[], void *userdata);
|
@ -31,6 +31,7 @@
|
||||
#include "analyze-time-data.h"
|
||||
#include "analyze-timespan.h"
|
||||
#include "analyze-timestamp.h"
|
||||
#include "analyze-unit-files.h"
|
||||
#include "analyze-unit-paths.h"
|
||||
#include "analyze-verify.h"
|
||||
#include "bus-error.h"
|
||||
@ -437,52 +438,6 @@ static int analyze_time(int argc, char *argv[], void *userdata) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) {
|
||||
char **s;
|
||||
STRV_FOREACH(s, strv)
|
||||
if (strv_fnmatch_or_empty(patterns, *s, flags))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int do_unit_files(int argc, char *argv[], void *userdata) {
|
||||
_cleanup_(lookup_paths_free) LookupPaths lp = {};
|
||||
_cleanup_hashmap_free_ Hashmap *unit_ids = NULL;
|
||||
_cleanup_hashmap_free_ Hashmap *unit_names = NULL;
|
||||
char **patterns = strv_skip(argv, 1);
|
||||
const char *k, *dst;
|
||||
char **v;
|
||||
int r;
|
||||
|
||||
r = lookup_paths_init(&lp, arg_scope, 0, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "lookup_paths_init() failed: %m");
|
||||
|
||||
r = unit_file_build_name_map(&lp, NULL, &unit_ids, &unit_names, NULL);
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "unit_file_build_name_map() failed: %m");
|
||||
|
||||
HASHMAP_FOREACH_KEY(dst, k, unit_ids) {
|
||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||
!strv_fnmatch_or_empty(patterns, dst, FNM_NOESCAPE))
|
||||
continue;
|
||||
|
||||
printf("ids: %s → %s\n", k, dst);
|
||||
}
|
||||
|
||||
HASHMAP_FOREACH_KEY(v, k, unit_names) {
|
||||
if (!strv_fnmatch_or_empty(patterns, k, FNM_NOESCAPE) &&
|
||||
!strv_fnmatch_strv_or_empty(patterns, v, FNM_NOESCAPE))
|
||||
continue;
|
||||
|
||||
_cleanup_free_ char *j = strv_join(v, ", ");
|
||||
printf("aliases: %s ← %s\n", k, j);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void time_parsing_hint(const char *p, bool calendar, bool timestamp, bool timespan) {
|
||||
if (calendar && calendar_spec_from_string(p, NULL) >= 0)
|
||||
log_notice("Hint: this expression is a valid calendar specification. "
|
||||
|
@ -37,6 +37,8 @@ systemd_analyze_sources = files('''
|
||||
analyze-timespan.h
|
||||
analyze-timestamp.c
|
||||
analyze-timestamp.h
|
||||
analyze-unit-files.c
|
||||
analyze-unit-files.h
|
||||
analyze-unit-paths.c
|
||||
analyze-unit-paths.h
|
||||
analyze-verify.c
|
||||
|
Loading…
x
Reference in New Issue
Block a user