Skip to content

i_1195 Handle escapes in institution names#1196

Merged
johnbrvc merged 3 commits intopc2ccs:developfrom
johnbrvc:i1195_quotes_in_institution_names
Jan 9, 2026
Merged

i_1195 Handle escapes in institution names#1196
johnbrvc merged 3 commits intopc2ccs:developfrom
johnbrvc:i1195_quotes_in_institution_names

Conversation

@johnbrvc
Copy link
Collaborator

Description of what the PR does

Fix TabSeparatedValueParser to allow backslash escaping of characters in fields.
CI: Allow the timelimit property in the CLICS section to be a Double (SEERC contest did this)
CI: Add better exception handling if invalid institution information is returned

Issue which the PR addresses

Fixes #1195

Environment in which the PR was developed (OS,IDE, Java version, etc.)

Precise steps for testing the PR (i.e., how to demonstrate that it works correctly)

TBD

Fix TabSeparatedValueParser to allow backslash escaping of characters in fields.
CI: Allow the timelimit in the CLICS section to be a Double (SEERC contest did this)
CI: Add better exception handling if invalid institution information is returned
@johnbrvc johnbrvc added this to the 9.11.0 milestone Dec 11, 2025
@johnbrvc johnbrvc self-assigned this Dec 11, 2025
Fixed NPE added by adding Double processing.
Double clicsTimeout = fetchDoubleValue(limitsContent, TIMEOUT_KEY);
if (clicsTimeout != null) {
problem.setTimeOutInSeconds(clicsTimeout);
problem.setTimeOutInSeconds(clicsTimeout.intValue());
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it 'intValue()' instead of 'doubleValue()'?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is because we found that some contests (especially the Europe ones), specify the problem timeout as a floating point number in the problem.yaml, eg. timeout=2.0. They are using the latest specification of the problem package format, which ICPC does not use yet in their CCS's. This causes an exception if you try to fetch it from the map as an integer, so we now read it as a double, then convert it to an integer (which is what the old specification wants).

Copy link
Collaborator

@SamanwaySadhu SamanwaySadhu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The code changes look good. However, this PR does not have the steps of what to test. Please let me know if I am only supposed to review the code or recreation steps will be added later.

@johnbrvc
Copy link
Collaborator Author

The code changes look good. However, this PR does not have the steps of what to test. Please let me know if I am only supposed to review the code or recreation steps will be added later.

You can try to follow the procedure outlined in the Issue #1196 - it mentions the SEERC2025 contest, which I invited you to on git. It's in the contest/seerc2025. Use the "pc2new" branch (git checkout pc2).

@clevengr
Copy link
Contributor

clevengr commented Jan 2, 2026

The code changes look good. However, this PR does not have the steps of what to test. Please let me know if I am only supposed to review the code or recreation steps will be added later.

You can try to follow the procedure outlined in the Issue #1196 - it mentions the SEERC2025 contest, which I invited you to on git. It's in the contest/seerc2025. Use the "pc2new" branch (git checkout pc2).

The above reply references "Issue #1196". That's actually the PR number (of THIS PR). I think it was intended to reference "Issue #1195".

Copy link
Contributor

@clevengr clevengr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

@johnbrvc
Copy link
Collaborator Author

johnbrvc commented Jan 3, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo.
"git checkout pc2new" (or however you do it using whatever git tools you use).

@clevengr
Copy link
Contributor

clevengr commented Jan 3, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo. "git checkout pc2new" (or however you do it using whatever git tools you use).

I do not see a "pc2new" branch anywhere under the SEERC2025 repo. Can you explain where to find that?

@johnbrvc
Copy link
Collaborator Author

johnbrvc commented Jan 3, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo. "git checkout pc2new" (or however you do it using whatever git tools you use).

I do not see a "pc2new" branch anywhere under the SEERC2025 repo. Can you explain where to find that?

I had a link in the message above: https://github.com/icpcsysops/SEERC2025/tree/pc2new/contests

Or, from command line:

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>git fetch

C:\ICPC\contests\SEERC\SEERC2025>git branch -a
* main
  pc2new
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

C:\ICPC\contests\SEERC\SEERC2025>git checkout pc2new
Switched to branch 'pc2new'
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch pc2new
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>cd contests

C:\ICPC\contests\SEERC\SEERC2025\contests>cd seerc2025

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025>cd config

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>dir inst*
 Volume in drive C has no label.
 Volume Serial Number is DA95-11FF

 Directory of C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config

01/03/2026  09:02 AM    <SYMLINK>      institutions.tsv [..\..\..\shared\pc2config\institutions.tsv]
               1 File(s)              0 bytes
               0 Dir(s)  1,108,739,739,648 bytes free

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>

@clevengr
Copy link
Contributor

clevengr commented Jan 3, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo. "git checkout pc2new" (or however you do it using whatever git tools you use).

I do not see a "pc2new" branch anywhere under the SEERC2025 repo. Can you explain where to find that?

I had a link in the message above: https://github.com/icpcsysops/SEERC2025/tree/pc2new/contests

Or, from command line:

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>git fetch

C:\ICPC\contests\SEERC\SEERC2025>git branch -a
* main
  pc2new
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

C:\ICPC\contests\SEERC\SEERC2025>git checkout pc2new
Switched to branch 'pc2new'
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch pc2new
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>cd contests

C:\ICPC\contests\SEERC\SEERC2025\contests>cd seerc2025

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025>cd config

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>dir inst*
 Volume in drive C has no label.
 Volume Serial Number is DA95-11FF

 Directory of C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config

01/03/2026  09:02 AM    <SYMLINK>      institutions.tsv [..\..\..\shared\pc2config\institutions.tsv]
               1 File(s)              0 bytes
               0 Dir(s)  1,108,739,739,648 bytes free

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>

I still cannot find the config containing institutions.tsv for this contest. Here's what I did. First, I cloned the SEERC2025 repo (because I did not already have it on my local Windows machine):

PS C:\users\john\git> git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git
Cloning into 'SEERC2025'...
remote: Enumerating objects: 6329, done.
remote: Counting objects: 100% (2559/2559), done.
remote: Compressing objects: 100% (1326/1326), done.
remote: Total 6329 (delta 147), reused 2453 (delta 81), pack-reused 3770 (from 1)Receiving objects: 100% (6329/6329), 955.87 MiB | 31.32 MiB/s, done.

Resolving deltas: 100% (405/405), done.
Updating files: 100% (4669/4669), done.

Next, I cd'd into the cloned repo folder and then followed your sequence of instructions:

PS C:\users\john\git> cd .\SEERC2025\
PS C:\users\john\git\SEERC2025> git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

PS C:\users\john\git\SEERC2025> git fetch
PS C:\users\john\git\SEERC2025> git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

Note that at this point my result differs from yours: there is no pc2new branch listed. But I continued:

PS C:\users\john\git\SEERC2025> git checkout pc2new
Switched to a new branch 'pc2new'
branch 'pc2new' set up to track 'origin/pc2new'.
PS C:\users\john\git\SEERC2025>

Note that this is also different: your instructions indicate it should say Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded. but my results are instead branch 'pc2new' set up to track 'origin/pc2new'.. I continued nevertheless:

PS C:\users\john\git\SEERC2025> git status
On branch pc2new
Your branch is up to date with 'origin/pc2new'.

nothing to commit, working tree clean

Again, different output here, but still I'm thinking "maybe this is ok..." So I continued:

PS C:\users\john\git\SEERC2025> cd contests
PS C:\users\john\git\SEERC2025\contests> cd .\seerc2025\
PS C:\users\john\git\SEERC2025\contests\seerc2025> cd config
PS C:\users\john\git\SEERC2025\contests\seerc2025\config> dir inst*


    Directory: C:\users\john\git\SEERC2025\contests\seerc2025\config


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l          1/3/2026   3:04 PM              0 institutions.tsv

So I'm not getting the institutions.tsv file cloned from ..\..\..\shared\pc2config\institutions.tsv. But I did the clone specifying that symlinks should be followed:

 git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git

I tried running the git clone command as Administrator; didn't make a difference. I also verified that the git core.symlinks value is true:

PS C:\Users\john\git\SEERC2025\contests\seerc2025\config> git config --global --list
user.name=John Clevenger
user.email=clevenger@icpc.global
core.symlinks=true

Any ideas why I'm not getting the repo cloned properly?

@johnbrvc
Copy link
Collaborator Author

johnbrvc commented Jan 3, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo. "git checkout pc2new" (or however you do it using whatever git tools you use).

I do not see a "pc2new" branch anywhere under the SEERC2025 repo. Can you explain where to find that?

I had a link in the message above: https://github.com/icpcsysops/SEERC2025/tree/pc2new/contests
Or, from command line:

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>git fetch

C:\ICPC\contests\SEERC\SEERC2025>git branch -a
* main
  pc2new
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

C:\ICPC\contests\SEERC\SEERC2025>git checkout pc2new
Switched to branch 'pc2new'
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch pc2new
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>cd contests

C:\ICPC\contests\SEERC\SEERC2025\contests>cd seerc2025

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025>cd config

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>dir inst*
 Volume in drive C has no label.
 Volume Serial Number is DA95-11FF

 Directory of C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config

01/03/2026  09:02 AM    <SYMLINK>      institutions.tsv [..\..\..\shared\pc2config\institutions.tsv]
               1 File(s)              0 bytes
               0 Dir(s)  1,108,739,739,648 bytes free

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>

I still cannot find the config containing institutions.tsv for this contest. Here's what I did. First, I cloned the SEERC2025 repo (because I did not already have it on my local Windows machine):

PS C:\users\john\git> git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git
Cloning into 'SEERC2025'...
remote: Enumerating objects: 6329, done.
remote: Counting objects: 100% (2559/2559), done.
remote: Compressing objects: 100% (1326/1326), done.
remote: Total 6329 (delta 147), reused 2453 (delta 81), pack-reused 3770 (from 1)Receiving objects: 100% (6329/6329), 955.87 MiB | 31.32 MiB/s, done.

Resolving deltas: 100% (405/405), done.
Updating files: 100% (4669/4669), done.

Next, I cd'd into the cloned repo folder and then followed your sequence of instructions:

PS C:\users\john\git> cd .\SEERC2025\
PS C:\users\john\git\SEERC2025> git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

PS C:\users\john\git\SEERC2025> git fetch
PS C:\users\john\git\SEERC2025> git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

Note that at this point my result differs from yours: there is no pc2new branch listed. But I continued:

Sure, because you don't have it on your local drive yet (you didn't check it out), but the REMOTE one is there which is where it will get it from when you check it as, as you did below. So far everything is as expected.

