# Buggy code
def __init__(self, path, errno, **kwargs):
    kwargs.update(
        {
            "path": path,
            "errno": errno,
        }
    )
    if on_win:
        message = dals("""
            The current user does not have write permissions to a required path.
              path: %(path)s
            """)
    else:
        message = dals("""
            The current user does not have write permissions to a required path.
              path: %(path)s
              uid: %(uid)s
              gid: %(gid)s

            If you feel that permissions on this path are set incorrectly, you can manually
            change them by executing

              $ sudo chown %(uid)s:%(gid)s %(path)s
            """)
        import os

        kwargs.update(
            {
                "uid": os.geteuid(),
                "gid": os.getegid(),
            }
        )
    super(NotWritableError, self).__init__(message, **kwargs)


# Traceback (FileNotFoundError)
error: PermissionError(13, 'Permission denied')
command: /home/jing/anaconda3/bin/conda upgrade Requests
user_agent: conda/4.4.3 requests/2.18.4 CPython/3.6.1 Linux/4.13.0-21-generic ubuntu/17.10 glibc/2.26
_messageid: -9223372036845975622
_messagetime: 1513948198000 / 2017-12-22 07:09:58
_receipttime: 1513993708752 / 2017-12-22 19:48:28

Traceback (most recent call last):
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 268, in _make_single_record
repodata_record = read_repodata_json(extracted_package_dir)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/gateways/disk/read.py", line 123, in read_repodata_json
with open(join(extracted_package_directory, 'info', 'repodata_record.json')) as fi:
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/common/compat.py", line 120, in open
closefd=closefd)
FileNotFoundError: [Errno 2] No such file or directory: '/home/jing/anaconda3/pkgs/conda-4.3.31-py36_0/info/repodata_record.json'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/exceptions.py", line 722, in __call__
return func(*args, **kwargs)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/cli/main.py", line 78, in _main
exit_code = do_call(args, p)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/cli/conda_argparse.py", line 75, in do_call
exit_code = getattr(module, func_name)(args, parser)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/cli/main_update.py", line 14, in execute
install(args, parser, 'update')
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/cli/install.py", line 239, in install
handle_txn(progressive_fetch_extract, unlink_link_transaction, prefix, args, newenv)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/cli/install.py", line 256, in handle_txn
unlink_link_transaction.display_actions(progressive_fetch_extract)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/link.py", line 706, in display_actions
legacy_action_groups = self.make_legacy_action_groups(pfe)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/link.py", line 689, in make_legacy_action_groups
pfe.prepare()
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/common/io.py", line 415, in decorated
return f(*args, **kwds)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 525, in prepare
for prec in self.link_precs)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 525, in <genexpr>
for prec in self.link_precs)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 419, in make_actions_for_record
), None)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 416, in <genexpr>
pcrec for pcrec in concat(PackageCache(pkgs_dir).query(pref_or_spec)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 417, in <genexpr>
for pkgs_dir in context.pkgs_dirs)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 116, in query
return (pcrec for pcrec in itervalues(self._package_cache_records) if pcrec == param)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 209, in _package_cache_records
self.load()
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 88, in load
package_cache_record = self._make_single_record(base_name)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/core/package_cache.py", line 339, in _make_single_record
write_as_json_to_file(repodata_record_path, repodata_record)
File "/home/jing/anaconda3/lib/python3.6/site-packages/conda/gateways/disk/create.py", line 61, in write_as_json_to_file
with open(file_path, str('wb')) as fo:
PermissionError: [Errno 13] Permission denied: '/home/jing/anaconda3/pkgs/conda-4.3.31-py36_0/info/repodata_record.json'

# Fixed code
def __init__(self, path, errno, **kwargs):
    kwargs.update(
        {
            "path": path,
            "errno": errno,
        }
    )
    if on_win:
        message = dals("""
            The current user does not have write permissions to a required path.
              path: %(path)s
            """)
    else:
        message = dals("""
            The current user does not have write permissions to a required path.
              path: %(path)s
              uid: %(uid)s
              gid: %(gid)s

            If you feel that permissions on this path are set incorrectly, you can manually
            change them by executing

              $ sudo chown %(uid)s:%(gid)s %(path)s

            In general, it's not advisable to use 'sudo conda'.
            """)
        import os

        kwargs.update(
            {
                "uid": os.geteuid(),
                "gid": os.getegid(),
            }
        )
    super(NotWritableError, self).__init__(message, **kwargs)