From effb93ab53505bbf9c150266ec20ee60d733a5dc Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Sep 2025 06:24:06 +0000 Subject: [PATCH 1/3] Initial plan From c7000070e7bd42b60ea4c74859abc4dda5dead1b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Sep 2025 06:35:13 +0000 Subject: [PATCH 2/3] Implement multiple file support for cobj-idx migrate and unlock commands Co-authored-by: yutaro-sakamoto <80912876+yutaro-sakamoto@users.noreply.github.com> --- .../indexed_file/IndexedFileUtilMain.java | 54 +++++++++---------- tests/cobj-idx.src/migrate.at | 6 +++ tests/cobj-idx.src/unlock.at | 13 +++++ 3 files changed, 45 insertions(+), 28 deletions(-) diff --git a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/IndexedFileUtilMain.java b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/IndexedFileUtilMain.java index dd760163..0b9f7ad0 100644 --- a/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/IndexedFileUtilMain.java +++ b/libcobj/app/src/main/java/jp/osscons/opensourcecobol/libcobj/user_util/indexed_file/IndexedFileUtilMain.java @@ -138,39 +138,37 @@ public static void main(String[] args) { System.exit(1); } } else if ("migrate".equals(subCommand)) { - if (unrecognizedArgs.length != 2) { - if (unrecognizedArgs.length < 2) { - System.err.println("error: no indexed file is specified."); - } else { - System.err.println("error: too many indexed files are specified."); - } + if (unrecognizedArgs.length < 2) { + System.err.println("error: no indexed file is specified."); System.exit(1); } - String indexedFilePath = unrecognizedArgs[1]; - try { - migrateIndexedFile(indexedFilePath); - } catch (Exception e) { - System.err.println("error: " + e.getMessage()); - System.exit(1); + boolean hasError = false; + for (int i = 1; i < unrecognizedArgs.length; i++) { + String indexedFilePath = unrecognizedArgs[i]; + try { + migrateIndexedFile(indexedFilePath); + } catch (Exception e) { + System.err.println("error: " + e.getMessage()); + hasError = true; + } } - System.exit(0); + System.exit(hasError ? 1 : 0); } else if ("unlock".equals(subCommand)) { - if (unrecognizedArgs.length != 2) { - if (unrecognizedArgs.length < 2) { - System.err.println("error: no indexed file is specified."); - } else { - System.err.println("error: too many indexed files are specified."); - } + if (unrecognizedArgs.length < 2) { + System.err.println("error: no indexed file is specified."); System.exit(1); } - String indexedFilePath = unrecognizedArgs[1]; - try { - unlockIndexedFile(indexedFilePath); - } catch (Exception e) { - System.err.println("error: " + e.getMessage()); - System.exit(1); + boolean hasError = false; + for (int i = 1; i < unrecognizedArgs.length; i++) { + String indexedFilePath = unrecognizedArgs[i]; + try { + unlockIndexedFile(indexedFilePath); + } catch (Exception e) { + System.err.println("error: " + e.getMessage()); + hasError = true; + } } - System.exit(0); + System.exit(hasError ? 1 : 0); } else if ("load".equals(subCommand)) { if (unrecognizedArgs.length < 2 || unrecognizedArgs.length > 3) { if (unrecognizedArgs.length < 2) { @@ -260,12 +258,12 @@ private static void printHelpMessage() { " Write the records stored in the indexed file into the output file."); System.out.println(" The default format of the output data is SEQUENTIAL of COBOL."); System.out.println(); - System.out.println("cobj-idx migrate "); + System.out.println("cobj-idx migrate [...]"); System.out.println( " Migrate the indexed file whose version is older than 1.1.12 to the latest" + " version."); System.out.println(); - System.out.println("cobj-idx unlock "); + System.out.println("cobj-idx unlock [...]"); System.out.println(" Unlock all locks of the indexed file."); System.out.println(); System.out.println("Options:"); diff --git a/tests/cobj-idx.src/migrate.at b/tests/cobj-idx.src/migrate.at index bbf6ddff..ae22dc5e 100644 --- a/tests/cobj-idx.src/migrate.at +++ b/tests/cobj-idx.src/migrate.at @@ -73,4 +73,10 @@ AAAA2BBBB1CCCC1 AAAA1BBBB1CCCC1 AAAA3BBBB3CCCC3 ]) + +# Test migrate with multiple files +AT_CHECK([cp ../../cobj-idx.src/test-data/indexed_file.dat indexed_file2.dat]) +AT_CHECK([cp ../../cobj-idx.src/test-data/indexed_file.dat indexed_file3.dat]) +AT_CHECK([${COBJ_IDX} migrate indexed_file2.dat indexed_file3.dat]) + AT_CLEANUP \ No newline at end of file diff --git a/tests/cobj-idx.src/unlock.at b/tests/cobj-idx.src/unlock.at index 981e7c3e..bdc2ee77 100644 --- a/tests/cobj-idx.src/unlock.at +++ b/tests/cobj-idx.src/unlock.at @@ -170,4 +170,17 @@ AT_CHECK([java check_record_lock], [0], [00 ]) +# Test unlock with multiple files +AT_CHECK([rm -f indexed_file.dat indexed_file2.dat]) +# Create multiple locked files +AT_CHECK([java create_and_exit]) +AT_CHECK([cp indexed_file.dat indexed_file2.dat]) +AT_CHECK([java create_and_exit]) # This will leave indexed_file.dat locked +# Unlock multiple files +AT_CHECK([${COBJ_IDX} unlock indexed_file.dat indexed_file2.dat]) +# Check both files are unlocked +AT_CHECK([java check_file_lock], [0], +[00 +]) + AT_CLEANUP \ No newline at end of file From 302a57045f654cbe002c219d084addb97ead13b2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 2 Sep 2025 08:29:02 +0000 Subject: [PATCH 3/3] Enhance migrate test with dynamic file verification using ASSIGN EXTERNAL Co-authored-by: yutaro-sakamoto <80912876+yutaro-sakamoto@users.noreply.github.com> --- libcobj/bin/cobj-idx | 5 ++++- tests/cobj-idx.src/migrate.at | 24 +++++++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/libcobj/bin/cobj-idx b/libcobj/bin/cobj-idx index 3cc8777b..1f05b658 100755 --- a/libcobj/bin/cobj-idx +++ b/libcobj/bin/cobj-idx @@ -1,3 +1,6 @@ #!/bin/bash -java jp.osscons.opensourcecobol.libcobj.user_util.indexed_file.IndexedFileUtilMain $@ \ No newline at end of file +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +LIBCOBJ_JAR="$SCRIPT_DIR/../app/build/libs/libcobj.jar" + +java -cp "$LIBCOBJ_JAR" jp.osscons.opensourcecobol.libcobj.user_util.indexed_file.IndexedFileUtilMain $@ \ No newline at end of file diff --git a/tests/cobj-idx.src/migrate.at b/tests/cobj-idx.src/migrate.at index ae22dc5e..175820df 100644 --- a/tests/cobj-idx.src/migrate.at +++ b/tests/cobj-idx.src/migrate.at @@ -7,7 +7,7 @@ AT_DATA([check_file.cbl], [ ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. - SELECT F ASSIGN TO "indexed_file.dat" + SELECT F ASSIGN TO INDEX_FILE_PATH ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS REC-KEY @@ -65,8 +65,8 @@ AT_CHECK([cp ../../cobj-idx.src/test-data/indexed_file.dat .]) AT_CHECK([${COBJ_IDX} migrate indexed_file.dat]) # check the converted file -AT_CHECK([${COMPILE} check_file.cbl]) -AT_CHECK([java check_file], [0], +AT_CHECK([${COMPILE} --assign_external check_file.cbl]) +AT_CHECK([INDEX_FILE_PATH=indexed_file.dat java check_file], [0], [AAAA1BBBB1CCCC1 AAAA2BBBB1CCCC1 00 @@ -79,4 +79,22 @@ AT_CHECK([cp ../../cobj-idx.src/test-data/indexed_file.dat indexed_file2.dat]) AT_CHECK([cp ../../cobj-idx.src/test-data/indexed_file.dat indexed_file3.dat]) AT_CHECK([${COBJ_IDX} migrate indexed_file2.dat indexed_file3.dat]) +# check that indexed_file2.dat works properly after migration +AT_CHECK([INDEX_FILE_PATH=indexed_file2.dat java check_file], [0], +[AAAA1BBBB1CCCC1 +AAAA2BBBB1CCCC1 +00 +AAAA1BBBB1CCCC1 +AAAA3BBBB3CCCC3 +]) + +# check that indexed_file3.dat works properly after migration +AT_CHECK([INDEX_FILE_PATH=indexed_file3.dat java check_file], [0], +[AAAA1BBBB1CCCC1 +AAAA2BBBB1CCCC1 +00 +AAAA1BBBB1CCCC1 +AAAA3BBBB3CCCC3 +]) + AT_CLEANUP \ No newline at end of file