PS C:\users\john\git\SEERC2025> git checkout pc2new
Switched to a new branch 'pc2new'
branch 'pc2new' set up to track 'origin/pc2new'.
PS C:\users\john\git\SEERC2025>

Perfect.

Note that this is also different: your instructions indicate it should say Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded. but my results are instead branch 'pc2new' set up to track 'origin/pc2new'.. I continued nevertheless:

Yeah, because this was done on my home computer, not my laptop and my home computer is probably slightly behind the branch on git. That's fine. You would get the latest one which is what you want.

PS C:\users\john\git\SEERC2025> git status
On branch pc2new
Your branch is up to date with 'origin/pc2new'.

nothing to commit, working tree clean

Perfect

Again, different output here, but still I'm thinking "maybe this is ok..." So I continued:

PS C:\users\john\git\SEERC2025> cd contests
PS C:\users\john\git\SEERC2025\contests> cd .\seerc2025\
PS C:\users\john\git\SEERC2025\contests\seerc2025> cd config
PS C:\users\john\git\SEERC2025\contests\seerc2025\config> dir inst*


    Directory: C:\users\john\git\SEERC2025\contests\seerc2025\config


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l          1/3/2026   3:04 PM              0 institutions.tsv

So I'm not getting the institutions.tsv file cloned from ..\..\..\shared\pc2config\institutions.tsv. But I did the clone specifying that symlinks should be followed:

