+def pin_channel(v: Verification, channel: Channel) -> None:
+ fetch(v, channel)
+ parse_channel(v, channel)
+ fetch_resources(v, channel)
+ ensure_git_rev_available(v, channel)
+ check_channel_contents(v, channel)
+
+
+def git_revision_name(v: Verification, channel: Channel) -> str:
+ v.status('Getting commit date')
+ process = subprocess.run(['git',
+ '-C',
+ git_cachedir(channel.git_repo),
+ 'lo',
+ '-n1',
+ '--format=%ct-%h',
+ '--abbrev=11',
+ channel.git_revision],
+ capture_output=True)
+ v.result(process.returncode == 0 and process.stdout != '')
+ return '%s-%s' % (os.path.basename(channel.git_repo),
+ process.stdout.decode().strip())
+
+
+def make_channel(conf: configparser.SectionProxy) -> Channel:
+ channel = Channel(**dict(conf.items()))
+ if hasattr(channel, 'git_revision'):
+ channel.old_git_revision = channel.git_revision
+ del channel.git_revision
+ return channel
+
+
+def pin(args: argparse.Namespace) -> None: