diff options
author | Jan Pokorný <jpokorny@redhat.com> | 2015-03-10 19:33:36 +0100 |
---|---|---|
committer | Jan Pokorný <jpokorny@redhat.com> | 2015-03-16 22:39:55 +0100 |
commit | 3df1ebf15beee5d20909bed9fccae1d725f7f282 (patch) | |
tree | ae92803001a92b41bf67f51b85dd8b5f3657bddd /__root__ | |
parent | 19d056812c319805e86ee4f2172951d59f6640ee (diff) | |
download | clufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.tar.gz clufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.tar.xz clufter-3df1ebf15beee5d20909bed9fccae1d725f7f282.zip |
ccs-flatten/resrules.c: make sure raw metadata are handled last
We need this sort of determinism (not needed generally as agents are
supposed to be different, otherwise it would confuse cluster management,
etc.).
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to '__root__')
-rw-r--r-- | __root__/ccs-flatten/resrules.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/__root__/ccs-flatten/resrules.c b/__root__/ccs-flatten/resrules.c index 81a37d6..071bdb1 100644 --- a/__root__/ccs-flatten/resrules.c +++ b/__root__/ccs-flatten/resrules.c @@ -920,7 +920,7 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules, pathT *path1 = &pathbuf1, *path2 = &pathbuf2; struct stat st_buf; glob_t globbuf, *globbuf_ptr = &globbuf; - int i; + size_t i, n; /* jump to "convenient fallback" if there are no _own_ metadata present XXX: this relies on _own_ metadata files ending with @@ -960,11 +960,19 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules, } xmlInitParser(); - while ((de = readdir(dir))) { /* XXX ignoring possible items in globbuf */ - - fn = basename(de->d_name); - if (!fn) - continue; + for (de = readdir(dir) +#ifdef RA_METADATA_EXT + , n = globbuf_ptr ? globbuf_ptr->gl_pathc : 0 +#endif + ; + de ? !!(fn = de->d_name) +#ifdef RA_METADATA_EXT + : strcmp(".", (fn = basename(n ? globbuf_ptr->gl_pathv[--n] : ""))) +#else + : 0 +#endif + ; + fn = NULL /*just invalidate*/, de = readdir(dir)) { /* Ignore files with common backup extension */ if ((strlen(fn) > 0) && (fn[strlen(fn) - 1] == '~')) @@ -985,14 +993,24 @@ load_resource_rules(const char *rpath, resource_rule_t ** rules, } } + snprintf(path, sizeof(path), "%s/%s", rpath, fn); + #ifdef RA_METADATA_EXT /* when only raw metadata accepted */ - if (rawmetadata && (!dot || strcmp(dot + 1, RA_METADATA_EXT))) - continue; + if (rawmetadata) { + if (!dot || strcmp(dot + 1, RA_METADATA_EXT)) + continue; + /* make sure raw metadata are handled last, possibly skip now */ + if (de && globbuf_ptr) { + for (i = globbuf_ptr->gl_pathc; i > 0; i--) + if (!strcmp(globbuf_ptr->gl_pathv[i], path)) + break; + if (i > 0) + continue; /* skip for now, handle later (from globbuf) */ + } + } #endif - snprintf(path, sizeof(path), "%s/%s", rpath, fn); - if (stat(path, &st_buf) < 0) continue; |