Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cam6_4_049: History bugfixes #1163

Merged
merged 26 commits into from
Dec 31, 2024
Merged
Show file tree
Hide file tree
Changes from 17 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
4c96ed5
return all indices and check for duplicates
Oct 3, 2024
3acb4b2
update to git-fleximod 0.9.2
Oct 3, 2024
5c343d9
remove duplicate fields from use cases
Oct 3, 2024
8abd7cf
change methodology to allow for duplicate fields with the same flag
Oct 3, 2024
33b6ffb
code cleanup; fix bad comment
Oct 3, 2024
b29a8de
revert duplicate removal
Oct 3, 2024
31e7e6b
improve error handling
Oct 3, 2024
ca13895
remove reference to tapes
Oct 3, 2024
b960ffb
don't error all the time perhaps
Oct 3, 2024
7b04a6e
Merge remote-tracking branch 'ESCOMP/cam_development' into history-bu…
Oct 3, 2024
225f7e3
add sampled_on_subcycle flag and remove time_bounds field from instan…
Oct 11, 2024
34e9816
move file-dependent fields to end of if block
peverwhee Oct 22, 2024
ba1e652
fix filename for instantaneous monthly files
peverwhee Oct 28, 2024
b8cd5a6
Merge remote-tracking branch 'ESCOMP/cam_development' into history-bu…
peverwhee Oct 28, 2024
2f59d18
add sampled_on_subcycle argument for missing subcycle fields
peverwhee Oct 29, 2024
f820ab6
remove "prev" argument for inst files; move open file logging to befo…
peverwhee Nov 4, 2024
3441f59
Merge remote-tracking branch 'ESCOMP/cam_development' into history-bu…
peverwhee Nov 11, 2024
03c0a0f
initial changelog
peverwhee Nov 11, 2024
cdcbea5
update archive_baseline script to modify read permissions on izumi
Nov 12, 2024
51d1e07
Merge branch 'history-bugfixes' of https://github.com/peverwhee/CAM i…
Nov 12, 2024
a9441a8
update git-fleximod to 0.9.3
peverwhee Nov 20, 2024
99dbe11
merge to head of cam_development
peverwhee Dec 22, 2024
3548dcf
update submodules
peverwhee Dec 22, 2024
d60dbc2
update cime tag to fix restarts issue
Dec 27, 2024
2d12f78
update cime
Dec 30, 2024
c3c9ed2
final changelog
peverwhee Dec 31, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .lib/git-fleximod/git_fleximod/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import argparse
from git_fleximod import utils

__version__ = "0.8.4"
__version__ = "0.9.2"
peverwhee marked this conversation as resolved.
Show resolved Hide resolved

