prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  dbt clean regression
  ### Describe the bug
  In dbt 0.16.1 `dbt clean` fails without a profile: 
  
  ```bash
  (dbt) dbt$ dbt --version
  installed version: 0.16.1
     latest version: 0.17.0
  
  Your version of dbt is out of date! You can find instructions for upgrading here:
  https://docs.getdbt.com/docs/installation
  (dbt) dbt$ dbt clean
  Running with dbt=0.16.1
  Encountered an error while reading the project:
    ERROR: Runtime Error
    Could not find profile named 'profile'
  Encountered an error:
  Runtime Error
    Could not run dbt
  ```
  
  In dbt 0.15.1, `dbt clean` works.
  
  ```bash
  (dbt) dbt$ dbt --version
  installed version: 0.15.1
     latest version: 0.17.0
  
  Your version of dbt is out of date! You can find instructions for upgrading here:
  https://docs.getdbt.com/docs/installation
  (dbt) dbt$ dbt clean
  Running with dbt=0.15.1
  Checking target/*
   Cleaned target/*
  Finished cleaning all paths.
  ```
  
  ### Steps To Reproduce
  Delete any profile found in `~/.dbt/profile.yml`. 
  
  Install 0.16.1:
  ```bash
  pip install dbt==0.16.1
  ```
  Navigate to dbt project:
  ```
  dbt clean
  ```
  
  Repeat for 0.15.1 to confirm regression.
  
  ### Expected behavior
  I expected `dbt clean` to work without a profile. This broke some of our automated jobs when we tried to upgrade.
  
  ### System information
  **Which database are you using dbt with?**
  - [ ] postgres
  - [X] redshift
  - [ ] bigquery
  - [ ] snowflake
  - [ ] other (specify: ____________)
  
  
  **The output of `dbt --version`:**
  Multiple versions. See above.
  
  **The operating system you're using:**
  macOS 10.14.6
  
  **The output of `python --version`:**
  ```
  (dbt) dbt$ python --version
  Python 3.7.3
  ```
  
  ### Additional context
  Most people probably don't run `dbt clean` without a profile, but it was causing us confusion, so wanted to document it as a breaking change at least.
  
  I also tested this with 0.17.0: same error as 0.16.1.
  
  ```
  (dbt) dbt$ dbt --version
  installed version: 0.17.0
     latest version: 0.17.0
  
  Up to date!
  
  Plugins:
    - bigquery: 0.17.0
    - snowflake: 0.17.0
    - redshift: 0.17.0
    - postgres: 0.17.0
  (dbt) dbt$ dbt clean
  Running with dbt=0.17.0
  Encountered an error while reading the project:
    ERROR: Runtime Error
    Could not find profile named 'profile'
  Encountered an error:
  Runtime Error
    Could not run dbt
  ```
  
  
  </issue>
  <code>
  [start of core/dbt/task/clean.py]
  1 import os.path
  2 import os
  3 import shutil
  4 
  5 from dbt.task.base import ConfiguredTask
  6 from dbt.logger import GLOBAL_LOGGER as logger
  7 
  8 
  9 class CleanTask(ConfiguredTask):
  10 
  11     def __is_project_path(self, path):
  12         proj_path = os.path.abspath('.')
  13         return not os.path.commonprefix(
  14             [proj_path, os.path.abspath(path)]
  15         ) == proj_path
  16 
  17     def __is_protected_path(self, path):
  18         """
  19         This function identifies protected paths, so as not to clean them.
  20         """
  21         abs_path = os.path.abspath(path)
  22         protected_paths = self.config.source_paths + \
  23             self.config.test_paths + ['.']
  24         protected_abs_paths = [os.path.abspath(p) for p in protected_paths]
  25         return abs_path in set(protected_abs_paths) or \
  26             self.__is_project_path(abs_path)
  27 
  28     def run(self):
  29         """
  30         This function takes all the paths in the target file
  31         and cleans the project paths that are not protected.
  32         """
  33         for path in self.config.clean_targets:
  34             logger.info("Checking {}/*".format(path))
  35             if not self.__is_protected_path(path):
  36                 shutil.rmtree(path, True)
  37                 logger.info(" Cleaned {}/*".format(path))
  38             else:
  39                 logger.info("ERROR: not cleaning {}/* because it is "
  40                             "protected".format(path))
  41         logger.info("Finished cleaning all paths.")
  42
  [end of core/dbt/task/clean.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/core/dbt/task/clean.py b/core/dbt/task/clean.py
  --- a/core/dbt/task/clean.py
  +++ b/core/dbt/task/clean.py
  @@ -2,11 +2,13 @@
   import os
   import shutil
   
  -from dbt.task.base import ConfiguredTask
  +from dbt.task.base import BaseTask
   from dbt.logger import GLOBAL_LOGGER as logger
  +from dbt.config import UnsetProfileConfig
   
   
  -class CleanTask(ConfiguredTask):
  +class CleanTask(BaseTask):
  +    ConfigType = UnsetProfileConfig
   
       def __is_project_path(self, path):
           proj_path = os.path.abspath('.')
  
verification_info: {"golden_diff": "diff --git a/core/dbt/task/clean.py b/core/dbt/task/clean.py\n--- a/core/dbt/task/clean.py\n+++ b/core/dbt/task/clean.py\n@@ -2,11 +2,13 @@\n import os\n import shutil\n \n-from dbt.task.base import ConfiguredTask\n+from dbt.task.base import BaseTask\n from dbt.logger import GLOBAL_LOGGER as logger\n+from dbt.config import UnsetProfileConfig\n \n \n-class CleanTask(ConfiguredTask):\n+class CleanTask(BaseTask):\n+    ConfigType = UnsetProfileConfig\n \n     def __is_project_path(self, path):\n         proj_path = os.path.abspath('.')\n", "issue": "dbt clean regression\n### Describe the bug\r\nIn dbt 0.16.1 `dbt clean` fails without a profile: \r\n\r\n```bash\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.16.1\r\n   latest version: 0.17.0\r\n\r\nYour version of dbt is out of date! You can find instructions for upgrading here:\r\nhttps://docs.getdbt.com/docs/installation\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.16.1\r\nEncountered an error while reading the project:\r\n  ERROR: Runtime Error\r\n  Could not find profile named 'profile'\r\nEncountered an error:\r\nRuntime Error\r\n  Could not run dbt\r\n```\r\n\r\nIn dbt 0.15.1, `dbt clean` works.\r\n\r\n```bash\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.15.1\r\n   latest version: 0.17.0\r\n\r\nYour version of dbt is out of date! You can find instructions for upgrading here:\r\nhttps://docs.getdbt.com/docs/installation\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.15.1\r\nChecking target/*\r\n Cleaned target/*\r\nFinished cleaning all paths.\r\n```\r\n\r\n### Steps To Reproduce\r\nDelete any profile found in `~/.dbt/profile.yml`. \r\n\r\nInstall 0.16.1:\r\n```bash\r\npip install dbt==0.16.1\r\n```\r\nNavigate to dbt project:\r\n```\r\ndbt clean\r\n```\r\n\r\nRepeat for 0.15.1 to confirm regression.\r\n\r\n### Expected behavior\r\nI expected `dbt clean` to work without a profile. This broke some of our automated jobs when we tried to upgrade.\r\n\r\n### System information\r\n**Which database are you using dbt with?**\r\n- [ ] postgres\r\n- [X] redshift\r\n- [ ] bigquery\r\n- [ ] snowflake\r\n- [ ] other (specify: ____________)\r\n\r\n\r\n**The output of `dbt --version`:**\r\nMultiple versions. See above.\r\n\r\n**The operating system you're using:**\r\nmacOS 10.14.6\r\n\r\n**The output of `python --version`:**\r\n```\r\n(dbt) dbt$ python --version\r\nPython 3.7.3\r\n```\r\n\r\n### Additional context\r\nMost people probably don't run `dbt clean` without a profile, but it was causing us confusion, so wanted to document it as a breaking change at least.\r\n\r\nI also tested this with 0.17.0: same error as 0.16.1.\r\n\r\n```\r\n(dbt) dbt$ dbt --version\r\ninstalled version: 0.17.0\r\n   latest version: 0.17.0\r\n\r\nUp to date!\r\n\r\nPlugins:\r\n  - bigquery: 0.17.0\r\n  - snowflake: 0.17.0\r\n  - redshift: 0.17.0\r\n  - postgres: 0.17.0\r\n(dbt) dbt$ dbt clean\r\nRunning with dbt=0.17.0\r\nEncountered an error while reading the project:\r\n  ERROR: Runtime Error\r\n  Could not find profile named 'profile'\r\nEncountered an error:\r\nRuntime Error\r\n  Could not run dbt\r\n```\r\n\n", "before_files": [{"content": "import os.path\nimport os\nimport shutil\n\nfrom dbt.task.base import ConfiguredTask\nfrom dbt.logger import GLOBAL_LOGGER as logger\n\n\nclass CleanTask(ConfiguredTask):\n\n    def __is_project_path(self, path):\n        proj_path = os.path.abspath('.')\n        return not os.path.commonprefix(\n            [proj_path, os.path.abspath(path)]\n        ) == proj_path\n\n    def __is_protected_path(self, path):\n        \"\"\"\n        This function identifies protected paths, so as not to clean them.\n        \"\"\"\n        abs_path = os.path.abspath(path)\n        protected_paths = self.config.source_paths + \\\n            self.config.test_paths + ['.']\n        protected_abs_paths = [os.path.abspath(p) for p in protected_paths]\n        return abs_path in set(protected_abs_paths) or \\\n            self.__is_project_path(abs_path)\n\n    def run(self):\n        \"\"\"\n        This function takes all the paths in the target file\n        and cleans the project paths that are not protected.\n        \"\"\"\n        for path in self.config.clean_targets:\n            logger.info(\"Checking {}/*\".format(path))\n            if not self.__is_protected_path(path):\n                shutil.rmtree(path, True)\n                logger.info(\" Cleaned {}/*\".format(path))\n            else:\n                logger.info(\"ERROR: not cleaning {}/* because it is \"\n                            \"protected\".format(path))\n        logger.info(\"Finished cleaning all paths.\")\n", "path": "core/dbt/task/clean.py"}]}