CSYNC_STATUS_INVALID_CHARACTERS,
CSYNC_STATUS_INDIVIDUAL_STAT_FAILED,
CSYNC_STATUS_FORBIDDEN,
- CSYNC_STATUS_INDIVIDUAL_TOO_DEEP
+ CSYNC_STATUS_INDIVIDUAL_TOO_DEEP,
+ CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE
};
typedef enum csync_status_codes_e CSYNC_STATUS;
/* Always ignore conflict files, not only via the exclude list */
rc = csync_fnmatch("*_conflict-*", bname, 0);
if (rc == 0) {
- match = CSYNC_FILE_SILENTLY_EXCLUDED;
+ match = CSYNC_FILE_EXCLUDE_CONFLICT;
goto out;
}
}
rc = csync_fnmatch(conflict, path, 0);
if (rc == 0) {
- match = CSYNC_FILE_SILENTLY_EXCLUDED;
+ match = CSYNC_FILE_EXCLUDE_CONFLICT;
SAFE_FREE(conflict);
goto out;
}
CSYNC_FILE_EXCLUDE_TRAILING_SPACE,
CSYNC_FILE_EXCLUDE_LONG_FILENAME,
CSYNC_FILE_EXCLUDE_HIDDEN,
- CSYNC_FILE_EXCLUDE_STAT_FAILED
+ CSYNC_FILE_EXCLUDE_STAT_FAILED,
+ CSYNC_FILE_EXCLUDE_CONFLICT
};
typedef enum csync_exclude_type_e CSYNC_EXCLUDE_TYPE;
st->error_status = CSYNC_STATUS_INDIVIDUAL_EXCLUDE_HIDDEN;
} else if (excluded == CSYNC_FILE_EXCLUDE_STAT_FAILED) {
st->error_status = CSYNC_STATUS_INDIVIDUAL_STAT_FAILED;
+ } else if (excluded == CSYNC_FILE_EXCLUDE_CONFLICT) {
+ st->error_status = CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE;
}
}
}
_syncResult.numRenamedItems(), _syncResult.firstItemRenamed()->_renameTarget);
}
- if (_syncResult.firstConflictItem()) {
- createGuiLog(_syncResult.firstConflictItem()->_file, LogStatusConflict, _syncResult.numConflictItems());
+ if (_syncResult.firstNewConflictItem()) {
+ createGuiLog(_syncResult.firstNewConflictItem()->_file, LogStatusConflict, _syncResult.numNewConflictItems());
}
if (int errorCount = _syncResult.numErrorItems()) {
createGuiLog(_syncResult.firstItemError()->_file, LogStatusError, errorCount);
visible &= (_ui->showIgnores->isChecked() || status != SyncFileItem::FileIgnored);
visible &= (_ui->showWarnings->isChecked()
|| (status != SyncFileItem::SoftError
- && status != SyncFileItem::Conflict
&& status != SyncFileItem::Restoration));
auto folderalias = item->data(2, Qt::UserRole).toString();
case CSYNC_STATUS_INDIVIDUAL_TOO_DEEP:
item->_errorString = tr("Folder hierarchy is too deep");
break;
+ case CSYNC_STATUS_INDIVIDUAL_IS_CONFLICT_FILE:
+ item->_status = SyncFileItem::Conflict;
+ item->_errorString = tr("Conflict: Server version downloaded, local copy renamed and not uploaded.");
+ break;
case CYSNC_STATUS_FILE_LOCKED_OR_OPEN:
item->_errorString = QLatin1String("File locked"); // don't translate, internal use!
break;
SoftError, ///< More like an information
Success, ///< The file was properly synced
- Conflict, ///< The file was properly synced, but a conflict was created
+
+ /** Marks a conflict, old or new.
+ *
+ * With instruction:IGNORE: detected an old unresolved old conflict
+ * With instruction:CONFLICT: a new conflict this sync run
+ */
+ Conflict,
+
FileIgnored, ///< The file is in the ignored list (or blacklisted with no retries left)
Restoration, ///< The file was restored because what should have been done was not allowed
, _numRemovedItems(0)
, _numUpdatedItems(0)
, _numRenamedItems(0)
- , _numConflictItems(0)
+ , _numNewConflictItems(0)
+ , _numOldConflictItems(0)
, _numErrorItems(0)
{
_firstItemError = item;
}
} else if (item->_status == SyncFileItem::Conflict) {
- _numConflictItems++;
- if (!_firstConflictItem) {
- _firstConflictItem = item;
+ if (item->_instruction == CSYNC_INSTRUCTION_CONFLICT) {
+ _numNewConflictItems++;
+ if (!_firstNewConflictItem) {
+ _firstNewConflictItem = item;
+ }
+ } else {
+ _numOldConflictItems++;
}
} else {
if (!item->hasErrorStatus() && item->_status != SyncFileItem::FileIgnored && item->_direction == SyncFileItem::Down) {
int numRemovedItems() const { return _numRemovedItems; }
int numUpdatedItems() const { return _numUpdatedItems; }
int numRenamedItems() const { return _numRenamedItems; }
- int numConflictItems() const { return _numConflictItems; }
+ int numNewConflictItems() const { return _numNewConflictItems; }
+ int numOldConflictItems() const { return _numOldConflictItems; }
int numErrorItems() const { return _numErrorItems; }
const SyncFileItemPtr &firstItemNew() const { return _firstItemNew; }
const SyncFileItemPtr &firstItemDeleted() const { return _firstItemDeleted; }
const SyncFileItemPtr &firstItemUpdated() const { return _firstItemUpdated; }
const SyncFileItemPtr &firstItemRenamed() const { return _firstItemRenamed; }
- const SyncFileItemPtr &firstConflictItem() const { return _firstConflictItem; }
+ const SyncFileItemPtr &firstNewConflictItem() const { return _firstNewConflictItem; }
const SyncFileItemPtr &firstItemError() const { return _firstItemError; }
void processCompletedItem(const SyncFileItemPtr &item);
int _numRemovedItems;
int _numUpdatedItems;
int _numRenamedItems;
- int _numConflictItems;
+ int _numNewConflictItems;
+ int _numOldConflictItems;
int _numErrorItems;
SyncFileItemPtr _firstItemNew;
SyncFileItemPtr _firstItemDeleted;
SyncFileItemPtr _firstItemUpdated;
SyncFileItemPtr _firstItemRenamed;
- SyncFileItemPtr _firstConflictItem;
+ SyncFileItemPtr _firstNewConflictItem;
SyncFileItemPtr _firstItemError;
};
}