Sounds like something is overriding your symlinks flag; clearly that's the problem. You should be able to go directly to where the symlink points to see if the institutions file is in fact there (of course, it will be).
One think I notice is you're not using the standard command prompt, but powershell. I'm not sure what effect that may have on git. I notice this because the directory format is quite different.

 git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git

I tried running the git clone command as Administrator; didn't make a difference. I also verified that the git core.symlinks value is true:

PS C:\Users\john\git\SEERC2025\contests\seerc2025\config> git config --global --list
user.name=John Clevenger
user.email=clevenger@icpc.global
core.symlinks=true

Well, that just tells you what the GLOBAL settings are, not what was being used. I think you need just:
git config --list
That will show you what is actually being used.
But I would expect if you used the command line to set the option explicitly it would work. I assume when you recloned, you deleted the original tree and started from scratch... git doesn't like to "re-clone" over stuff.

Any ideas why I'm not getting the repo cloned properly?

I would also try looking at the folder using explorer, and see if it sees the symlinks in the config folder - there should be a couple - teams2.tsv, groups.tsv also are symlinks to the shared/pc2config folder files.

If they do not show up as symlinks then your git is not cloning right for some reason. (I thought you had this issue with another repo as well?)

I might also try the git from a command prompt instead of PS - again, I don't know what PS may be doing.

