/**
  * Get MASTER branch
  *
  * @return string|bool
  */
 protected function getMasterBranch()
 {
     $this->wc = new WorkingCopy($this->path);
     $url = $this->wc->getURL();
     // Find the current branch name
     $current_branch = "trunk";
     $matches = array();
     if (preg_match("@/branches/(.*)@", $url, $matches)) {
         $current_branch = $matches[1];
     }
     $this->master_branch = $current_branch;
     $this->out($this->output, "Current MASTER branch: '<b>{$this->master_branch}</b>'");
     if (!$this->allow_trunk && $this->master_branch == "trunk") {
         $this->out($this->output, "<error>Cannot perform operation: MASTER branch is TRUNK.</error>");
         return false;
     }
     return $this->master_branch;
 }
 /**
  * @see parent::execute()
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $branch = $input->getArgument('branch');
     $path = $input->getOption('path');
     if (!is_dir($path)) {
         throw new InvalidArgumentException("'{$path}' is not a valid directory");
     }
     $wc = new WorkingCopy($path);
     $url = $wc->getURL();
     // Find the current branch name
     $current_branch = "trunk";
     $matches = array();
     if (preg_match("@/branches/(.*)@", $url, $matches)) {
         $current_branch = $matches[1];
     }
     $this->out($output, "Current branch: '<b>{$current_branch}</b>'");
     if (!$branch) {
         $branch = $this->getBranch($current_branch, $wc, $output);
     }
     if ($branch != "trunk") {
         $branch = "branches/{$branch}";
     }
     // Switch externals
     $paths = array(".", "modules");
     foreach ($paths as $_path) {
         $this->switchExternal($wc, $branch, $_path, $output);
     }
     $this->out($output, "Externals switched successfuly");
     // Switch working copy ...
     $new_url = $wc->getRepository()->getURL() . "/" . $branch;
     $this->out($output, "Switching working copy to '<b>{$branch}</b>' ...");
     try {
         $wc->sw($new_url);
     } catch (\SVNClient\Exception $e) {
         $output->writeln("<error>" . $e->getMessage() . "</error>");
         return;
     }
     $this->out($output, "Working copy successfuly switched to '<b>{$branch}</b>'");
 }
 /**
  * @see parent::execute()
  */
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $path = $input->getOption('path');
     if (!is_dir($path)) {
         throw new InvalidArgumentException("'{$path}' is not a valid directory");
     }
     $wc = new WorkingCopy($path);
     $url = $wc->getURL();
     // Find the current branch name
     $current_branch = "trunk";
     $matches = array();
     if (preg_match("@/branches/(.*)@", $url, $matches)) {
         $current_branch = $matches[1];
     }
     $this->out($output, "Current branch: '<b>{$current_branch}</b>'");
     // Make GPL release.xml
     $dom_release = $this->getReleaseXML($wc, $path, $current_branch);
     file_put_contents("{$path}/release.xml", $dom_release->saveXML());
     $this->out($output, "release.xml file written in: '<b>{$path}/release.xml</b>'");
     $wc->add(array("{$path}/release.xml"));
     $this->out($output, "'<b>{$path}/release.xml</b>' added to version control");
     $other = $input->getOption("other");
     if ($other) {
         $base_path = dirname($other);
         $add_files = array();
         $other_wc = new WorkingCopy($base_path);
         $other_url = $other_wc->getURL();
         // Find the current branch name
         $other_branch = "trunk";
         $matches = array();
         if (preg_match("@/branches/(.*)/@", $other_url, $matches)) {
             $other_branch = $matches[1];
         }
         if ($other_branch != $current_branch) {
             $this->out($output, "<error>WARNING: current branch ({$current_branch}) is not the same as other branch ({$other_branch})</error>");
             return;
         }
         $list = glob($other);
         foreach ($list as $_path) {
             $_dom_release = $this->getReleaseXML($other_wc, $_path, $other_branch);
             file_put_contents("{$_path}/release.xml", $_dom_release->saveXML());
             $add_files[] = "{$_path}/release.xml";
             $this->out($output, "release.xml file written in: '<b>{$_path}/release.xml</b>'");
         }
         $other_wc->add($add_files);
         $this->out($output, count($add_files) . " files added to version control, <b>ready to commit</b> !");
     }
 }