dav/scfg.h

Sun, 17 Dec 2023 14:25:34 +0100

author
Mike Becker <universe@uap-core.de>
date
Sun, 17 Dec 2023 14:25:34 +0100
changeset 797
edbb20b1438d
parent 789
378b5ab86f77
permissions
-rw-r--r--

[Makefile] fix missing rules preventing dry-runs

We have to support dry-runs, because many IDEs are using
dry-runs to collect build information.

Some rules have dependencies that expect certain files or
directories to be just present. We added respective build
rules which invoke the test program. This way, the behavior
when running make normally is exactly the same, but dry-runs
are also not failing now.

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2019 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef SCFG_H
#define	SCFG_H

#include <cx/string.h>
#include <stdbool.h>
#include <libidav/webdav.h>

#ifdef _WIN32
#include "pcreposix.h"
#else
#include <regex.h>
#endif

#include "db.h"
#include "tags.h"

#ifdef	__cplusplus
extern "C" {
#endif

#define SYNC_CMD_PULL    1
#define SYNC_CMD_PUSH    2
#define SYNC_CMD_ARCHIVE 4
#define SYNC_CMD_RESTORE 8
    
#define SYNC_SYMLINK_SYNC          1
#define SYNC_SYMLINK_IGNORE_EXTERN 2
#define SYNC_SYMLINK_IGNORE_INTERN 4
    
#define DEFAULT_TAG_XATTR "tags"
#define MACOS_TAG_XATTR "com.apple.metadata:_kMDItemUserTags"
    
#define VERSIONING_DEFAULT_PATH "/.dav-version-history"
    
#define SYNC_SYMLINK(dir) \
    (((dir)->symlink & SYNC_SYMLINK_SYNC) == SYNC_SYMLINK_SYNC)
    
#define SYNC_HASHING(dir) ((dir)->hashing)
#define SYNC_STORE_HASH(dir) ((dir)->store_hash)
    
typedef struct TagConfig   TagConfig;
typedef struct Versioning  Versioning;
typedef struct SplitConfig SplitConfig;
typedef struct Filter      Filter;

enum PushStrategy {
    PUSH_STRATEGY_METADATA = 0,
    PUSH_STRATEGY_HASH
};
typedef enum PushStrategy PushStrategy;

struct Filter {
    CxList *include;
    CxList *exclude;
    CxList *tags;
};

typedef struct SyncDirectory {
    char *name;
    char *path;
    char *trash;
    char *collection;
    char *repository;
    char *database;
    char *logfile;
    TagConfig *tagconfig;
    Versioning *versioning;
    Filter filter;
    CxList *splitconfig;
    uint32_t metadata;
    int max_retry;
    int allow_cmd;
    uint32_t symlink;
    time_t lock_timeout;
    PushStrategy push_strategy;
    bool backuppull;
    bool lockpull;
    bool lockpush;
    bool hashing;
    bool store_hash;
    bool pull_skip_hashing;
    uint32_t db_settings;
} SyncDirectory;

struct SplitConfig {
    /*
     * resource filter or NULL
     */
    Filter *filter;
    /*
     * minimum file size for activating file splitting
     * a value of -1 means no size restriction
     */
    int64_t minsize;
    /*
     * split files into blocks with this size
     */
    size_t blocksize;
};


enum TagFormat {
    TAG_FORMAT_TEXT = 0,
    TAG_FORMAT_CSV,
    TAG_FORMAT_XML,
    TAG_FORMAT_MACOS,
    TAG_FORMAT_UNKNOWN
};
typedef enum TagFormat TagFormat;

enum TagStore {
    TAG_STORE_XATTR = 0,
    TAG_STORE_UNKNOWN
};
typedef enum TagStore TagStore;

enum TagConflict {
    TAG_NO_CONFLICT = 0,
    TAG_KEEP_LOCAL,
    TAG_KEEP_REMOTE,
    TAG_MERGE
};
typedef enum TagConflict TagConflict;

struct TagConfig {
    TagStore store;
    TagFormat local_format;
    TagFormat server_format;
    char *xattr_name;
    TagConflict conflict;
    bool detect_changes;
};

enum VersioningType {
    VERSIONING_SIMPLE = 0,
    VERSIONING_DELTAV
};
typedef enum VersioningType VersioningType;

struct Versioning {
    VersioningType type;
    char *collection;
    bool always;
};

int load_sync_config();

CxIterator scfg_directory_iterator();
SyncDirectory* scfg_get_dir(const char *name);

int scfg_check_dir(SyncDirectory *dir);

char* scfg_create_path(const char *cfg);

int add_directory(SyncDirectory *dir);

char* generate_db_name(const char *basename);

void free_filter(Filter filter);

void free_sync_config();


#ifdef	__cplusplus
}
#endif

#endif	/* SCFG_H */

mercurial