@@ -33,6 +33,17 @@ text_files_match() {
3333 diff -u <( tr -d ' \r' < " ${source_file} " ) <( tr -d ' \r' < " ${packaged_file} " ) > /dev/null
3434}
3535
36+ env_truthy () {
37+ case " $( printf ' %s' " ${1:- 0} " | tr ' [:upper:]' ' [:lower:]' ) " in
38+ 1|true|yes|on)
39+ return 0
40+ ;;
41+ * )
42+ return 1
43+ ;;
44+ esac
45+ }
46+
3647if [[ ! -f " ${PLG_FILE} " ]]; then
3748 echo " ERROR: Missing plugin manifest: ${PLG_FILE} " >&2
3849 exit 1
@@ -733,103 +744,105 @@ tar -xOf "${ARCHIVE_FILE}" "${ARCHIVE_SERVER_LIB_DIAGNOSTICS_PATH}" > "${TMP_ARC
733744tar -xOf " ${ARCHIVE_FILE} " " ${ARCHIVE_SERVER_APPLY_FOLDER_SETTINGS_PATH} " > " ${TMP_ARCHIVE_SERVER_APPLY_FOLDER_SETTINGS} "
734745tar -xOf " ${ARCHIVE_FILE} " " ${ARCHIVE_SERVER_UPDATE_NOTES_PATH} " > " ${TMP_ARCHIVE_SERVER_UPDATE_NOTES} "
735746
736- if ! grep -q ' fv-force-left-v2 marker' " ${TMP_ARCHIVE_FOLDER_JS} " ; then
737- echo " ERROR: Packaged folder.js is missing the alignment regression marker comment." >&2
738- exit 1
739- fi
747+ if ! env_truthy " ${FVPLUS_ALLOW_PACKAGED_SOURCE_DRIFT:- 0} " ; then
748+ if ! grep -q ' fv-force-left-v2 marker' " ${TMP_ARCHIVE_FOLDER_JS} " ; then
749+ echo " ERROR: Packaged folder.js is missing the alignment regression marker comment." >&2
750+ exit 1
751+ fi
740752
741- if ! text_files_match " ${SOURCE_FOLDER_JS} " " ${TMP_ARCHIVE_FOLDER_JS} " ; then
742- fail_packaged_source_mismatch " Packaged folder.js does not match source folder.js."
743- fi
753+ if ! text_files_match " ${SOURCE_FOLDER_JS} " " ${TMP_ARCHIVE_FOLDER_JS} " ; then
754+ fail_packaged_source_mismatch " Packaged folder.js does not match source folder.js."
755+ fi
744756
745- if ! text_files_match " ${SOURCE_DOCKER_RUNTIME_HIERARCHY_JS} " " ${TMP_ARCHIVE_DOCKER_RUNTIME_HIERARCHY_JS} " ; then
746- fail_packaged_source_mismatch " Packaged docker.runtime.hierarchy.js does not match source docker.runtime.hierarchy.js."
747- fi
757+ if ! text_files_match " ${SOURCE_DOCKER_RUNTIME_HIERARCHY_JS} " " ${TMP_ARCHIVE_DOCKER_RUNTIME_HIERARCHY_JS} " ; then
758+ fail_packaged_source_mismatch " Packaged docker.runtime.hierarchy.js does not match source docker.runtime.hierarchy.js."
759+ fi
748760
749- if ! text_files_match " ${SOURCE_DOCKER_RUNTIME_ACTIONS_JS} " " ${TMP_ARCHIVE_DOCKER_RUNTIME_ACTIONS_JS} " ; then
750- fail_packaged_source_mismatch " Packaged docker.runtime.actions.js does not match source docker.runtime.actions.js."
751- fi
752- if ! text_files_match " ${SOURCE_FOLDER_SETTINGS_TRANSFER_JS} " " ${TMP_ARCHIVE_FOLDER_SETTINGS_TRANSFER_JS} " ; then
753- fail_packaged_source_mismatch " Packaged folder.settings-transfer.js does not match source folder.settings-transfer.js."
754- fi
761+ if ! text_files_match " ${SOURCE_DOCKER_RUNTIME_ACTIONS_JS} " " ${TMP_ARCHIVE_DOCKER_RUNTIME_ACTIONS_JS} " ; then
762+ fail_packaged_source_mismatch " Packaged docker.runtime.actions.js does not match source docker.runtime.actions.js."
763+ fi
764+ if ! text_files_match " ${SOURCE_FOLDER_SETTINGS_TRANSFER_JS} " " ${TMP_ARCHIVE_FOLDER_SETTINGS_TRANSFER_JS} " ; then
765+ fail_packaged_source_mismatch " Packaged folder.settings-transfer.js does not match source folder.settings-transfer.js."
766+ fi
755767
756- if ! text_files_match " ${SOURCE_FOLDER_CSS} " " ${TMP_ARCHIVE_FOLDER_CSS} " ; then
757- fail_packaged_source_mismatch " Packaged folder.css does not match source folder.css."
758- fi
759- if ! text_files_match " ${SOURCE_SETTINGS_JS} " " ${TMP_ARCHIVE_SETTINGS_JS} " ; then
760- fail_packaged_source_mismatch " Packaged folderviewplus.js does not match source folderviewplus.js."
761- fi
762- if ! text_files_match " ${SOURCE_SETTINGS_DIRTY_JS} " " ${TMP_ARCHIVE_SETTINGS_DIRTY_JS} " ; then
763- fail_packaged_source_mismatch " Packaged folderviewplus.dirty.js does not match source folderviewplus.dirty.js."
764- fi
765- if ! text_files_match " ${SOURCE_SETTINGS_RUNTIME_PARITY_JS} " " ${TMP_ARCHIVE_SETTINGS_RUNTIME_PARITY_JS} " ; then
766- fail_packaged_source_mismatch " Packaged folderviewplus.runtime-parity.js does not match source folderviewplus.runtime-parity.js."
767- fi
768- if ! text_files_match " ${SOURCE_SETTINGS_SECTIONS_JS} " " ${TMP_ARCHIVE_SETTINGS_SECTIONS_JS} " ; then
769- fail_packaged_source_mismatch " Packaged folderviewplus.settings-sections.js does not match source folderviewplus.settings-sections.js."
770- fi
771- if ! text_files_match " ${SOURCE_SETTINGS_SETUP_ASSISTANT_JS} " " ${TMP_ARCHIVE_SETTINGS_SETUP_ASSISTANT_JS} " ; then
772- fail_packaged_source_mismatch " Packaged folderviewplus.setup-assistant.js does not match source folderviewplus.setup-assistant.js."
773- fi
774- if ! text_files_match " ${SOURCE_SETTINGS_SMART_DETECT_CONFIG_JS} " " ${TMP_ARCHIVE_SETTINGS_SMART_DETECT_CONFIG_JS} " ; then
775- fail_packaged_source_mismatch " Packaged folderviewplus.smart-detect-config.js does not match source folderviewplus.smart-detect-config.js."
776- fi
777- if ! text_files_match " ${SOURCE_SETTINGS_STARTER_TEMPLATES_JS} " " ${TMP_ARCHIVE_SETTINGS_STARTER_TEMPLATES_JS} " ; then
778- fail_packaged_source_mismatch " Packaged folderviewplus.starter-templates.js does not match source folderviewplus.starter-templates.js."
779- fi
780- if ! text_files_match " ${SOURCE_SETTINGS_SUPPORT_BUNDLE_PREVIEW_JS} " " ${TMP_ARCHIVE_SETTINGS_SUPPORT_BUNDLE_PREVIEW_JS} " ; then
781- fail_packaged_source_mismatch " Packaged folderviewplus.support-bundle-preview.js does not match source folderviewplus.support-bundle-preview.js."
782- fi
783- if ! text_files_match " ${SOURCE_SETTINGS_SUPPORT_BUNDLE_TELEMETRY_JS} " " ${TMP_ARCHIVE_SETTINGS_SUPPORT_BUNDLE_TELEMETRY_JS} " ; then
784- fail_packaged_source_mismatch " Packaged folderviewplus.support-bundle-telemetry.js does not match source folderviewplus.support-bundle-telemetry.js."
785- fi
786- if ! text_files_match " ${SOURCE_SETTINGS_ACTIVITY_DIAGNOSTICS_JS} " " ${TMP_ARCHIVE_SETTINGS_ACTIVITY_DIAGNOSTICS_JS} " ; then
787- fail_packaged_source_mismatch " Packaged folderviewplus.activity-diagnostics.js does not match source folderviewplus.activity-diagnostics.js."
788- fi
789- if ! text_files_match " ${SOURCE_SETTINGS_TREE_JS} " " ${TMP_ARCHIVE_SETTINGS_TREE_JS} " ; then
790- fail_packaged_source_mismatch " Packaged folderviewplus.settings-tree.js does not match source folderviewplus.settings-tree.js."
791- fi
792- if ! text_files_match " ${SOURCE_SETTINGS_FOLDER_EDITOR_JS} " " ${TMP_ARCHIVE_SETTINGS_FOLDER_EDITOR_JS} " ; then
793- fail_packaged_source_mismatch " Packaged folderviewplus.folder-editor.js does not match source folderviewplus.folder-editor.js."
794- fi
795- if ! text_files_match " ${SOURCE_SETTINGS_HEALTH_JS} " " ${TMP_ARCHIVE_SETTINGS_HEALTH_JS} " ; then
796- fail_packaged_source_mismatch " Packaged folderviewplus.settings-health.js does not match source folderviewplus.settings-health.js."
797- fi
798- if ! text_files_match " ${SOURCE_SETTINGS_WORKSPACES_JS} " " ${TMP_ARCHIVE_SETTINGS_WORKSPACES_JS} " ; then
799- fail_packaged_source_mismatch " Packaged folderviewplus.settings-workspaces.js does not match source folderviewplus.settings-workspaces.js."
800- fi
801- if ! text_files_match " ${SOURCE_SETTINGS_BULK_ASSIGNMENT_JS} " " ${TMP_ARCHIVE_SETTINGS_BULK_ASSIGNMENT_JS} " ; then
802- fail_packaged_source_mismatch " Packaged folderviewplus.bulk-assignment.js does not match source folderviewplus.bulk-assignment.js."
803- fi
804- if ! text_files_match " ${SOURCE_SETTINGS_RUNTIME_ACTIONS_JS} " " ${TMP_ARCHIVE_SETTINGS_RUNTIME_ACTIONS_JS} " ; then
805- fail_packaged_source_mismatch " Packaged folderviewplus.runtime-actions.js does not match source folderviewplus.runtime-actions.js."
806- fi
807- if ! text_files_match " ${SOURCE_SETTINGS_WIZARD_JS} " " ${TMP_ARCHIVE_SETTINGS_WIZARD_JS} " ; then
808- fail_packaged_source_mismatch " Packaged folderviewplus.wizard.js does not match source folderviewplus.wizard.js."
809- fi
810- if ! text_files_match " ${SOURCE_SETTINGS_IMPORT_JS} " " ${TMP_ARCHIVE_SETTINGS_IMPORT_JS} " ; then
811- fail_packaged_source_mismatch " Packaged folderviewplus.import.js does not match source folderviewplus.import.js."
812- fi
813- if ! text_files_match " ${SOURCE_SETTINGS_CSS} " " ${TMP_ARCHIVE_SETTINGS_CSS} " ; then
814- fail_packaged_source_mismatch " Packaged folderviewplus.css does not match source folderviewplus.css."
815- fi
816- if ! text_files_match " ${SOURCE_FOLDER_PAGE} " " ${TMP_ARCHIVE_FOLDER_PAGE} " ; then
817- fail_packaged_source_mismatch " Packaged Folder.page does not match source Folder.page."
818- fi
819- if ! text_files_match " ${SOURCE_SETTINGS_PAGE} " " ${TMP_ARCHIVE_SETTINGS_PAGE} " ; then
820- fail_packaged_source_mismatch " Packaged FolderViewPlus.page does not match source FolderViewPlus.page."
821- fi
822- if ! text_files_match " ${SOURCE_SERVER_LIB} " " ${TMP_ARCHIVE_SERVER_LIB} " ; then
823- fail_packaged_source_mismatch " Packaged server/lib.php does not match source server/lib.php."
824- fi
825- if ! text_files_match " ${SOURCE_SERVER_LIB_DIAGNOSTICS} " " ${TMP_ARCHIVE_SERVER_LIB_DIAGNOSTICS} " ; then
826- fail_packaged_source_mismatch " Packaged server/lib.diagnostics.php does not match source server/lib.diagnostics.php."
827- fi
828- if ! text_files_match " ${SOURCE_SERVER_APPLY_FOLDER_SETTINGS} " " ${TMP_ARCHIVE_SERVER_APPLY_FOLDER_SETTINGS} " ; then
829- fail_packaged_source_mismatch " Packaged server/apply_folder_settings.php does not match source server/apply_folder_settings.php."
830- fi
831- if ! text_files_match " ${SOURCE_SERVER_UPDATE_NOTES} " " ${TMP_ARCHIVE_SERVER_UPDATE_NOTES} " ; then
832- fail_packaged_source_mismatch " Packaged server/update_notes.php does not match source server/update_notes.php."
768+ if ! text_files_match " ${SOURCE_FOLDER_CSS} " " ${TMP_ARCHIVE_FOLDER_CSS} " ; then
769+ fail_packaged_source_mismatch " Packaged folder.css does not match source folder.css."
770+ fi
771+ if ! text_files_match " ${SOURCE_SETTINGS_JS} " " ${TMP_ARCHIVE_SETTINGS_JS} " ; then
772+ fail_packaged_source_mismatch " Packaged folderviewplus.js does not match source folderviewplus.js."
773+ fi
774+ if ! text_files_match " ${SOURCE_SETTINGS_DIRTY_JS} " " ${TMP_ARCHIVE_SETTINGS_DIRTY_JS} " ; then
775+ fail_packaged_source_mismatch " Packaged folderviewplus.dirty.js does not match source folderviewplus.dirty.js."
776+ fi
777+ if ! text_files_match " ${SOURCE_SETTINGS_RUNTIME_PARITY_JS} " " ${TMP_ARCHIVE_SETTINGS_RUNTIME_PARITY_JS} " ; then
778+ fail_packaged_source_mismatch " Packaged folderviewplus.runtime-parity.js does not match source folderviewplus.runtime-parity.js."
779+ fi
780+ if ! text_files_match " ${SOURCE_SETTINGS_SECTIONS_JS} " " ${TMP_ARCHIVE_SETTINGS_SECTIONS_JS} " ; then
781+ fail_packaged_source_mismatch " Packaged folderviewplus.settings-sections.js does not match source folderviewplus.settings-sections.js."
782+ fi
783+ if ! text_files_match " ${SOURCE_SETTINGS_SETUP_ASSISTANT_JS} " " ${TMP_ARCHIVE_SETTINGS_SETUP_ASSISTANT_JS} " ; then
784+ fail_packaged_source_mismatch " Packaged folderviewplus.setup-assistant.js does not match source folderviewplus.setup-assistant.js."
785+ fi
786+ if ! text_files_match " ${SOURCE_SETTINGS_SMART_DETECT_CONFIG_JS} " " ${TMP_ARCHIVE_SETTINGS_SMART_DETECT_CONFIG_JS} " ; then
787+ fail_packaged_source_mismatch " Packaged folderviewplus.smart-detect-config.js does not match source folderviewplus.smart-detect-config.js."
788+ fi
789+ if ! text_files_match " ${SOURCE_SETTINGS_STARTER_TEMPLATES_JS} " " ${TMP_ARCHIVE_SETTINGS_STARTER_TEMPLATES_JS} " ; then
790+ fail_packaged_source_mismatch " Packaged folderviewplus.starter-templates.js does not match source folderviewplus.starter-templates.js."
791+ fi
792+ if ! text_files_match " ${SOURCE_SETTINGS_SUPPORT_BUNDLE_PREVIEW_JS} " " ${TMP_ARCHIVE_SETTINGS_SUPPORT_BUNDLE_PREVIEW_JS} " ; then
793+ fail_packaged_source_mismatch " Packaged folderviewplus.support-bundle-preview.js does not match source folderviewplus.support-bundle-preview.js."
794+ fi
795+ if ! text_files_match " ${SOURCE_SETTINGS_SUPPORT_BUNDLE_TELEMETRY_JS} " " ${TMP_ARCHIVE_SETTINGS_SUPPORT_BUNDLE_TELEMETRY_JS} " ; then
796+ fail_packaged_source_mismatch " Packaged folderviewplus.support-bundle-telemetry.js does not match source folderviewplus.support-bundle-telemetry.js."
797+ fi
798+ if ! text_files_match " ${SOURCE_SETTINGS_ACTIVITY_DIAGNOSTICS_JS} " " ${TMP_ARCHIVE_SETTINGS_ACTIVITY_DIAGNOSTICS_JS} " ; then
799+ fail_packaged_source_mismatch " Packaged folderviewplus.activity-diagnostics.js does not match source folderviewplus.activity-diagnostics.js."
800+ fi
801+ if ! text_files_match " ${SOURCE_SETTINGS_TREE_JS} " " ${TMP_ARCHIVE_SETTINGS_TREE_JS} " ; then
802+ fail_packaged_source_mismatch " Packaged folderviewplus.settings-tree.js does not match source folderviewplus.settings-tree.js."
803+ fi
804+ if ! text_files_match " ${SOURCE_SETTINGS_FOLDER_EDITOR_JS} " " ${TMP_ARCHIVE_SETTINGS_FOLDER_EDITOR_JS} " ; then
805+ fail_packaged_source_mismatch " Packaged folderviewplus.folder-editor.js does not match source folderviewplus.folder-editor.js."
806+ fi
807+ if ! text_files_match " ${SOURCE_SETTINGS_HEALTH_JS} " " ${TMP_ARCHIVE_SETTINGS_HEALTH_JS} " ; then
808+ fail_packaged_source_mismatch " Packaged folderviewplus.settings-health.js does not match source folderviewplus.settings-health.js."
809+ fi
810+ if ! text_files_match " ${SOURCE_SETTINGS_WORKSPACES_JS} " " ${TMP_ARCHIVE_SETTINGS_WORKSPACES_JS} " ; then
811+ fail_packaged_source_mismatch " Packaged folderviewplus.settings-workspaces.js does not match source folderviewplus.settings-workspaces.js."
812+ fi
813+ if ! text_files_match " ${SOURCE_SETTINGS_BULK_ASSIGNMENT_JS} " " ${TMP_ARCHIVE_SETTINGS_BULK_ASSIGNMENT_JS} " ; then
814+ fail_packaged_source_mismatch " Packaged folderviewplus.bulk-assignment.js does not match source folderviewplus.bulk-assignment.js."
815+ fi
816+ if ! text_files_match " ${SOURCE_SETTINGS_RUNTIME_ACTIONS_JS} " " ${TMP_ARCHIVE_SETTINGS_RUNTIME_ACTIONS_JS} " ; then
817+ fail_packaged_source_mismatch " Packaged folderviewplus.runtime-actions.js does not match source folderviewplus.runtime-actions.js."
818+ fi
819+ if ! text_files_match " ${SOURCE_SETTINGS_WIZARD_JS} " " ${TMP_ARCHIVE_SETTINGS_WIZARD_JS} " ; then
820+ fail_packaged_source_mismatch " Packaged folderviewplus.wizard.js does not match source folderviewplus.wizard.js."
821+ fi
822+ if ! text_files_match " ${SOURCE_SETTINGS_IMPORT_JS} " " ${TMP_ARCHIVE_SETTINGS_IMPORT_JS} " ; then
823+ fail_packaged_source_mismatch " Packaged folderviewplus.import.js does not match source folderviewplus.import.js."
824+ fi
825+ if ! text_files_match " ${SOURCE_SETTINGS_CSS} " " ${TMP_ARCHIVE_SETTINGS_CSS} " ; then
826+ fail_packaged_source_mismatch " Packaged folderviewplus.css does not match source folderviewplus.css."
827+ fi
828+ if ! text_files_match " ${SOURCE_FOLDER_PAGE} " " ${TMP_ARCHIVE_FOLDER_PAGE} " ; then
829+ fail_packaged_source_mismatch " Packaged Folder.page does not match source Folder.page."
830+ fi
831+ if ! text_files_match " ${SOURCE_SETTINGS_PAGE} " " ${TMP_ARCHIVE_SETTINGS_PAGE} " ; then
832+ fail_packaged_source_mismatch " Packaged FolderViewPlus.page does not match source FolderViewPlus.page."
833+ fi
834+ if ! text_files_match " ${SOURCE_SERVER_LIB} " " ${TMP_ARCHIVE_SERVER_LIB} " ; then
835+ fail_packaged_source_mismatch " Packaged server/lib.php does not match source server/lib.php."
836+ fi
837+ if ! text_files_match " ${SOURCE_SERVER_LIB_DIAGNOSTICS} " " ${TMP_ARCHIVE_SERVER_LIB_DIAGNOSTICS} " ; then
838+ fail_packaged_source_mismatch " Packaged server/lib.diagnostics.php does not match source server/lib.diagnostics.php."
839+ fi
840+ if ! text_files_match " ${SOURCE_SERVER_APPLY_FOLDER_SETTINGS} " " ${TMP_ARCHIVE_SERVER_APPLY_FOLDER_SETTINGS} " ; then
841+ fail_packaged_source_mismatch " Packaged server/apply_folder_settings.php does not match source server/apply_folder_settings.php."
842+ fi
843+ if ! text_files_match " ${SOURCE_SERVER_UPDATE_NOTES} " " ${TMP_ARCHIVE_SERVER_UPDATE_NOTES} " ; then
844+ fail_packaged_source_mismatch " Packaged server/update_notes.php does not match source server/update_notes.php."
845+ fi
833846fi
834847
835848if [[ ! -d " ${SERVER_DIR} " ]]; then
0 commit comments