Skip to content

Commit 0557c0b

Browse files
scheduler: resolve git references into revisions on submission
Signed-off-by: Charles Baynham <[email protected]>
1 parent 4926767 commit 0557c0b

File tree

3 files changed

+18
-7
lines changed

3 files changed

+18
-7
lines changed

RELEASE_NOTES.rst

+1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ Highlights:
4545
* Full Python 3.10 support.
4646
* MSYS2 packaging for Windows, which replaces Conda. Conda packages are still available to
4747
support legacy installations, but may be removed in a future release.
48+
* Experiments can now be submitted with revisions set to a branch / tag name instead of only git hashes.
4849

4950
Breaking changes:
5051

artiq/master/experiments.py

+11-5
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ async def scan_repository(self, new_cur_rev=None):
111111
try:
112112
if new_cur_rev is None:
113113
new_cur_rev = self.repo_backend.get_head_rev()
114-
wd, _ = self.repo_backend.request_rev(new_cur_rev)
114+
wd, _, _ = self.repo_backend.request_rev(new_cur_rev)
115115
self.repo_backend.release_rev(self.cur_rev)
116116
self.cur_rev = new_cur_rev
117117
self.status["cur_rev"] = new_cur_rev
@@ -132,7 +132,7 @@ async def examine(self, filename, use_repository=True, revision=None):
132132
if use_repository:
133133
if revision is None:
134134
revision = self.cur_rev
135-
wd, _ = self.repo_backend.request_rev(revision)
135+
wd, _, revision = self.repo_backend.request_rev(revision)
136136
filename = os.path.join(wd, filename)
137137
worker = Worker(self.worker_handlers)
138138
try:
@@ -169,7 +169,7 @@ def get_head_rev(self):
169169
return "N/A"
170170

171171
def request_rev(self, rev):
172-
return self.root, None
172+
return self.root, None, "N/A"
173173

174174
def release_rev(self, rev):
175175
pass
@@ -198,16 +198,22 @@ def __init__(self, root):
198198
self.checkouts = dict()
199199

200200
def get_head_rev(self):
201-
return str(self.git.head.target)
201+
return str(self.git.head.target)
202+
203+
def _get_pinned_rev(self, rev):
204+
'Resolve a git pointer (e.g. "HEAD", "master", "abcdef123456...") into a git hash'
205+
commit, _ = self.git.resolve_refish(rev)
206+
return commit.hex
202207

203208
def request_rev(self, rev):
209+
rev = self._get_pinned_rev(rev)
204210
if rev in self.checkouts:
205211
co = self.checkouts[rev]
206212
co.ref_count += 1
207213
else:
208214
co = _GitCheckout(self.git, rev)
209215
self.checkouts[rev] = co
210-
return co.path, co.message
216+
return co.path, co.message, rev
211217

212218
def release_rev(self, rev):
213219
co = self.checkouts[rev]

artiq/master/scheduler.py

+6-2
Original file line numberDiff line numberDiff line change
@@ -139,8 +139,12 @@ def submit(self, expid, priority, due_date, flush, pipeline_name):
139139
if "repo_rev" in expid:
140140
if expid["repo_rev"] is None:
141141
expid["repo_rev"] = self.experiment_db.cur_rev
142-
wd, repo_msg = self.experiment_db.repo_backend.request_rev(
143-
expid["repo_rev"])
142+
wd, repo_msg, pinned_rev = self.experiment_db.repo_backend.request_rev(
143+
expid["repo_rev"]
144+
)
145+
# Mutate expid's repo_rev to that returned from request_rev, in case
146+
# a branch was passed instead of a hash
147+
expid["repo_rev"] = pinned_rev
144148
else:
145149
if "file" in expid:
146150
expid["file"] = os.path.abspath(expid["file"])

0 commit comments

Comments
 (0)