commit d7e3ae4b74ef30e5a3ea255099a89b07697fb7cc
Author: Oswald Buddenhagen <o...@users.sf.net>
Date:   Tue Jan 11 16:16:25 2022 +0100

    report location of overlapping operations

 src/config.c | 24 +++++++++++++++++++-----
 src/config.h |  2 +-
 src/main.c   |  2 +-
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/src/config.c b/src/config.c
index 036ad41d..fd51998e 100644
--- a/src/config.c
+++ b/src/config.c
@@ -286,9 +286,23 @@ getcline( conffile_t *cfile )
        return 0;
 }
 
+static const char *
+channel_str( const char *chan_name )
+{
+       if (!chan_name)
+               return "on the command line";
+
+       if (!*chan_name)
+               return "in global config section";
+
+       static char buf[100];
+       nfsnprintf( buf, sizeof(buf), "in Channel '%s'", chan_name );
+       return buf;
+}
+
 /* XXX - this does not detect None conflicts ... */
 int
-merge_ops( int cops, int ops[] )
+merge_ops( int cops, int ops[], const char *chan_name )
 {
        int aops, op;
        uint i;
@@ -298,7 +312,7 @@ merge_ops( int cops, int ops[] )
                if (aops & OP_MASK_TYPE) {  // PullNew, etc.
                        if (aops & cops & OP_MASK_TYPE) {  // Overlapping New, 
etc.
                          cfl:
-                               error( "Conflicting Sync args specified.\n" );
+                               error( "Conflicting Sync args specified %s.\n", 
channel_str( chan_name ) );
                                return 1;
                        }
                        // Mix in non-overlapping Push/Pull or New, etc.
@@ -330,7 +344,7 @@ merge_ops( int cops, int ops[] )
                op = boxOps[i].op;
                if (ops[F] & (op * (XOP_HAVE_EXPUNGE / OP_EXPUNGE))) {
                        if (aops & cops & op) {
-                               error( "Conflicting %s args specified.\n", 
boxOps[i].name );
+                               error( "Conflicting %s args specified %s.\n", 
boxOps[i].name, channel_str( chan_name ) );
                                return 1;
                        }
                        ops[F] |= cops & op;
@@ -485,7 +499,7 @@ load_config( const char *where )
                        } else if (!channel->stores[N]) {
                                error( "channel '%s' refers to no near side 
store\n", channel->name );
                                cfile.err = 1;
-                       } else if (merge_ops( cops, channel->ops )) {
+                       } else if (merge_ops( cops, channel->ops, channel->name 
)) {
                                cfile.err = 1;
                        } else {
                                if (max_size != UINT_MAX) {
@@ -567,7 +581,7 @@ load_config( const char *where )
        fclose (cfile.fp);
        if (cfile.ms_warn)
                warn( "Notice: Master/Slave are deprecated; use Far/Near 
instead.\n" );
-       cfile.err |= merge_ops( gcops, global_conf.ops );
+       cfile.err |= merge_ops( gcops, global_conf.ops, "" );
        if (!global_conf.sync_state) {
                const char *state_home = getenv( "XDG_STATE_HOME" );
                if (state_home)
diff --git a/src/config.h b/src/config.h
index bc255114..94319c83 100644
--- a/src/config.h
+++ b/src/config.h
@@ -35,7 +35,7 @@ char parse_bool( conffile_t *cfile );
 int parse_int( conffile_t *cfile );
 uint parse_size( conffile_t *cfile );
 int getcline( conffile_t *cfile );
-int merge_ops( int cops, int ops[] );
+int merge_ops( int cops, int ops[], const char *chan_name );
 int load_config( const char *filename );
 
 #endif
diff --git a/src/main.c b/src/main.c
index 0196db3c..ffcae888 100644
--- a/src/main.c
+++ b/src/main.c
@@ -468,7 +468,7 @@ main( int argc, char **argv )
        }
 #endif
 
-       if (merge_ops( cops, mvars->ops ))
+       if (merge_ops( cops, mvars->ops, NULL ))
                return 1;
 
        if (load_config( config ))


_______________________________________________
isync-devel mailing list
isync-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/isync-devel

Reply via email to