def find_root_dir(filename=".gitmodules"):
""" finds the highest directory in tree
Expand Down
6 changes: 3 additions & 3 deletions .lib/git-fleximod/git_fleximod/git_fleximod.py
Original file line number Diff line number Diff line change
Expand Up @@ -124,8 +124,8 @@ def submodule_sparse_checkout(root_dir, name, url, path, sparsefile, tag="master
# set the repository remote

logger.info("Setting remote origin in {}/{}".format(root_dir, path))
status = sprepo_git.git_operation("remote", "-v")
if url not in status:
_, remotelist = sprepo_git.git_operation("remote", "-v")
if url not in remotelist:
sprepo_git.git_operation("remote", "add", "origin", url)

topgit = os.path.join(gitroot, ".git")
Expand Down Expand Up @@ -213,7 +213,7 @@ def submodules_status(gitmodules, root_dir, toplevel=False, depth=0):

def git_toplevelroot(root_dir, logger):
rgit = GitInterface(root_dir, logger)
superroot = rgit.git_operation("rev-parse", "--show-superproject-working-tree")
_, superroot = rgit.git_operation("rev-parse", "--show-superproject-working-tree")
return superroot

def submodules_update(gitmodules, root_dir, requiredlist, force):
Expand Down
7 changes: 5 additions & 2 deletions .lib/git-fleximod/git_fleximod/gitinterface.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,12 @@ def git_operation(self, operation, *args, **kwargs):
command = self._git_command(operation, *newargs)
if isinstance(command, list):
try:
return utils.execute_subprocess(command, output_to_caller=True)
status, output = utils.execute_subprocess(command, status_to_caller=True, output_to_caller=True)
return status, output.rstrip()
except Exception as e:
sys.exit(e)
else:
return command
return 0, command

def config_get_value(self, section, name):
if self._use_module:
Expand All @@ -81,6 +82,8 @@ def config_get_value(self, section, name):
def config_set_value(self, section, name, value):
if self._use_module:
with self.repo.config_writer() as writer:
if "." in section:
section = section.replace("."," \"")+'"'
writer.set_value(section, name, value)
writer.release() # Ensure changes are saved
else:
Expand Down
101 changes: 56 additions & 45 deletions .lib/git-fleximod/git_fleximod/submodule.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@ def status(self):
if not os.path.exists(os.path.join(smpath, ".git")):
rootgit = GitInterface(self.root_dir, self.logger)
# submodule commands use path, not name
tags = rootgit.git_operation("ls-remote", "--tags", self.url)
result = rootgit.git_operation("submodule","status",smpath).split()
status, tags = rootgit.git_operation("ls-remote", "--tags", self.url)
status, result = rootgit.git_operation("submodule","status",smpath)
result = result.split()

if result:
ahash = result[0][1:]
Expand All @@ -80,9 +81,9 @@ def status(self):
result = f"e {self.name:>20} not checked out, aligned at tag {self.fxtag}{optional}"
needsupdate = True
elif self.fxtag:
ahash = rootgit.git_operation(
status, ahash = rootgit.git_operation(
"submodule", "status", "{}".format(self.path)
).rstrip()
)
ahash = ahash[1 : len(self.fxtag) + 1]
if self.fxtag == ahash:
result = f"e {self.name:>20} not checked out, aligned at hash {ahash}{optional}"
Expand All @@ -96,14 +97,15 @@ def status(self):
else:
with utils.pushd(smpath):
git = GitInterface(smpath, self.logger)
remote = git.git_operation("remote").rstrip()
status, remote = git.git_operation("remote")
if remote == '':
result = f"e {self.name:>20} has no associated remote"
testfails = True
needsupdate = True
return result, needsupdate, localmods, testfails
rurl = git.git_operation("ls-remote","--get-url").rstrip()
line = git.git_operation("log", "--pretty=format:\"%h %d\"").partition('\n')[0]
status, rurl = git.git_operation("ls-remote","--get-url")
status, lines = git.git_operation("log", "--pretty=format:\"%h %d\"")
line = lines.partition('\n')[0]
parts = line.split()
ahash = parts[0][1:]
atag = None
Expand All @@ -120,7 +122,7 @@ def status(self):


#print(f"line is {line} ahash is {ahash} atag is {atag} {parts}")
# atag = git.git_operation("describe", "--tags", "--always").rstrip()
# atag = git.git_operation("describe", "--tags", "--always")
# ahash = git.git_operation("rev-list", "HEAD").partition("\n")[0]

recurse = False
Expand Down Expand Up @@ -149,10 +151,10 @@ def status(self):
result = f"e {self.name:>20} has no fxtag defined in .gitmodules, module at {ahash}"
testfails = False

status = git.git_operation("status", "--ignore-submodules", "-uno")
if "nothing to commit" not in status:
status, output = git.git_operation("status", "--ignore-submodules", "-uno")
if "nothing to commit" not in output:
localmods = True
result = "M" + textwrap.indent(status, " ")
result = "M" + textwrap.indent(output, " ")
# print(f"result {result} needsupdate {needsupdate} localmods {localmods} testfails {testfails}")
return result, needsupdate, localmods, testfails

Expand All @@ -171,10 +173,11 @@ def _add_remote(self, git):
Returns:
str: The name of the new remote if added, or the name of the existing remote that matches the submodule's URL.
"""
remotes = git.git_operation("remote", "-v").splitlines()
status, remotes = git.git_operation("remote", "-v")
remotes = remotes.splitlines()
upstream = None
if remotes:
upstream = git.git_operation("ls-remote", "--get-url").rstrip()
status, upstream = git.git_operation("ls-remote", "--get-url")
newremote = "newremote.00"
tmpurl = self.url.replace("git@github.com:", "https://github.com/")
line = next((s for s in remotes if self.url in s or tmpurl in s), None)
Expand All @@ -183,7 +186,7 @@ def _add_remote(self, git):
return newremote
else:
i = 0
while "newremote" in remotes:
while newremote in remotes:
i = i + 1
newremote = f"newremote.{i:02d}"
else:
Expand Down Expand Up @@ -214,12 +217,19 @@ def sparse_checkout(self):
"""
self.logger.info("Called sparse_checkout for {}".format(self.name))
rgit = GitInterface(self.root_dir, self.logger)
superroot = rgit.git_operation("rev-parse", "--show-superproject-working-tree")
status, superroot = rgit.git_operation("rev-parse", "--show-superproject-working-tree")
if superroot:
gitroot = superroot.strip()
else:
gitroot = self.root_dir.strip()
assert os.path.isdir(os.path.join(gitroot, ".git"))
# Now need to move the .git dir to the submodule location
rootdotgit = os.path.join(self.root_dir, ".git")
while os.path.isfile(rootdotgit):
with open(rootdotgit) as f:
line = f.readline().rstrip()
if line.startswith("gitdir: "):
rootdotgit = os.path.abspath(os.path.join(self.root_dir,line[8:]))
assert os.path.isdir(rootdotgit)
# first create the module directory
if not os.path.isdir(os.path.join(self.root_dir, self.path)):
os.makedirs(os.path.join(self.root_dir, self.path))
Expand All @@ -244,8 +254,8 @@ def sparse_checkout(self):
# set the repository remote

self.logger.info("Setting remote origin in {}/{}".format(self.root_dir, self.path))
status = sprepo_git.git_operation("remote", "-v")
if self.url not in status:
status, remotes = sprepo_git.git_operation("remote", "-v")
if self.url not in remotes:
sprepo_git.git_operation("remote", "add", "origin", self.url)

topgit = os.path.join(gitroot, ".git")
Expand All @@ -256,46 +266,46 @@ def sparse_checkout(self):
os.path.join(self.root_dir, f.read().split()[1]),
start=os.path.join(self.root_dir, self.path),
)
topgit = os.path.join(gitpath, "modules")
rootdotgit = os.path.join(gitpath, "modules", self.name)
else:
topgit = os.path.relpath(
os.path.join(self.root_dir, ".git", "modules"),
rootdotgit = os.path.relpath(
os.path.join(self.root_dir, ".git", "modules", self.name),
start=os.path.join(self.root_dir, self.path),
)

with utils.pushd(sprep_repo):
if not os.path.isdir(topgit):
os.makedirs(topgit)
topgit += os.sep + self.name

if os.path.isdir(os.path.join(self.root_dir, self.path, ".git")):
with utils.pushd(sprep_repo):
if os.path.isdir(os.path.join(topgit,".git")):
shutil.rmtree(os.path.join(topgit,".git"))
shutil.move(".git", topgit)
if os.path.isdir(os.path.join(rootdotgit,".git")):
shutil.rmtree(os.path.join(rootdotgit,".git"))
shutil.move(".git", rootdotgit)
with open(".git", "w") as f:
f.write("gitdir: " + os.path.relpath(topgit))
# assert(os.path.isdir(os.path.relpath(topgit, start=sprep_repo)))
gitsparse = os.path.abspath(os.path.join(topgit, "info", "sparse-checkout"))
f.write("gitdir: " + os.path.relpath(rootdotgit))
infodir = os.path.join(rootdotgit, "info")
if not os.path.isdir(infodir):
os.makedirs(infodir)
gitsparse = os.path.abspath(os.path.join(infodir, "sparse-checkout"))
if os.path.isfile(gitsparse):
self.logger.warning(
"submodule {} is already initialized {}".format(self.name, topgit)
"submodule {} is already initialized {}".format(self.name, rootdotgit)
)
return

with utils.pushd(sprep_repo):
if os.path.isfile(self.fxsparse):

shutil.copy(self.fxsparse, gitsparse)


# Finally checkout the repo
sprepo_git.git_operation("fetch", "origin", "--tags")
sprepo_git.git_operation("checkout", self.fxtag)

print(f"Successfully checked out {self.name:>20} at {self.fxtag}")
rgit.config_set_value(f'submodule "{self.name}"', "active", "true")
rgit.config_set_value(f'submodule "{self.name}"', "url", self.url)
rgit.config_set_value(f'submodule "{self.name}"', "path", self.path)
status,_ = sprepo_git.git_operation("checkout", self.fxtag)
if status:
print(f"Error checking out {self.name:>20} at {self.fxtag}")
else:
print(f"Successfully checked out {self.name:>20} at {self.fxtag}")
rgit.config_set_value('submodule.' + self.name, "active", "true")
rgit.config_set_value('submodule.' + self.name, "url", self.url)
rgit.config_set_value('submodule.' + self.name, "path", self.path)

def update(self):
"""
Expand Down Expand Up @@ -342,15 +352,15 @@ def update(self):
git.git_operation("clone", self.url, self.path)
smgit = GitInterface(repodir, self.logger)
if not tag:
tag = smgit.git_operation("describe", "--tags", "--always").rstrip()
status, tag = smgit.git_operation("describe", "--tags", "--always")
smgit.git_operation("checkout", tag)
# Now need to move the .git dir to the submodule location
rootdotgit = os.path.join(self.root_dir, ".git")
if os.path.isfile(rootdotgit):
with open(rootdotgit) as f:
line = f.readline()
if line.startswith("gitdir: "):
rootdotgit = line[8:].rstrip()
rootdotgit = line[8:]

