Преглед изворни кода

Deprecated --enable-direct-io option.

Modified DeprecatedOptionHandler so that it can have replacing
OptionHandler.
Tatsuhiro Tsujikawa пре 14 година
родитељ
комит
dbf4f553ca
4 измењених фајлова са 49 додато и 14 уклоњено
  1. 8 5
      src/OptionHandlerFactory.cc
  2. 11 7
      src/OptionHandlerImpl.cc
  3. 8 2
      src/OptionHandlerImpl.h
  4. 22 0
      test/OptionHandlerTest.cc

+ 8 - 5
src/OptionHandlerFactory.cc

@@ -218,11 +218,14 @@ OptionHandlers OptionHandlerFactory::createOptionHandlers()
 #endif // ENABLE_ASYNC_DNS
 #ifdef ENABLE_DIRECT_IO
   {
-    SharedHandle<OptionHandler> op(new BooleanOptionHandler
-                                   (PREF_ENABLE_DIRECT_IO,
-                                    TEXT_ENABLE_DIRECT_IO,
-                                    A2_V_TRUE,
-                                    OptionHandler::OPT_ARG));
+    // TODO Deprecated
+    SharedHandle<OptionHandler> op
+      (new DeprecatedOptionHandler
+       (SharedHandle<OptionHandler>(new BooleanOptionHandler
+                                    (PREF_ENABLE_DIRECT_IO,
+                                     TEXT_ENABLE_DIRECT_IO,
+                                     A2_V_TRUE,
+                                     OptionHandler::OPT_ARG))));
     op->addTag(TAG_ADVANCED);
     op->addTag(TAG_FILE);
     handlers.push_back(op);

+ 11 - 7
src/OptionHandlerImpl.cc

@@ -738,8 +738,8 @@ std::string PrioritizePieceOptionHandler::createPossibleValuesString() const
 
 DeprecatedOptionHandler::DeprecatedOptionHandler
 (const SharedHandle<OptionHandler>& depOptHandler,
- const std::string& repOptName)
-  : depOptHandler_(depOptHandler), repOptName_(repOptName)
+ const SharedHandle<OptionHandler>& repOptHandler)
+  : depOptHandler_(depOptHandler), repOptHandler_(repOptHandler)
 {}
 
 bool DeprecatedOptionHandler::canHandle(const std::string& optName)
@@ -749,11 +749,15 @@ bool DeprecatedOptionHandler::canHandle(const std::string& optName)
 
 void DeprecatedOptionHandler::parse(Option& option, const std::string& arg)
 {
-  A2_LOG_WARN(fmt("--%s option is deprecated. Use --%s option instead.",
-                  depOptHandler_->getName().c_str(),
-                  repOptName_.c_str()));
-  depOptHandler_->parse(option, arg);
-  option.put(repOptName_, option.get(depOptHandler_->getName()));
+  if(repOptHandler_) {
+    A2_LOG_WARN(fmt(_("--%s option is deprecated. Use --%s option instead."),
+                    depOptHandler_->getName().c_str(),
+                    repOptHandler_->getName().c_str()));
+    repOptHandler_->parse(option, arg);
+  } else {
+    A2_LOG_WARN(fmt(_("--%s option is deprecated."),
+                    depOptHandler_->getName().c_str()));
+  }
 }
 
 std::string DeprecatedOptionHandler::createPossibleValuesString() const

+ 8 - 2
src/OptionHandlerImpl.h

@@ -294,14 +294,20 @@ public:
   virtual std::string createPossibleValuesString() const;
 };
 
+// This class is used to deprecate option and optionally handle its
+// option value using replacing option.
 class DeprecatedOptionHandler:public OptionHandler {
 private:
   SharedHandle<OptionHandler> depOptHandler_;
-  std::string repOptName_;
+  SharedHandle<OptionHandler> repOptHandler_;
 public:
+  // depOptHandler is deprecated option and repOptHandler is replacing
+  // new option. If there is no replacing option, omit second
+  // argument.
   DeprecatedOptionHandler
   (const SharedHandle<OptionHandler>& depOptHandler,
-   const std::string& repOptName);
+   const SharedHandle<OptionHandler>& repOptHandler =
+   SharedHandle<OptionHandler>());
   virtual bool canHandle(const std::string& optName);
   virtual void parse(Option& option, const std::string& arg);
   virtual std::string createPossibleValuesString() const;

+ 22 - 0
test/OptionHandlerTest.cc

@@ -29,6 +29,7 @@ class OptionHandlerTest:public CppUnit::TestFixture {
   CPPUNIT_TEST(testHttpProxyOptionHandler);
   CPPUNIT_TEST(testHttpProxyUserOptionHandler);
   CPPUNIT_TEST(testHttpProxyPasswdOptionHandler);
+  CPPUNIT_TEST(testDeprecatedOptionHandler);
   CPPUNIT_TEST_SUITE_END();
   
 public:
@@ -50,6 +51,7 @@ public:
   void testHttpProxyOptionHandler();
   void testHttpProxyUserOptionHandler();
   void testHttpProxyPasswdOptionHandler();
+  void testDeprecatedOptionHandler();
 };
 
 
@@ -420,4 +422,24 @@ void OptionHandlerTest::testHttpProxyPasswdOptionHandler()
   
 }
 
+void OptionHandlerTest::testDeprecatedOptionHandler()
+{
+  {
+    DeprecatedOptionHandler handler
+      (SharedHandle<OptionHandler>(new DefaultOptionHandler("dep")));
+    Option option;
+    handler.parse(option, "foo");
+    CPPUNIT_ASSERT(!option.defined("dep"));
+  }
+  {
+    DeprecatedOptionHandler handler
+      (SharedHandle<OptionHandler>(new DefaultOptionHandler("dep")),
+       SharedHandle<OptionHandler>(new DefaultOptionHandler("rep")));
+    Option option;
+    handler.parse(option, "foo");
+    CPPUNIT_ASSERT(!option.defined("dep"));
+    CPPUNIT_ASSERT_EQUAL(std::string("foo"), option.get("rep"));
+  }
+}
+
 } // namespace aria2