فهرست منبع

deleted the repository, added a config command that current will just list the config for either file and open vim to edit the file

Joshua Estes 12 سال پیش
والد
کامیت
6386921f99
3فایلهای تغییر یافته به همراه134 افزوده شده و 130 حذف شده
  1. 133 0
      src/Composer/Command/ConfigCommand.php
  2. 0 129
      src/Composer/Command/ConfigRepositoriesAddCommand.php
  3. 1 1
      src/Composer/Console/Application.php

+ 133 - 0
src/Composer/Command/ConfigCommand.php

@@ -0,0 +1,133 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Command;
+
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Composer\Config;
+use Composer\Factory;
+use Composer\Json\JsonFile;
+
+class ConfigCommand extends Command
+{
+    /**
+     * @var array
+     */
+    protected $repositories = array();
+
+    /**
+     * @var Composer\Json\JsonFile
+     */
+    protected $configFile;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('config')
+            ->setDescription('Set config options')
+            ->setDefinition(array(
+                new InputOption('global', 'g', InputOption::VALUE_NONE, 'Set this as a global config settings.'),
+                new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'),
+                new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'),
+                // @todo insert argument here
+            ))
+            ->setHelp(<<<EOT
+
+EOT
+            )
+        ;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function initialize(InputInterface $input, OutputInterface $output)
+    {
+        // Get the local composer.json or the global config.json
+        $this->configFile = $input->getOption('global')
+            ? (Factory::createConfig()->get('home') . '/config.json')
+            : 'composer.json';
+
+        $this->configFile = new JsonFile($this->configFile);
+        if (!$this->configFile->exists()) {
+            touch($this->configFile->getPath());
+            // If you read an empty file, Composer throws an error
+            // Toss some of the defaults in there
+            $defaults = Config::$defaultConfig;
+            $defaults['repositories'] = Config::$defaultRepositories;
+            $this->configFile->write($defaults);
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        // Open file in editor
+        if ($input->getOption('editor')) {
+            // @todo Find a way to use another editor
+            $editor = 'vim';
+            system($editor . ' ' . $this->configFile->getPath() . ' > `tty`');
+            return 0;
+        }
+
+        // List the configuration of the file settings
+        if ($input->getOption('list')) {
+            $this->displayFileContents($this->configFile->read(), $output);
+            return 0;
+        }
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function interact(InputInterface $input, OutputInterface $output)
+    {
+    }
+
+    /**
+     * Display the contents of the file in a pretty formatted way
+     *
+     * @param array           $contents
+     * @param OutputInterface $output
+     * @param integer         $depth
+     * @param string|null     $k
+     */
+    protected function displayFileContents(array $contents, OutputInterface $output, &$depth = 0, $k = null)
+    {
+        // @todo Look into a way to refactor this code, as it is right now, I
+        //       don't like it
+        foreach ($contents as $key => $value) {
+            if (is_array($value)) {
+                $depth++;
+                $k .= $key . '.';
+                $this->displayFileContents($value, $output, $depth, $k);
+                if (substr_count($k,'.') > 1) {
+                    $k = str_split($k,strrpos($k,'.',-2));
+                    $k = $k[0] . '.';
+                } else { $k = null; }
+                $depth--;
+                continue;
+            }
+            $output->writeln('[<comment>' . $k . $key . '</comment>] <info>' . $value . '</info>');
+        }
+    }
+}
+
+

+ 0 - 129
src/Composer/Command/ConfigRepositoriesAddCommand.php

@@ -1,129 +0,0 @@
-<?php
-
-/*
- * This file is part of Composer.
- *
- * (c) Nils Adermann <naderman@naderman.de>
- *     Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Composer\Command;
-
-use Symfony\Component\Console\Input\InputInterface;
-use Symfony\Component\Console\Input\InputArgument;
-use Symfony\Component\Console\Input\InputOption;
-use Symfony\Component\Console\Output\OutputInterface;
-use Composer\Factory;
-use Composer\Installer;
-use Composer\Json\JsonFile;
-
-class ConfigRepositoriesAddCommand extends Command
-{
-    /**
-     * @var array
-     */
-    protected $repositories = array();
-
-    /**
-     * {@inheritDoc}
-     */
-    protected function configure()
-    {
-        // @todo Make it so the user can pass into this command an array
-        $this
-            ->setName('config:repositories:add')
-            ->setDescription('Add a repository')
-            ->setDefinition(array(
-                new InputOption('global', 'g', InputOption::VALUE_NONE, 'Set this as a global config settings.')
-            ))
-            ->setHelp(<<<EOT
-By running this command you may add a repository of a given type to either your
-local composer.json file or to the global composer config file.
-
-EOT
-            )
-        ;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected function execute(InputInterface $input, OutputInterface $output)
-    {
-        // Get the local composer.json or the global config.json
-        $configFile = $input->getOption('global')
-            ? (Factory::createConfig()->get('home') . '/config.json')
-            : 'composer.json';
-
-        $configFile = new JsonFile($configFile);
-        if (!$configFile->exists()) {
-            touch($globalConfig->getPath());
-            // If you read an empty file, Composer throws an error
-            $globalConfig->write(array());
-        }
-
-        // Make sure we have something to add
-        if (count($this->repositories)) {
-            // @todo Check and make sure the type/url combo does not
-            //       alredy exist.
-            $config = $configFile->read();
-            foreach ($this->repositories as $repo) {
-                $config['repositories'][] = array(
-                    'type' => $repo['type'],
-                    'url'  => $repo['url'],
-                );
-            }
-
-            if ($input->isInteractive()) {
-                $output->writeln(array(
-                    '',
-                    JsonFile::encode($config),
-                    '',
-                ));
-                $dialog = $this->getHelperSet()->get('dialog');
-                if (!$dialog->askConfirmation($output, $dialog->getQuestion('Do you want to continuw and save the repositories', 'yes', '?'), true)) {
-                    $output->writeln('<error>Command aborted by the user.</error>');
-                    return 1;
-                }
-            }
-            $configFile->write($config);
-        } else {
-            $output->writeln('<info>No repositories have been added.</info>');
-        }
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    protected function interact(InputInterface $input, OutputInterface $output)
-    {
-        $dialog = $this->getHelperSet()->get('dialog');
-
-        $output->writeln(array(
-            '',
-            'With this command you can add as many repositories to either the',
-            'local composer.json file or the global composer config file.',
-            '',
-            'Type can be any of the following: composer, vcs, pear, package',
-            '',
-            'For more information see docs: http://getcomposer.org/doc/05-repositories.md',
-            '',
-        ));
-
-        do {
-            $type = $dialog->ask($output, $dialog->getQuestion('Repository Type'));
-            $repo = $dialog->ask($output, $dialog->getQuestion('Repository URL'));
-            if (null === $type && null === $repo) {
-                break;
-            }
-            $this->repositories[] = array(
-                'type' => $type,
-                'url'  => $repo,
-            );
-        } while(true);
-    }
-}
-

+ 1 - 1
src/Composer/Console/Application.php

@@ -155,7 +155,7 @@ class Application extends BaseApplication
     {
         $commands = parent::getDefaultCommands();
         $commands[] = new Command\AboutCommand();
-        $commands[] = new Command\ConfigRepositoriesAddCommand();
+        $commands[] = new Command\ConfigCommand();
         $commands[] = new Command\DependsCommand();
         $commands[] = new Command\InitCommand();
         $commands[] = new Command\InstallCommand();