newpath = os.path.abspath(os.path.join(self.root_dir, rootdotgit, "modules", self.name))
if os.path.exists(newpath):
Expand Down Expand Up @@ -393,15 +403,16 @@ def update(self):
git = GitInterface(submoddir, self.logger)
# first make sure the url is correct
newremote = self._add_remote(git)
tags = git.git_operation("tag", "-l")
status, tags = git.git_operation("tag", "-l")
fxtag = self.fxtag
if fxtag and fxtag not in tags:
git.git_operation("fetch", newremote, "--tags")
atag = git.git_operation("describe", "--tags", "--always").rstrip()
status, atag = git.git_operation("describe", "--tags", "--always")
if fxtag and fxtag != atag:
try:
git.git_operation("checkout", fxtag)
print(f"{self.name:>20} updated to {fxtag}")
status, _ = git.git_operation("checkout", fxtag)
if not status:
print(f"{self.name:>20} updated to {fxtag}")
except Exception as error:
print(error)

Expand Down
10 changes: 5 additions & 5 deletions .lib/git-fleximod/git_fleximod/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -307,12 +307,12 @@ def execute_subprocess(commands, status_to_caller=False, output_to_caller=False)
# simple status check. If returning, it is the callers
# responsibility determine if an error occurred and handle it
# appropriately.
msg_context = (
"Process did not run successfully; "
"returned status {0}".format(error.returncode)
)
msg = failed_command_msg(msg_context, commands, output=error.output)
if not return_to_caller:
msg_context = (
"Process did not run successfully; "
"returned status {0}".format(error.returncode)
)
msg = failed_command_msg(msg_context, commands, output=error.output)
logging.error(error)
logging.error(msg)
log_process_output(error.output)
Expand Down
2 changes: 1 addition & 1 deletion .lib/git-fleximod/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "git-fleximod"
version = "0.8.4"
version = "0.9.2"
description = "Extended support for git-submodule and git-sparse-checkout"
authors = ["Jim Edwards <jedwards@ucar.edu>"]
maintainers = ["Jim Edwards <jedwards@ucar.edu>"]
Expand Down
2 changes: 1 addition & 1 deletion .lib/git-fleximod/tbump.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
github_url = "https://github.com/jedwards4b/git-fleximod/"

[version]
current = "0.8.4"
current = "0.9.2"

# Example of a semver regexp.
# Make sure this matches current_version before
Expand Down
2 changes: 1 addition & 1 deletion bld/namelist_files/use_cases/sd_waccm_sulfur.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@
<met_data_path>atm/cam/met/GEOS5</met_data_path>
<met_filenames_list>atm/cam/met/GEOS5_filenames_list_c120516.txt</met_filenames_list>

<!-- bnd_topo --->
<!-- bnd_topo -->
<bnd_topo>atm/cam/met/USGS-gtopo30_1.9x2.5_phys_geos5_c100929.nc</bnd_topo>

<!-- sim_year used for CLM datasets and SSTs forcings -->
Expand Down
Loading
Loading