| Index: setup_links.py
|
| diff --git a/setup_links.py b/setup_links.py
|
| index a5b2ac95508dcc473127b294333010d839c85322..bc56a56a5b3c11f48e7122a3e8b3ff5b2aee155d 100755
|
| --- a/setup_links.py
|
| +++ b/setup_links.py
|
| @@ -13,9 +13,6 @@ WebRTC standalone shares a lot of dependencies and build tools with Chromium.
|
| To do this, many of the paths of a Chromium checkout is emulated by creating
|
| symlinks to files and directories. This script handles the setup of symlinks to
|
| achieve this.
|
| -
|
| -It also handles cleanup of the legacy Subversion-based approach that was used
|
| -before Chrome switched over their master repo from Subversion to Git.
|
| """
|
|
|
|
|
| @@ -248,15 +245,16 @@ class LinkError(IOError):
|
| pass
|
|
|
|
|
| -# Handles symlink creation on the different platforms.
|
| +# Use junctions instead of symlinks on the Windows platform.
|
| if sys.platform.startswith('win'):
|
| def symlink(source_path, link_path):
|
| - flag = 1 if os.path.isdir(source_path) else 0
|
| - if not ctypes.windll.kernel32.CreateSymbolicLinkW(
|
| - unicode(link_path), unicode(source_path), flag):
|
| - raise OSError('Failed to create symlink to %s. Notice that only NTFS '
|
| - 'version 5.0 and up has all the needed APIs for '
|
| - 'creating symlinks.' % source_path)
|
| + if os.path.isdir(source_path):
|
| + subprocess.check_call(['cmd.exe', '/c', 'mklink', '/J', link_path,
|
| + source_path])
|
| + else:
|
| + # Don't create symlinks to files on Windows, just copy the file instead
|
| + # (there's no way to create a link without administrator's privileges).
|
| + shutil.copy(source_path, link_path)
|
| os.symlink = symlink
|
|
|
|
|
| @@ -308,18 +306,10 @@ class WebRTCLinkSetup(object):
|
| A C T I O N R E Q I R E D
|
| @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
|
|
| - Because chromium/src is transitioning to Git (from SVN), we needed to
|
| - change the way that the WebRTC standalone checkout works. Instead of
|
| - individually syncing subdirectories of Chromium in SVN, we're now
|
| - syncing Chromium (and all of its DEPS, as defined by its own DEPS file),
|
| - into the `chromium/src` directory.
|
| -
|
| - As such, all Chromium directories which are currently pulled by DEPS are
|
| - now replaced with a symlink into the full Chromium checkout.
|
| -
|
| - To avoid disrupting developers, we've chosen to not delete your
|
| - directories forcibly, in case you have some work in progress in one of
|
| - them :).
|
| + Setting up the checkout requires creating symlinks to directories in the
|
| + Chromium checkout inside chromium/src.
|
| + To avoid disrupting developers, we've chosen to not delete directories
|
| + forcibly, in case you have some work in progress in one of them :)
|
|
|
| ACTION REQUIRED:
|
| Before running `gclient sync|runhooks` again, you must run:
|
| @@ -327,7 +317,7 @@ class WebRTCLinkSetup(object):
|
|
|
| Which will replace all directories which now must be symlinks, after
|
| prompting with a summary of the work-to-be-done.
|
| - """), 'python ' if sys.platform.startswith('win') else '', sys.argv[0])
|
| + """), 'python ' if sys.platform.startswith('win') else '', __file__)
|
| sys.exit(1)
|
| elif self._prompt:
|
| if not query_yes_no('Would you like to perform the above plan?'):
|
| @@ -365,8 +355,9 @@ class WebRTCLinkSetup(object):
|
| check_msg=None):
|
| """Create zero or more Actions to link to a file or directory.
|
|
|
| - This will be a symlink on POSIX platforms. On Windows this requires
|
| - that NTFS is version 5.0 or higher (Vista or newer).
|
| + This will be a symlink on POSIX platforms. On Windows it will result in:
|
| + * a junction for directories
|
| + * a copied file for single files.
|
|
|
| Args:
|
| source_path: Path relative to the Chromium checkout root.
|
| @@ -396,8 +387,8 @@ class WebRTCLinkSetup(object):
|
| source_path = fix_separators(source_path)
|
| source_path = os.path.join(CHROMIUM_CHECKOUT, source_path)
|
| if os.path.exists(source_path) and not check_fn:
|
| - raise LinkError('_LinkChromiumPath can only be used to link to %s: '
|
| - 'Tried to link to: %s' % (check_msg, source_path))
|
| + raise LinkError('Can only to link to %s: tried to link to: %s' %
|
| + (check_msg, source_path))
|
|
|
| if not os.path.exists(source_path):
|
| logging.debug('Silently ignoring missing source: %s. This is to avoid '
|
| @@ -480,12 +471,9 @@ def main():
|
| return os.getuid() == 0
|
| except AttributeError:
|
| return ctypes.windll.shell32.IsUserAnAdmin() != 0
|
| - if not is_admin():
|
| - logging.error('On Windows, you now need to have administrator '
|
| - 'privileges for the shell running %s (or '
|
| - '`gclient sync|runhooks`).\nPlease start another command '
|
| - 'prompt as Administrator and try again.', sys.argv[0])
|
| - return 1
|
| + if is_admin():
|
| + logging.warning('WARNING: On Windows, you no longer need run as '
|
| + 'administrator. Please run with user account privileges.')
|
|
|
| if not os.path.exists(CHROMIUM_CHECKOUT):
|
| logging.error('Cannot find a Chromium checkout at %s. Did you run "gclient '
|
|
|