BF/RF: mv is_remote_annex_ignored to AnnexRepo, make siblings command not puke if not yet annex-ignored
Yaroslav Halchenko
6 years ago
237 | 237 | else: |
238 | 238 | self._cfg = self.repo.config |
239 | 239 | return self._cfg |
240 | ||
241 | def is_remote_annex_ignored(self, remote): | |
242 | """Return True if remote is explicitly ignored""" | |
243 | return self.config.getbool( | |
244 | 'remote.{}'.format(remote), 'annex-ignore', | |
245 | default=False | |
246 | ) | |
247 | 240 | |
248 | 241 | def get_subdatasets(self, pattern=None, fulfilled=None, absolute=False, |
249 | 242 | recursive=False, recursion_limit=None, edges=False): |
68 | 68 | is_annex_repo = isinstance(ds.repo, AnnexRepo) |
69 | 69 | |
70 | 70 | def _publish_data(): |
71 | if ds.is_remote_annex_ignored(remote): | |
71 | if ds.repo.is_remote_annex_ignored(remote): | |
72 | 72 | return [], [] # Cannot publish any data |
73 | 73 | try: |
74 | 74 | remote_wanted = ds.repo.get_preferred_content('wanted', remote) |
75 | 75 | except CommandError as exc: |
76 | 76 | if "cannot determine uuid" in str(exc): |
77 | if not ds.is_remote_annex_ignored(remote): | |
77 | if not ds.repo.is_remote_annex_ignored(remote): | |
78 | 78 | lgr.warning( |
79 | 79 | "Annex failed to determine UUID, skipping publishing data for now: %s", |
80 | 80 | exc_str(exc) |
180 | 180 | # if annex_uuid is None: |
181 | 181 | # # most probably not yet 'known' and might require some annex |
182 | 182 | knew_remote_uuid = None |
183 | if is_annex_repo and not ds.is_remote_annex_ignored(remote): | |
183 | if is_annex_repo and not ds.repo.is_remote_annex_ignored(remote): | |
184 | 184 | try: |
185 | 185 | ds.repo.get_preferred_content('wanted', remote) # could be just checking config.remote.uuid |
186 | 186 | knew_remote_uuid = True |
288 | 288 | **dict( |
289 | 289 | res, |
290 | 290 | path=path, |
291 | with_annex='+' if 'annex-uuid' in res else '-', | |
291 | with_annex='+' if 'annex-uuid' in res \ | |
292 | else ('-' if res.get('annex-ignore', None) else '?'), | |
292 | 293 | spec=spec))) |
293 | 294 | |
294 | 295 | |
614 | 615 | if annex_description is not None: |
615 | 616 | info['annex-description'] = annex_description |
616 | 617 | if get_annex_info and isinstance(ds.repo, AnnexRepo): |
617 | if not ds.is_remote_annex_ignored(remote): | |
618 | for prop in ('wanted', 'required', 'group'): | |
619 | var = ds.repo.get_preferred_content( | |
620 | prop, '.' if remote == 'here' else remote) | |
621 | if var: | |
622 | info['annex-{}'.format(prop)] = var | |
623 | groupwanted = ds.repo.get_groupwanted(remote) | |
624 | if groupwanted: | |
625 | info['annex-groupwanted'] = groupwanted | |
618 | if not ds.repo.is_remote_annex_ignored(remote): | |
619 | try: | |
620 | for prop in ('wanted', 'required', 'group'): | |
621 | var = ds.repo.get_preferred_content( | |
622 | prop, '.' if remote == 'here' else remote) | |
623 | if var: | |
624 | info['annex-{}'.format(prop)] = var | |
625 | groupwanted = ds.repo.get_groupwanted(remote) | |
626 | if groupwanted: | |
627 | info['annex-groupwanted'] = groupwanted | |
628 | except CommandError as exc: | |
629 | if 'cannot determine uuid' in str(exc): | |
630 | # not an annex (or no connection), would be marked as | |
631 | # annex-ignore | |
632 | msg = "Failed to determine if %s carries annex." % remote | |
633 | ds.repo.config.reload() | |
634 | if ds.repo.is_remote_annex_ignored(remote): | |
635 | msg += " Remote was marked by annex as annex-ignore. " \ | |
636 | "Edit .git/config to reset if you think that was done by mistake due to absent connection etc" | |
637 | lgr.warning(msg) | |
638 | info['annex-ignore'] = True | |
639 | else: | |
640 | raise | |
626 | 641 | else: |
627 | 642 | info['annex-ignore'] = True |
628 | 643 |
866 | 866 | """Announce to annex that remote is "dead" |
867 | 867 | """ |
868 | 868 | return self._annex_custom_command([], ["git", "annex", "dead", name]) |
869 | ||
870 | def is_remote_annex_ignored(self, remote): | |
871 | """Return True if remote is explicitly ignored""" | |
872 | return self.config.getbool( | |
873 | 'remote.{}'.format(remote), 'annex-ignore', | |
874 | default=False | |
875 | ) | |
869 | 876 | |
870 | 877 | def is_special_annex_remote(self, remote, check_if_known=True): |
871 | 878 | """Return either remote is a special annex remote |