@clevengr
Copy link
Contributor

clevengr commented Jan 4, 2026

I have reviewed the code, and with the exception of a trivial comment about the use of a deprecated constructor in one file, the code looks fine to me. However, I cannot figure out how to test it. Samanway asked this same question, and the answer (as I interpret it) seemed to be "use the contest in https://github.com/icpcsysops/SEERC2025/tree/main/contests/seerc2025". However, I've looked extensively through that contest (including in the ../../shared folder) and I can't find any institutions.tsv file. Since this PR is about handling quoted strings in institutions.tsv, I expected there would be such a file in that contest. What are we missing? Is the expectation that we would create our own institutions.tsv file for testing? (I can certainly do that, but my impression is that there is supposedly already sufficient data available to make testing supported as-is...)

Instructions above say to use the "pc2new" branch of the SEERC contest repo. "git checkout pc2new" (or however you do it using whatever git tools you use).

I do not see a "pc2new" branch anywhere under the SEERC2025 repo. Can you explain where to find that?

I had a link in the message above: https://github.com/icpcsysops/SEERC2025/tree/pc2new/contests
Or, from command line:

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>git fetch

C:\ICPC\contests\SEERC\SEERC2025>git branch -a
* main
  pc2new
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

C:\ICPC\contests\SEERC\SEERC2025>git checkout pc2new
Switched to branch 'pc2new'
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

C:\ICPC\contests\SEERC\SEERC2025>git status
On branch pc2new
Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded.
  (use "git pull" to update your local branch)

nothing to commit, working tree clean

C:\ICPC\contests\SEERC\SEERC2025>cd contests

C:\ICPC\contests\SEERC\SEERC2025\contests>cd seerc2025

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025>cd config

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>dir inst*
 Volume in drive C has no label.
 Volume Serial Number is DA95-11FF

 Directory of C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config

01/03/2026  09:02 AM    <SYMLINK>      institutions.tsv [..\..\..\shared\pc2config\institutions.tsv]
               1 File(s)              0 bytes
               0 Dir(s)  1,108,739,739,648 bytes free

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>

I still cannot find the config containing institutions.tsv for this contest. Here's what I did. First, I cloned the SEERC2025 repo (because I did not already have it on my local Windows machine):

PS C:\users\john\git> git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git
Cloning into 'SEERC2025'...
remote: Enumerating objects: 6329, done.
remote: Counting objects: 100% (2559/2559), done.
remote: Compressing objects: 100% (1326/1326), done.
remote: Total 6329 (delta 147), reused 2453 (delta 81), pack-reused 3770 (from 1)Receiving objects: 100% (6329/6329), 955.87 MiB | 31.32 MiB/s, done.

Resolving deltas: 100% (405/405), done.
Updating files: 100% (4669/4669), done.

Next, I cd'd into the cloned repo folder and then followed your sequence of instructions:

PS C:\users\john\git> cd .\SEERC2025\
PS C:\users\john\git\SEERC2025> git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

PS C:\users\john\git\SEERC2025> git fetch
PS C:\users\john\git\SEERC2025> git branch -a
* main
  remotes/origin/HEAD -> origin/main
  remotes/origin/main
  remotes/origin/pc2new

Note that at this point my result differs from yours: there is no pc2new branch listed. But I continued:

Sure, because you don't have it on your local drive yet (you didn't check it out), but the REMOTE one is there which is where it will get it from when you check it as, as you did below. So far everything is as expected.

PS C:\users\john\git\SEERC2025> git checkout pc2new
Switched to a new branch 'pc2new'
branch 'pc2new' set up to track 'origin/pc2new'.
PS C:\users\john\git\SEERC2025>

Perfect.

Note that this is also different: your instructions indicate it should say Your branch is behind 'origin/pc2new' by 20 commits, and can be fast-forwarded. but my results are instead branch 'pc2new' set up to track 'origin/pc2new'.. I continued nevertheless:

Yeah, because this was done on my home computer, not my laptop and my home computer is probably slightly behind the branch on git. That's fine. You would get the latest one which is what you want.

PS C:\users\john\git\SEERC2025> git status
On branch pc2new
Your branch is up to date with 'origin/pc2new'.

nothing to commit, working tree clean

Perfect

