forked from M-Labs/artiq
master,client: support scanning specific repo revisions
This commit is contained in:
parent
671a3f1833
commit
400b414885
|
@ -87,8 +87,11 @@ def get_argparser():
|
||||||
"what",
|
"what",
|
||||||
help="select object to show: schedule/log/devices/parameters")
|
help="select object to show: schedule/log/devices/parameters")
|
||||||
|
|
||||||
subparsers.add_parser("scan-repository",
|
parser_scan = subparsers.add_parser("scan-repository",
|
||||||
help="trigger a repository rescan")
|
help="trigger a repository (re)scan")
|
||||||
|
parser_scan.add_argument("revision", default=None, nargs="?",
|
||||||
|
help="use a specific repository revision "
|
||||||
|
"(defaults to head)")
|
||||||
|
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
@ -145,7 +148,7 @@ def _action_del_parameter(remote, args):
|
||||||
|
|
||||||
|
|
||||||
def _action_scan_repository(remote, args):
|
def _action_scan_repository(remote, args):
|
||||||
remote.scan_async()
|
remote.scan_async(args.revision)
|
||||||
|
|
||||||
|
|
||||||
def _show_schedule(schedule):
|
def _show_schedule(schedule):
|
||||||
|
|
|
@ -57,33 +57,34 @@ class Repository:
|
||||||
self.backend = backend
|
self.backend = backend
|
||||||
self.log_fn = log_fn
|
self.log_fn = log_fn
|
||||||
|
|
||||||
self.head_rev = self.backend.get_head_rev()
|
self.cur_rev = self.backend.get_head_rev()
|
||||||
self.backend.request_rev(self.head_rev)
|
self.backend.request_rev(self.cur_rev)
|
||||||
self.explist = Notifier(dict())
|
self.explist = Notifier(dict())
|
||||||
|
|
||||||
self._scanning = False
|
self._scanning = False
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
# The object cannot be used anymore after calling this method.
|
# The object cannot be used anymore after calling this method.
|
||||||
self.backend.release_rev(self.head_rev)
|
self.backend.release_rev(self.cur_rev)
|
||||||
|
|
||||||
@asyncio.coroutine
|
@asyncio.coroutine
|
||||||
def scan(self):
|
def scan(self, new_cur_rev=None):
|
||||||
if self._scanning:
|
if self._scanning:
|
||||||
return
|
return
|
||||||
self._scanning = True
|
self._scanning = True
|
||||||
|
|
||||||
new_head_rev = self.backend.get_head_rev()
|
if new_cur_rev is None:
|
||||||
wd, _ = self.backend.request_rev(new_head_rev)
|
new_cur_rev = self.backend.get_head_rev()
|
||||||
self.backend.release_rev(self.head_rev)
|
wd, _ = self.backend.request_rev(new_cur_rev)
|
||||||
self.head_rev = new_head_rev
|
self.backend.release_rev(self.cur_rev)
|
||||||
|
self.cur_rev = new_cur_rev
|
||||||
new_explist = yield from _scan_experiments(wd, self.log_fn)
|
new_explist = yield from _scan_experiments(wd, self.log_fn)
|
||||||
|
|
||||||
_sync_explist(self.explist, new_explist)
|
_sync_explist(self.explist, new_explist)
|
||||||
self._scanning = False
|
self._scanning = False
|
||||||
|
|
||||||
def scan_async(self):
|
def scan_async(self, new_cur_rev=None):
|
||||||
asyncio.async(self.scan())
|
asyncio.async(self.scan(new_cur_rev))
|
||||||
|
|
||||||
|
|
||||||
class FilesystemBackend:
|
class FilesystemBackend:
|
||||||
|
|
Loading…
Reference in New Issue