summaryrefslogtreecommitdiffstats
path: root/project.py
Commit message (Collapse)AuthorAgeFilesLines
...
* | Merge "Fix formatting of message when retrying clone"Dan Willemsen2015-08-191-1/+1
|\ \
| * | Fix formatting of message when retrying cloneDavid Pursehouse2015-08-191-1/+1
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Passing the force_sync variable into the string formatting results in the message: "Retrying clone after deleting None" or "Retrying clone after deleting True". Pass the name of the git directory instead. Also, move the print inside the if-block so it's only displayed when the retry is actually going to be attempted. Change-Id: I76d9ecc176cecee4ad512d13e9d1f6bd36aacbbb
* | Merge "Include project path in --force-sync error message"Dan Willemsen2015-08-191-1/+4
|\ \ | |/ |/|
| * Include project path in --force-sync error messageSimon Ruggier2015-08-041-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For projects that have been cloned outside of the repo command (or cloned a long time ago), commit abaa7f312f1b6c8d11d7c757fe909900ce5788b5 introduced an error message to invite the user to use --force-sync. However, due to the risk of data loss, it's useful to know which project's git directory is being replaced before deciding whether or not to provide --force-sync. This change updates the exception's associated value to include the project's relative path and explain to the user how they can resolve the issue. A previous version of this commit used the project name. However, for projects that have multiple work trees, the name can be ambiguous, while the path clearly identifies which git directory will be replaced. Change-Id: If717e66fda4d19accc0a8e889a91f4cd4ff14dff
* | Fix shallow clone behaviorDan Willemsen2015-08-031-10/+7
|/ | | | | | | | | | | | | | | | The existing code here makes sure that switching clone-depth from on to off actually causes the history to be fully restored. Unfortunately, it does this by fetching the full history every time the fetch spec changes. Switching between two clone-depth="1" branches will fetch far more than the top commit. Instead, when not using clone-depth, pass --depth=2147483647 to git fetch so that it ensures that we have the entire history. That is slightly less efficient, so limit it to only when there are shallow objects in the project by checking for the existance of the 'shallow' file. Change-Id: Iee0cfc9c6992c208344b1d9123769992412db67b
* Fix _ReferenceGitDir symlinkingDan Willemsen2015-07-301-1/+2
| | | | | | | | | | | | | | | | | | | | | | This fixes these errors: ... File ".repo/repo/project.py", line 2371, in _ReferenceGitDir os.symlink(os.path.relpath(src, os.path.dirname(dst)), dst) OSError: [Errno 17] File exists Which was happening for checkouts that were created before v1.12.8, when project-objects was created. Nothing had yet been forcing these checkouts to use project-objects, until the recent verification changes. In this OSError case, we already created the symlink, so src == dst, and the directory did not exist. This caused us to run os.makedirs the os.symlink on the same file. dst really should be the file in gitdir, not the target of that symlink if it exists. So just use realpath for the dotgit portion of the path. Change-Id: Iff5396a2093de91029c42cf38aa57131fd22981c
* Add option to correct gitdir when syncingv1.12.25Kevin Degi2015-07-291-10/+34
| | | | | | | | | | | | | In some cases, a user may wish to continue with a sync even though it would require overwriting an existing git directory. This behavior is not safe as a default because it could result in the loss of some user data, but as an optional flag it allows the user more flexibility. To support this, add a --force-sync flag to the sync command that will attempt to overwrite the existing git dir if it is specified and the existing git dir points to the wrong obj dir. Change-Id: Ieddda8ad54e264a1eb4a9d54881dd6ebc8a03833
* Merge "InitGitDir: Clean up created directories"Conley Owens2015-07-291-51/+63
|\
| * InitGitDir: Clean up created directoriesKevin Degi2015-07-271-51/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | If _InitGitDir fails, it leaves any progress it had made on the file system. This can cause subsequent calls to repo sync to behave differently. This is especially evident when _CheckDirReference() fails, since it will not be invoked when sync is retried because both the source and destination directories already exist. To address this, have _InitGitDir() clean up any directories it has created if it catches an exception. Also behave the same way for _InitWorkTree(). Change-Id: Ic16bb3feea649e115b59bd44be294e89e3692aeb
* | Revert "Add --prune option to fetch when syncing a mirror repo"v1.12.24David Pursehouse2015-07-201-2/+0
|/ | | | | | | | | For some users it is not desirable to remove refs that don't exist on the remote server when syncing a mirror repo. This reverts commit b4d43b9f664d6472b6c1e91c98f951037d00cea5. Change-Id: Ie849b66682138ef88da6cd1a5fbb27e993197dd7
* Merge "Fail if gitdir does not point to objdir during sync"Conley Owens2015-07-151-20/+47
|\
| * Fail if gitdir does not point to objdir during syncKevin Degi2015-05-121-20/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | There are a set of cases that can cause the git directory in .repo/projects to point to a directory in .repo/project-objects that is not the one specified in the manifest. This results in a tree that is not sane, and so should cause a failure. In order to reproduce the failure case: 1) Sync to any manifest 2) Change the 'name' of a project to a different repository. Leave the 'path' the same. 3) Resync the modified project. The project-objects directory will not be created, and the projects directory will remain pointed at the old project-objects. Change-Id: Ie6711b1c773508850c5c9f748a27ff72d65e2bf2
* | project.RemoteFetch: Handle depth cases more robustlyKevin Degi2015-07-151-3/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fetch logic for the case where depth is set and revision is a SHA1 has several failure modes that are not handled well by the current logic. 1) 'git fetch <SHA1>' requires git version >= 1.8.3 2) 'git fetch <SHA1>' can be prevented by a configuration option on the server. 3) 'git fetch --depth=<N> <refspec>' can fail to contain a SHA1 specified by the manifest. Each of these cases cause infinite recursion when _RemoteFetch() tries to call itself with current_branch_only=False because current_branch_only is set to True when depth != None. To try to prevent the infinite recursion, we set self.clone_depth to None before the first retry of _RemoteFetch(). This will allow the Fetch to eventually succeed in the case where clone-depth is specified in the manifest. A user specified depth from the init command will still recurse infinitely. In addition, never try to fetch a SHA1 directly if the git version being used is not at least 1.8.3. Change-Id: I802fc17878c0929cfd63fff611633c1d3b54ecd3
* | Teach _LinkFile._Link to handle globs.Wink Saville2015-06-031-11/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows a project to use globs in the linkfile src attribute. When a glob is used in the src the dest field must be a directory. Then _LinkFile._Link(self) calls will create symbolic links in the dest directory to all of the entries in the src as defined by the glob specification. Below all of the entries in master-configs/ will have symbolic links in <root dir>/configs directory: <project name="helloworld.git" path="apps/helloworld"> <linkfile src="master-configs/*" dest="configs"/> </project> Change-Id: Idfed8fa47c83d2ca6e2b8e867731b8e2f9e2eb47
* | Merge changes I32da12c2,Ie4a65b3eDavid Pursehouse2015-06-021-0/+3
|\ \ | | | | | | | | | | | | | | | * changes: Skip sleep and retry if git remote update exits with a signal Catch exceptions in project list generator
| * | Skip sleep and retry if git remote update exits with a signalColin Cross2015-05-131-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | Pressing ctrl-c during repo sync often hangs for 30 to 45 seconds due to the time.sleep and retry in _RemoteFetch. If git exits with a signal, for example -2 for SIGINT triggered by ctrl-c, skip the sleep and retry. Change-Id: I32da12c2dcc96d9cc0b12a066e824b12ebfb52a0
* | | Make linkfile symlinks relativeColin Cross2015-06-011-6/+7
|/ / | | | | | | | | | | | | | | | | | | | | The source (target) of the symlink is specified relative to a project within a tree, and the destination is specified relative to the top of the tree, so it should always be possible to create a relative symlink to the target file. Relative symlinks will allow moving an entire tree without breaking the symlink, and copying a tree (with -p) without leaving a symlink to the old tree. Change-Id: I16492a8b59a137d2abe43ca78e3b212e2c835599
* | Merge "Don't attempt to create "fully qualified names" for SHA1s"David Pursehouse2015-05-111-1/+1
|\ \
| * | Don't attempt to create "fully qualified names" for SHA1sAlexandre Boeglin2015-04-301-1/+1
| |/ | | | | | | | | | | Doing so breaks "repo init -b <SHA1>". Change-Id: Ic071a1b099a9125db22ea446d7e92e7854d69b37
* | Merge "Add option on sync to avoid fetching from remotes for existing sha1"David Pursehouse2015-05-011-4/+10
|\ \
| * | Add option on sync to avoid fetching from remotes for existing sha1David Pursehouse2015-04-301-4/+10
| |/ | | | | | | | | | | | | | | | | | | | | | | | | | | In 2fb6466f795eb30c1dfa598501f5b5d2981e6a5f an optimisation was added to avoid fetching from remotes if the project is fixed to a revision and the revision is already available locally. This causes problems for users who expect all objects to be fetched by default. Change the logic so that the optimized behaviour is only enabled if an option is explicitly given to repo sync. Change-Id: I3b2794ddd8e0071b1787e166463cd8347ca9e24f
* / Add --prune option to fetch when syncing a mirror repoDavid Pursehouse2015-04-301-0/+2
|/ | | | | | | When syncing a mirror repo, add the --prune option to the fetch command to force removal of stale refs from the mirror. Change-Id: I4b43b2a5c86b9915627887c16f6569066f3ab978
* Don't append branch to fetch spec when syncing to a mirrorv1.12.21David Pursehouse2015-04-271-12/+13
| | | | | | | | | | | | | | | | | | | | | | | | Appending the branch to the fetch spec causes sync of a mirror to fail for projects that don't have an explicit revision specified, and don't have a branch of the same name as the default revision. For example, a manifest defining a default revision: <default revision="master"> having a project without an explicit revision: <project name="path/to/project"> and not having a branch named "master", will cause repo sync to fail for that project with the error: Couldn't find remote ref refs/heads/master Modify the logic to not append the branch onto the fetch spec when syncing to a mirror. Change-Id: I5c4457bd125519abf27abe682dea62ad708978c9
* Maintain fully qualified tracking branchesConley Owens2015-04-011-0/+4
| | | | | | | | | | | When running repo branch, the git merge line (in many circumstances) is set to the revision of the project specified in the manifest. If this is a branch name that is not fully-qualified, we will end up with something like "merge = master" instead of "merge = refs/heads/master". This change examines the revision if we are going to use that and changes branch short names to fully qualified branch names. Change-Id: Ie1be94fb8d45df8eeac44a47f729a3819a05fa81
* use the max depth instead of unshallowAnthony King2015-03-301-1/+2
| | | | | | This allows the use of older versions of git Change-Id: I88ea685066603af19896a791829355ddbfa91ffe
* Always capture output for GitCommandJohn L. Villalovos2015-03-261-5/+2
| | | | | | | | | | | | | | Switch the GitCommand program to always capture the output for stdout and stderr. And by default print the output while running. The options capture_stdout and capture_stderr have effectively become options to supress the printing of stdout and stderr. Update the 'git fetch' to use '--progress' so that the progress messages will be displayed. git checks if the output location isatty() and if it is not a TTY it will by default not print the progress messages. Change-Id: Ifdae138e008f80a59195f9f43c911a1a5210ec60
* Revert "Implementation of manifest defined githooks"v1.12.20Jonathan Nieder2015-03-171-33/+24
| | | | | | | | | | | | | | | This reverts commit 38e4387f8eb8cffd6359d726c38a7c524fef07e3. A "repo init" followed by "repo sync" is meant to be as safe as "git clone". In particular it should not run arbitrary code provided by the manifest owner. It would still be nice to have support for manifest-defined git hooks --- they'd just need a prompt like the upload RepoHook has. Hopefully a later change can bring them back. Change-Id: I5ecd90fb5c2ed64f103d856d1ffcba38a47b062d Signed-off-by: Jonathan Nieder <jrn@google.com>
* Add space between project path and branch in repo status.Jakub Vrana2015-03-111-1/+1
| | | | | | | | Currently, paths longer than 39 chars have no space after them so it looks like this: project path/branch master Change-Id: I4c1bb13648ac099ade8a8d4ebafa04131571f842
* Merge "Implementation of manifest defined githooks"Conley Owens2015-03-051-24/+33
|\
| * Implementation of manifest defined githooksJimmie Wester2015-02-031-24/+33
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When working within a team or corporation it is often useful/required to use predefined git templates. This change teaches repo to use a per-remote git hook template structure. The implementation is done as a continuation of the existing projecthook functionality. The terminology is therefore defined as projecthooks. The downloaded projecthooks are stored in the .repo directory as a metaproject separating them from the users project forest. The projecthooks are downloaded and set up when doing a repo init and updated for each new repo init. When downloading a mirror the projecthooks gits are not added to the bare forest since the intention is to ensure that the latest are used (allows for company policy enforcement). The projecthooks are defined in the manifest file in the remote element as a subnode, the name refers to the project name on the server referred to in the remote. <remote name="myremote ..> <projecthook name="myprojecthookgit" revision="myrevision"/> </remote> The hooks found in the projecthook revision supersede the stock hooks found in repo. This removes the need for updating the projecthook gits for repo stock hook changes. Change-Id: I6796b7b0342c1f83c35f4b3e46782581b069a561 Signed-off-by: Patrik Ryd <patrik.ryd@stericsson.com> Signed-off-by: Ian Kumlien <ian.kumlien@gmail.com>
* | Print stderr output from git command for RemoteFetchJohn L. Villalovos2015-02-251-2/+4
| | | | | | | | | | | | | | The stderr output generated by git during a RemoteFetch was not being printed. This information is useful so print it. Change-Id: I6e6ce12c4a57e5ca2359f76ce14f2fcbbc37a5ef
* | Ensure the repo project is never fetched with partial depthv1.12.18Conley Owens2015-02-101-0/+3
| | | | | | | | | | | | | | | | If the repo project is synced with partial depth, then the tags won't be fetched and users will be told the newest sha1 in the stable branch isn't signed. Change-Id: I107df97b4836b928c76aa33a700fa35d1705ae09
* | Handle case where 'git remote prune' needs to be runJohn L. Villalovos2015-02-031-1/+13
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Handle the case when this error occurs: error: some local refs could not be updated; try running 'git remote prune origin' to remove any old, conflicting branches This is usually caused by a reference getting changed from a file to a directory. For example: Initially someone creates a branch 'foo' and it is stored as: .git/refs/remotes/origin/foo Then later on it is decided to change the layout structure where 'foo' is a directory with branches below it: .git/refs/remotes/origin/foo/master The problem occurs when someone still has '.git/refs/remotes/origin/foo' on their system and does a repo sync. When this occurs the error message for needing to do a 'git remote prune origin' occurs. Now when doing a 'git fetch' if the error message from git says that a 'git remote prune' is needed, it will do the prune and then retry the fetch. Change-Id: I4c6f5aa6bd932f0ef7a39134400bedd52e82f633 Signed-off-by: John L. Villalovos <john.l.villalovos@intel.com>
* | Merge "Use depth flag when fetching"Conley Owens2015-01-301-3/+1
|\ \ | |/ |/|
| * Use depth flag when fetchingConley Owens2015-01-221-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently, we only use the depth flag when cloning. The result is that when new project history has merges, the entire history of the merged branch is brought in and the project becomes unshallow very quickly. --depth and clone-depth are often used to save on space, not just network load, so this seems less than ideal. This change uses --depth on every fetch (when the user has depth specified), not just the initial clone. The result is that the given project stays consistently shallow as opposed to growing over time, especially when merges are involved. Change-Id: Iac706cfdad4a555c72f9d9f1119195d38d91df12
* | Merge "Handle shallow checkout of SHA1 pinned repos"Conley Owens2015-01-281-8/+20
|\ \
| * | Handle shallow checkout of SHA1 pinned reposBertrand SIMONNET2015-01-211-8/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | When doing a shallow checkout SHA1 pinned repos with repo init --depth=1 and repo sync -c, repo would try to fetch only some reference and fail if the exact SHA1 repo was missing. Instead, when depth is set, fetch only the specific commit. Change-Id: If3f799d0e78c03faea47f796380bb5e367b11998
* | | Merge "Don't delete hooks in .git/hooks"Conley Owens2015-01-281-9/+0
|\ \ \
| * | | Don't delete hooks in .git/hooksMitchel Humpherys2015-01-151-9/+0
| |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We currently delete all hooks in .git/hooks for each project before symlink'ing in the standard project hooks. This can be annoying for users who have installed custom git hooks. There's no reason to delete all existing hooks. Just rip out the deletion code. Change-Id: I5062a6cd20af700f6d6a17b11ad6c94853987c57 Signed-off-by: Mitchel Humpherys <mitchelh@codeaurora.org>
* | / pylint fixes for project.pyAnthony King2015-01-221-104/+104
| |/ |/| | | | | | | | | Fix all the formatting warnings and unused variables Change-Id: I17d88a23572303879530077f3a80451de5417fbb
* | Respect --quiet when looking up bundle cookie filev1.12.17Dave Borowitz2015-01-021-3/+3
| | | | | | | | Change-Id: I02a244132c49e4bb50ecda978974d6d2b220f6d1
* | Save cookies back to jar when fetching clone.bundleDave Borowitz2015-01-021-1/+1
| | | | | | | | Change-Id: I3ef71b5e7f8ee1cda66057e46ae234866c7258c4
* | Hold persistent proxy connection open while fetching clone.bundleDave Borowitz2015-01-021-41/+47
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The persistent proxy may choose to present a per-process cookie file that gets cleaned up after the process exits, to help with the fact that libcurl cannot save cookies atomically when a cookie file is shared across processes. We were letting this cleanup happen immediately by closing stdin as soon as we read the configuration option, resulting in a nonexistent cookie file by the time we use the config option. Work around this by converting the cookie logic to a context manager method, which closes the process only when we're done with the cookie file. Change-Id: I12a88b25cc19621ef8161337144c1b264264211a
* | Silence warnings about invalid clone.bundle files when quietedKris Giesing2014-12-241-3/+4
|/ | | | | | | The invalid clone.bundle file warning is not typically user actionable, and can be confusing. So don't show it when -q flag is in effect. Change-Id: If9fef4085391acf54b63c75029ec0e161c38eb86
* Revert "Check for existence of refs upon initial fetch"Conley Owens2014-11-101-5/+0
| | | | | | | | | | | | This reverts commit 565480588d2bff4205b437862505e77382189811. We are reverting this change for 2 reasons: 1) It introduced a bug for users using sync -c with a reference mirror. 2) The fetch specs have recently changed to cause git to properly fail when we request a non-existent branch of a manifest, removing the need for this change. Change-Id: I0f63da9bfb40cf5ffafb7979f1b8c929a738fc7b
* Merge changes I1f71be22,I5b119f11Conley Owens2014-10-221-10/+12
|\ | | | | | | | | | | * changes: Always fetch the specific revision given Support specifying non-HEADS refs as upstream
| * Always fetch the specific revision givenNasser Grainawi2014-10-091-8/+8
| | | | | | | | | | | | Don't assume the revision is in refs/heads/. Change-Id: I1f71be222ed3ed940d2265aad43d1f2d601fc03a
| * Support specifying non-HEADS refs as upstreamNasser Grainawi2014-10-091-6/+8
| | | | | | | | | | | | | | | | | | While not typical, some users might have an upstream that isn't in the usual refs/heads/* namespace. There's no reason not to use those refs as the value for the upstream attribute, so support doing so. Change-Id: I5b119f1135c3268c20e7c4084682e860d3ee1fb1
* | upload: report names of uncommitted filesVadim Bendebury2014-10-141-10/+32
|/ | | | | | | | | | | | | | | | | | | | | When there are uncommitted files in the tree, 'repo upload' stops to ask if it is OK to continue, but does not report the actual names of uncommitted files. This patch adds plumbing to have the outstanding file names reported if desired. BUG=None TEST=verified that 'repo upload' properly operates with the following conditions present in the tree: . file(s) modified locally . file(s) added to index, but not committed . files not known to git . no modified files (the upload proceeds as expected) Change-Id: If65d5f8e8bcb3300c16d85dc5d7017758545f80d Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Signed-off-by: Vadim Bendebury <vbendeb@google.com>
* Don't open non-binary files as binaryChirayu Desai2014-08-191-1/+1
| | | | | | * Don't pen the git config file, and the git ".lock" file as binary. Change-Id: I7b3939658456f2fd0a0500443cdd8d1ee1a4459d