[devserver] Allow handling of clobber_stateful variable.

chromite/lib/autoupdater.py already has a clobber_stateful variable but
the devserver does not pass it to the constructor. We just leave it at the
default of True. autoupdate_EndToEndTest needs this to be False in certain
conditions so we will pass it in.

The if statement here allows this CL to be submitted now without waiting for
any other CLs to catch up and will not break provision_AutoUpdate.

BUG=chromium:709710
TEST=autoupdate_EndToEnd with this CL

Change-Id: Iac5aa7ca1349f282dd4ed1e31128f5dddd5bb30e
Reviewed-on: https://chromium-review.googlesource.com/554167
Commit-Ready: David Haddock <dhaddock@chromium.org>
Tested-by: David Haddock <dhaddock@chromium.org>
Reviewed-by: Xixuan Wu <xixuan@chromium.org>
Reviewed-by: Mike Frysinger <vapier@chromium.org>
diff --git a/cros_update.py b/cros_update.py
index c518ccc..528e51f 100644
--- a/cros_update.py
+++ b/cros_update.py
@@ -96,6 +96,9 @@
     self.parser.add_argument('--payload_filename', action='store', type=str,
                              dest='payload_filename', default='',
                              help='A custom payload filename')
+    self.parser.add_argument('--clobber_stateful', action='store_true',
+                             dest='clobber_stateful', default=False,
+                             help='Whether to clobber stateful')
 
   def ParseArgs(self):
     """Parse and process command line arguments."""
@@ -120,7 +123,8 @@
   """
   def __init__(self, host_name, build_name, static_dir, progress_tracker=None,
                log_file=None, au_tempdir=None, force_update=False,
-               full_update=False, original_build=None, payload_filename=None):
+               full_update=False, original_build=None, payload_filename=None,
+               clobber_stateful=True):
     self.host_name = host_name
     self.build_name = build_name
     self.static_dir = static_dir
@@ -131,6 +135,7 @@
     self.full_update = full_update
     self.original_build = original_build
     self.payload_filename = payload_filename
+    self.clobber_stateful = clobber_stateful
 
   def _WriteAUStatus(self, content):
     if self.progress_tracker:
@@ -207,7 +212,8 @@
             log_file=self.log_file,
             original_payload_dir=original_payload_dir,
             yes=True,
-            payload_filename=self.payload_filename)
+            payload_filename=self.payload_filename,
+            clobber_stateful=self.clobber_stateful)
         chromeos_AU.CheckPayloads()
 
         version_match = chromeos_AU.PreSetupCrOSUpdate()
@@ -307,7 +313,8 @@
       force_update=options.force_update,
       full_update=options.full_update,
       original_build=options.original_build,
-      payload_filename=options.payload_filename)
+      payload_filename=options.payload_filename,
+      clobber_stateful=options.clobber_stateful)
 
   # Set timeout the cros-update process.
   try:
diff --git a/devserver.py b/devserver.py
index fec5001..63bde9e 100755
--- a/devserver.py
+++ b/devserver.py
@@ -914,6 +914,7 @@
     async = _parse_boolean_arg(kwargs, 'async')
     original_build = _parse_string_arg(kwargs, 'original_build')
     payload_filename = _parse_string_arg(kwargs, 'payload_filename')
+    clobber_stateful = _parse_boolean_arg(kwargs, 'clobber_stateful')
 
     if async:
       path = os.path.dirname(os.path.abspath(__file__))
@@ -940,6 +941,9 @@
       if payload_filename:
         args = ('%s --payload_filename %s' % (args, payload_filename))
 
+      if clobber_stateful:
+        args = ('%s --clobber_stateful' % args)
+
       p = subprocess.Popen([args], shell=True, preexec_fn=os.setsid)
       pid = os.getpgid(p.pid)