Again, different output here, but still I'm thinking "maybe this is ok..." So I continued:

PS C:\users\john\git\SEERC2025> cd contests
PS C:\users\john\git\SEERC2025\contests> cd .\seerc2025\
PS C:\users\john\git\SEERC2025\contests\seerc2025> cd config
PS C:\users\john\git\SEERC2025\contests\seerc2025\config> dir inst*


    Directory: C:\users\john\git\SEERC2025\contests\seerc2025\config


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---l          1/3/2026   3:04 PM              0 institutions.tsv

So I'm not getting the institutions.tsv file cloned from ..\..\..\shared\pc2config\institutions.tsv. But I did the clone specifying that symlinks should be followed:

Sounds like something is overriding your symlinks flag; clearly that's the problem. You should be able to go directly to where the symlink points to see if the institutions file is in fact there (of course, it will be). One think I notice is you're not using the standard command prompt, but powershell. I'm not sure what effect that may have on git. I notice this because the directory format is quite different.

 git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git

I tried running the git clone command as Administrator; didn't make a difference. I also verified that the git core.symlinks value is true:

PS C:\Users\john\git\SEERC2025\contests\seerc2025\config> git config --global --list
user.name=John Clevenger
user.email=clevenger@icpc.global
core.symlinks=true

Well, that just tells you what the GLOBAL settings are, not what was being used. I think you need just: git config --list That will show you what is actually being used. But I would expect if you used the command line to set the option explicitly it would work. I assume when you recloned, you deleted the original tree and started from scratch... git doesn't like to "re-clone" over stuff.

Any ideas why I'm not getting the repo cloned properly?

I would also try looking at the folder using explorer, and see if it sees the symlinks in the config folder - there should be a couple - teams2.tsv, groups.tsv also are symlinks to the shared/pc2config folder files.

If they do not show up as symlinks then your git is not cloning right for some reason. (I thought you had this issue with another repo as well?)

I might also try the git from a command prompt instead of PS - again, I don't know what PS may be doing.

Ok, this is REALLY weird. I tried recloning, using git clone -c core.symlinks=true https://github.com/icpcsysops/SEERC2025.git as before, with Command Prompt (instead of Power Shell). I get the same thing: all the "symlinked" files are shown as zero-length. Same when I look at them in PS, or in File Explorer, and whether the clone is done as a regular user or as Administrator.

However, when I actually try to OPEN one of the symlinked files, for example by using the command notepad institutions.tsv in either Command Prompt or Terminal (Power Shell), or when I just double-click on them in File Explorer, I can see the contents of the file! So the problem is that Windows is recording the file type as "symlink", and it reports the "size of" such a thing as zero -- but it allows you to open it any. Very, very strange. Anyway, I think this allows me to attempt to continue testing -- thanks.

@johnbrvc
Copy link
Collaborator Author

johnbrvc commented Jan 4, 2026

Ok, that's strange. Explorer should show what I have above: It should say SYMLINK and not size 0. It DOES say the total size of the directory listing is 0, but that's to be expected...

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>dir inst*
 Volume in drive C has no label.
 Volume Serial Number is DA95-11FF

 Directory of C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config

01/03/2026  09:02 AM    <SYMLINK>      institutions.tsv [..\..\..\shared\pc2config\institutions.tsv]
               1 File(s)              0 bytes
               0 Dir(s)  1,108,739,739,648 bytes free

C:\ICPC\contests\SEERC\SEERC2025\contests\seerc2025\config>

Copy link
Contributor

@clevengr clevengr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I attempted to load the "SEERC2025" contest into a build created from Develop; it threw an "Array index out of bounds" exception (as expected, as reported in the initial Issue). I then loaded the same contest into the PR (fixed) distribution; it loaded without error and when I looked at a PC2 "Accounts" report I see the following for team 1119974 (the team which was generating the Exception):

       Institution name '"Gheorghe Asachi" Technical University of Ia?i' Institution code 'INST-10088' Institution short name 'TUIASI'

I do note that there is a non-ASCII character in the name ("Ia?i") which is not being handled properly, but that's outside the scope of the issue which this PR fixes. I approve the PR.

Copy link
Collaborator

@SamanwaySadhu SamanwaySadhu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Works as expected!

PR Change request: Use Double.valueOf() instead of new Double().
@johnbrvc johnbrvc merged commit dfb7a4c into pc2ccs:develop Jan 9, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Institutions with double quotes in their names cause exceptions during configuration

3 participants