function validate_ownership(Repository $repo, Contact $user, Contact $partner = null, MessageSet $ms = null)
 {
     $xpartner = $partner && $partner->seascode_username;
     if (!str_starts_with($this->base, "~") || !$user->seascode_username) {
         return -1;
     }
     if (preg_match('_\\A~(?:' . preg_quote($user->seascode_username) . ($partner ? "|" . preg_quote($partner->seascode_username) : "") . ')/_i', $this->base)) {
         return 1;
     }
     if ($ms) {
         $ms->set_error_html("ownership", $partner ? "This repository belongs to neither you nor your partner." : "This repository does not belong to you.");
     }
     return 0;
 }
 function validate_working(MessageSet $ms = null)
 {
     $status = RepositorySite::run_ls_remote($this->ssh_url(), $output);
     $answer = join("\n", $output);
     if ($status == 0 && $ms) {
         $ms->set_error_html("working", $this->expand_message("repo_unreadable", $ms->user));
     }
     if ($status > 0 && !preg_match(',^[0-9a-f]{40}\\s+refs/heads/master,m', $answer)) {
         if ($ms) {
             $ms->set_error_html("working", $this->expand_message("repo_nomaster", $ms->user));
         }
         $status = 0;
     }
     return $status;
 }