Hi Chromium Developers,
The Chrome Infra team has been working via bugs and a planning document to complete the final tasks that remain prior to flipping the switch from SVN to Git. We are now nearly ready to make the switch.
When will the switch happen? Friday, April 25, 2014.
A known quantity of work remains before we make the switch. We are addressing that now. We plan to switch the Git repo to be authoritative for writes in the evening of April 25, 2014 ("flag day"). If some unforeseeable issue occurs on flag day, our backup date is May 2, 2014.
What do I need to do?
- Today: Since, after flag day, SVN checkouts will no longer update and Git checkouts from other locations may break in mysterious ways, please make sure your gclient ‘src’ is configured to use https://chromium.googlesource.com/chromium/src.git.
- Soon: Watch for updates about if/when services may be temporarily offline prior to and during the switch. Before the switch, we also plan to host a tech talk for the team on 4/22 (expecting this to be recorded) with more info about the switch. Details for the tech talk to follow.
Questions? If you have an issue that has not been addressed in any available documentation, please let us know.
Thanks!
Chase
What's the status of the web-based blame working? i.e. from the example from the "Chromium development, Git, and you" thread, the workflow I described still doesn't work. It took several minutes for the annotated view for render_view_impl.cc to show up, which is too slow to be usable. Even then, when I clicked on the link to the left to see the code before previous change, it took another 2 minutes for the same html to load, and I couldn't see the code before the previous change. This is something that needs to work for the reasons I listed before.
--
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev...@chromium.org.
On Tue, Apr 15, 2014 at 1:23 PM, John Abd-El-Malek <j...@chromium.org> wrote:
> What's the status of the web-based blame working? i.e. from the example from
> the "Chromium development, Git, and you" thread, the workflow I described
> still doesn't work. It took several minutes for the annotated view for
> render_view_impl.cc to show up, which is too slow to be usable. Even then,
> when I clicked on the link to the left to see the code before previous
> change, it took another 2 minutes for the same html to load, and I couldn't
> see the code before the previous change. This is something that needs to
--
This might be a legitimate problem, though I'm not sure it's actually been brought up before. If I understand you correctly, the issue is that in viewvc, the links go to a diff between the blame revision and revision for that line, but in gitiles, the links take you to a new blame view, based on revision at that line. You prefer the viewvc "links to diff" over the gitiles "links to blame" feature?
As I stated in that thread, I see similar performance characteristics trying to load history and blame for those files in viewvc (35s for the history view, 1.2m for the annotate view).
You prefer the viewvc "links to diff" over the gitiles "links to blame" feature?
Sorry, should have been more specific. I'm fine with the gclient workflow, but I have several repositories created using the git submodules workflow that have a lot of local working branches I'd like to keep. Can I preserve these repositories when switching to the gclient workflow, or do I need to check out fresh and bring that state over from the old repositories?
On Tue, Apr 15, 2014 at 1:43 PM, Brett Wilson <bre...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 1:23 PM, John Abd-El-Malek <j...@chromium.org> wrote:
> What's the status of the web-based blame working? i.e. from the example from
> the "Chromium development, Git, and you" thread, the workflow I described
> still doesn't work. It took several minutes for the annotated view forAs I stated in that thread, I see similar performance characteristics trying to load history and blame for those files in viewvc (35s for the history view, 1.2m for the annotate view). Are you seeing some sort of blazingly fast response times that I don't? I think caching on repeated requests might be faster in viewvc, but even then, I wouldn't call the views of any heavily modified file "fast".
> render_view_impl.cc to show up, which is too slow to be usable. Even then,
> when I clicked on the link to the left to see the code before previous> change, it took another 2 minutes for the same html to load, and I couldn't
> see the code before the previous change. This is something that needs toThis might be a legitimate problem, though I'm not sure it's actually been brought up before.
To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
Branches already exist in git (https://chromium.googlesource.com/chromium/src.git/+log/refs/branch-heads/1933). You can 'gclient sync --with_branch_heads' to pull them into your checkout if you don't have them already.
On Apr 15, 2014, at 7:07 PM, Michael Moss <mm...@chromium.org> wrote:Branches already exist in git (https://chromium.googlesource.com/chromium/src.git/+log/refs/branch-heads/1933). You can 'gclient sync --with_branch_heads' to pull them into your checkout if you don't have them already.These instructions seem to indicate that there's still an svn dependency when building release branches: http://www.chromium.org/developers/how-tos/get-the-code#Working_with_release_branchesCan you update the instructions if there's now a way to do it without requiring svn?
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.
Yes. That is the price we pay for having used git-svn and replication for the last few years. Fixing it would require rewriting all of history (which, as mentioned above, we don't plan to do). That will not be true for all new commits after the flag day -- they will have properly formatted committer and author fields.
"罗勇刚(Yonggang Luo) " <luoyo...@gmail.com> schrieb:
>>>>>>>>>> The Chrome Infra team has been working via bugs<https://code.google.com/p/chromium/issues/list?can=2&q=blocking%3A263848&colspec=ID+Pri+M+Iteration+ReleaseBlock+Cr+Status+Owner+Summary+OS+Modified&x=m&y=releaseblock&cells=tiles>and a
>>>>>>>>>> planning document<https://docs.google.com/a/chromium.org/document/d/1JHs1SjHTnUK77PAVeG6T-xTjUWBGqfuglTvYVa2zwmU/edit#heading=h.3ptkkl4ppzn8>to complete the final tasks that remain prior to flipping the switch from
>To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev...@chromium.org.
Can we pretty please keep a monotonically increasing number for official commits (possibly per-branch), rather than reverting to hashes? It's very common for me to need to know: Is my change, rXXXXXX, included in the build corresponding to this bug report? With hashes, I need to query a tool to answer this common question. That's much less convenient, and slower, than just being able to compare two numbers.
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).
It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.
Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.
-- Dirk
Hey Matt,So incidentally, we've been bouncing the same idea around infra today. I'm not sure about the release numbering (I think there would be some seriously deep implications there for a lot of other systems), but we could maybe do something like what you propose.
** Disclaimer: This is not a plan. **If we supposed the existence of a commit queue which interdicted all pushes to the chromium repo (and I mean all (no, seriously everything. Even dcommit would go through this service)), then we could have that commit queue stamp all commits with a repo-wide monotonically increasing number. Note that this would change the commit hashes of all the commits (but `git cl upload` and the existing CQ already do this).We could then have services (like bugdroid) mention the revision when pasting hashes in places, like deadbeef....-r12345. We could potentially have a chromium extension do this lookup and inject the numbers whenever it sees a hash... There would probably have to be some web service support for this to make it fast, however.Note also that this would not remove the need for commit hashes. Tools and services, like gitiles and the git command line interface, would still not support these (the amount of work to do that would be large, and diverging our toolchain from standard gitiles / git / etc. would carry a very high cost). These numbers would be correct, but they would effectively be display only.We could eventually also extend this mechanism to include other numbering schemes (like N-th commit on branch), as well.
** End not-a-plan. **My question to the ML is: if we had one-to-one hash-to-number (within a repo, monotonically increasing), and printed these numbers in addition to the hashes, what flows would this enable?
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?
As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.
To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.
-- Dirk
On Tue, Apr 15, 2014 at 9:47 PM, Viet-Trung Luu <v...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.So keep in mind, SVN is really not stellar at keeping binaries in source control either. It's easier from the client perspective, but the server side is, at best, not great.
FTR, I think it would be absolutely worthwhile to reject pushes containing binaries once we have a transparent or semi-transparent way to push binaries into google storage (the {upload,download}_from_google_storage scripts are half of a solution). We could even have a commit-queue system do this sort of thing automatically.
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.On the flip side, moving off SVN will enable significant improvements on the workflow side, including affording the ability to better tool the management of multiple repos. This is not to mention that the majority of devs are already using git and are suffering daily with its second-class-citizen status. In addition, there are much better stories around security and audibility of the data-at-rest with git than with SVN (even in the context of the proposed history rewrites), and we can provide significantly better QoS with git than we can with SVN.
One of the problems with the one-big-repo world is it can very easily lead to tight coupling of presumably independent code bases (our one-big-repo is currently not immune to this). Either they should be independent code bases (in which case atomic commits are nice but not strictly necessary: i.e. automated multi-repo commits could be enabled by better infrastructure tooling), or they really are coupled, in which case they should probably be merged together (such as blink).
On Tue, Apr 15, 2014 at 10:11 PM, Robert Iannucci <iann...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:47 PM, Viet-Trung Luu <v...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.So keep in mind, SVN is really not stellar at keeping binaries in source control either. It's easier from the client perspective, but the server side is, at best, not great.The essential difference here is that one problem (git's) is architectural, whereas the other (svn's) is implementation.The problem with binary files is that they usually change quite radically (I don't know if git even does binary diffs, but even if it did it'd be of limited help), so changes to binary files accumulate to large repo growth.A large repo isn't necessarily a problem, within certain limits (e.g., why should dealing with binary files of size on the order of megabytes, or even tens of megabytes be a problem?). Making a large repo work quickly/efficiently is largely a problem of implementation.The problem git has with this is that the repo size is inflicted on every single clone. This is a fundamental issue.
FTR, I think it would be absolutely worthwhile to reject pushes containing binaries once we have a transparent or semi-transparent way to push binaries into google storage (the {upload,download}_from_google_storage scripts are half of a solution). We could even have a commit-queue system do this sort of thing automatically.It seems to me that piling on more scripts only increases fragility, and indicates that git is really poorly suited for what we're doing. This applies to the proposed handling for large (binary) files just as much as it does to other things, such as revision numbering.Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.On the flip side, moving off SVN will enable significant improvements on the workflow side, including affording the ability to better tool the management of multiple repos. This is not to mention that the majority of devs are already using git and are suffering daily with its second-class-citizen status. In addition, there are much better stories around security and audibility of the data-at-rest with git than with SVN (even in the context of the proposed history rewrites), and we can provide significantly better QoS with git than we can with SVN.To be honest, given the amount of effort we've poured into trying to make git work, I don't think it's fair to compare versus subversion.
And to be honest, I found the old git workflow -- the one that evmar originally set up -- to be mostly superior in its usability/reliability to what we have now. I'm not entirely sure where you're getting this "suffering daily with its second-class-citizen status" bit.One of the problems with the one-big-repo world is it can very easily lead to tight coupling of presumably independent code bases (our one-big-repo is currently not immune to this). Either they should be independent code bases (in which case atomic commits are nice but not strictly necessary: i.e. automated multi-repo commits could be enabled by better infrastructure tooling), or they really are coupled, in which case they should probably be merged together (such as blink).As I said, in the case of Chrome OS, they're already pulling things from Chromium. (Because who really wants to duplicate base/? net/? And in the future, probably more.)And so if you're suggesting that they (or at least parts of them) should be merged into the Chromium repo, it's important to ask if our repo could actually accommodate them?Here, there are actually two questions: Can git handle such a repo size at all with reasonable performance? And how painful would it be for developers? (Keep in mind that the ability of subversion (and similar systems) to do partial checkouts makes it easy to limit/eliminate the pain.)R-- DirkTo unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+...@chromium.org.
On Tue, Apr 15, 2014 at 10:11 PM, Robert Iannucci <iann...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:47 PM, Viet-Trung Luu <v...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.So keep in mind, SVN is really not stellar at keeping binaries in source control either. It's easier from the client perspective, but the server side is, at best, not great.The essential difference here is that one problem (git's) is architectural, whereas the other (svn's) is implementation.
The problem with binary files is that they usually change quite radically (I don't know if git even does binary diffs, but even if it did it'd be of limited help), so changes to binary files accumulate to large repo growth.
A large repo isn't necessarily a problem, within certain limits (e.g., why should dealing with binary files of size on the order of megabytes, or even tens of megabytes be a problem?). Making a large repo work quickly/efficiently is largely a problem of implementation.The problem git has with this is that the repo size is inflicted on every single clone. This is a fundamental issue.
FTR, I think it would be absolutely worthwhile to reject pushes containing binaries once we have a transparent or semi-transparent way to push binaries into google storage (the {upload,download}_from_google_storage scripts are half of a solution). We could even have a commit-queue system do this sort of thing automatically.It seems to me that piling on more scripts only increases fragility, and indicates that git is really poorly suited for what we're doing. This applies to the proposed handling for large (binary) files just as much as it does to other things, such as revision numbering.
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.On the flip side, moving off SVN will enable significant improvements on the workflow side, including affording the ability to better tool the management of multiple repos. This is not to mention that the majority of devs are already using git and are suffering daily with its second-class-citizen status. In addition, there are much better stories around security and audibility of the data-at-rest with git than with SVN (even in the context of the proposed history rewrites), and we can provide significantly better QoS with git than we can with SVN.To be honest, given the amount of effort we've poured into trying to make git work, I don't think it's fair to compare versus subversion.
And to be honest, I found the old git workflow -- the one that evmar originally set up -- to be mostly superior in its usability/reliability to what we have now. I'm not entirely sure where you're getting this "suffering daily with its second-class-citizen status" bit.
One of the problems with the one-big-repo world is it can very easily lead to tight coupling of presumably independent code bases (our one-big-repo is currently not immune to this). Either they should be independent code bases (in which case atomic commits are nice but not strictly necessary: i.e. automated multi-repo commits could be enabled by better infrastructure tooling), or they really are coupled, in which case they should probably be merged together (such as blink).As I said, in the case of Chrome OS, they're already pulling things from Chromium. (Because who really wants to duplicate base/? net/? And in the future, probably more.)
And so if you're suggesting that they (or at least parts of them) should be merged into the Chromium repo, it's important to ask if our repo could actually accommodate them?
Here, there are actually two questions: Can git handle such a repo size at all with reasonable performance? And how painful would it be for developers? (Keep in mind that the ability of subversion (and similar systems) to do partial checkouts makes it easy to limit/eliminate the pain.)
On 16 April 2014 08:08, Ilya Sherman <ishe...@chromium.org> wrote:Can we pretty please keep a monotonically increasing number for official commits (possibly per-branch), rather than reverting to hashes? It's very common for me to need to know: Is my change, rXXXXXX, included in the build corresponding to this bug report? With hashes, I need to query a tool to answer this common question. That's much less convenient, and slower, than just being able to compare two numbers.+cb0f9bcI mean +1.We had a big discussion about revnos vs hashes already on the "Chromium, Git, and you" thread but I don't think we came to any conclusion. If those SVN revision numbers get replaced with hashes, life is going to be awful. I need to be able to tell at a glance whether one revision is newer than another. I need the git log, OmahaProxy page and chrome://version pages to all show me the revision numbers consistently and in a monotonically increasing order. (For just one quick example: all bugs reported from TOT should have this revision number in the bug report so we can easily compare to the version we have checked out.)We discussed previously the idea of using "git number" (which is in depot-tools) which just tells you the height of the git DAG. This is sufficient for the trunk but could cause confusion when you're in a branch. Another idea is just to have a CQ script (like the one that currently adds "Review URL" to every commit message) that appends a special line to every commit message saying what its revision number is. We could then automatically scrape the commit message for this line and display it in chrome://version. The advantage of this approach is that we can continue the numbering from the SVN IDs.The format would be very simple. All commits to master end in a line:"chromium-revision-id: 264090"
On 16 April 2014 14:32, Robert Iannucci <iann...@google.com> wrote:
Hey Matt,So incidentally, we've been bouncing the same idea around infra today. I'm not sure about the release numbering (I think there would be some seriously deep implications there for a lot of other systems), but we could maybe do something like what you propose.Great to hear this is still being discussed.** Disclaimer: This is not a plan. **If we supposed the existence of a commit queue which interdicted all pushes to the chromium repo (and I mean all (no, seriously everything. Even dcommit would go through this service)), then we could have that commit queue stamp all commits with a repo-wide monotonically increasing number. Note that this would change the commit hashes of all the commits (but `git cl upload` and the existing CQ already do this).We could then have services (like bugdroid) mention the revision when pasting hashes in places, like deadbeef....-r12345. We could potentially have a chromium extension do this lookup and inject the numbers whenever it sees a hash... There would probably have to be some web service support for this to make it fast, however.Note also that this would not remove the need for commit hashes. Tools and services, like gitiles and the git command line interface, would still not support these (the amount of work to do that would be large, and diverging our toolchain from standard gitiles / git / etc. would carry a very high cost). These numbers would be correct, but they would effectively be display only.We could eventually also extend this mechanism to include other numbering schemes (like N-th commit on branch), as well.That's fine (being display only). I am quite used to dealing with git commits (as I'm sure most Chrome engineers are). I just need the monotonic numbers for quick comparison purposes.** End not-a-plan. **My question to the ML is: if we had one-to-one hash-to-number (within a repo, monotonically increasing), and printed these numbers in addition to the hashes, what flows would this enable?
On 16 April 2014 06:01, Matt Giuca <mgi...@chromium.org> wrote:
On 16 April 2014 14:32, Robert Iannucci <iann...@google.com> wrote:
Hey Matt,So incidentally, we've been bouncing the same idea around infra today. I'm not sure about the release numbering (I think there would be some seriously deep implications there for a lot of other systems), but we could maybe do something like what you propose.Great to hear this is still being discussed.** Disclaimer: This is not a plan. **If we supposed the existence of a commit queue which interdicted all pushes to the chromium repo (and I mean all (no, seriously everything. Even dcommit would go through this service)), then we could have that commit queue stamp all commits with a repo-wide monotonically increasing number. Note that this would change the commit hashes of all the commits (but `git cl upload` and the existing CQ already do this).We could then have services (like bugdroid) mention the revision when pasting hashes in places, like deadbeef....-r12345. We could potentially have a chromium extension do this lookup and inject the numbers whenever it sees a hash... There would probably have to be some web service support for this to make it fast, however.Note also that this would not remove the need for commit hashes. Tools and services, like gitiles and the git command line interface, would still not support these (the amount of work to do that would be large, and diverging our toolchain from standard gitiles / git / etc. would carry a very high cost). These numbers would be correct, but they would effectively be display only.We could eventually also extend this mechanism to include other numbering schemes (like N-th commit on branch), as well.That's fine (being display only). I am quite used to dealing with git commits (as I'm sure most Chrome engineers are). I just need the monotonic numbers for quick comparison purposes.** End not-a-plan. **My question to the ML is: if we had one-to-one hash-to-number (within a repo, monotonically increasing), and printed these numbers in addition to the hashes, what flows would this enable?If they're just within a repo then almost none of these things are enabled, because non-global numbering is intrinsically error prone and misleading. You need the numbers to be determined by a *single* authoritative repo to be meaningful, which means they have to be recorded in the actual commit data/metadata somewhere in that repo and then downloaded into people's clones.
On 16 April 2014 04:31, Matt Giuca <mgi...@chromium.org> wrote:
On 16 April 2014 08:08, Ilya Sherman <ishe...@chromium.org> wrote:Can we pretty please keep a monotonically increasing number for official commits (possibly per-branch), rather than reverting to hashes? It's very common for me to need to know: Is my change, rXXXXXX, included in the build corresponding to this bug report? With hashes, I need to query a tool to answer this common question. That's much less convenient, and slower, than just being able to compare two numbers.+cb0f9bcI mean +1.We had a big discussion about revnos vs hashes already on the "Chromium, Git, and you" thread but I don't think we came to any conclusion. If those SVN revision numbers get replaced with hashes, life is going to be awful. I need to be able to tell at a glance whether one revision is newer than another. I need the git log, OmahaProxy page and chrome://version pages to all show me the revision numbers consistently and in a monotonically increasing order. (For just one quick example: all bugs reported from TOT should have this revision number in the bug report so we can easily compare to the version we have checked out.)We discussed previously the idea of using "git number" (which is in depot-tools) which just tells you the height of the git DAG. This is sufficient for the trunk but could cause confusion when you're in a branch. Another idea is just to have a CQ script (like the one that currently adds "Review URL" to every commit message) that appends a special line to every commit message saying what its revision number is. We could then automatically scrape the commit message for this line and display it in chrome://version. The advantage of this approach is that we can continue the numbering from the SVN IDs.The format would be very simple. All commits to master end in a line:"chromium-revision-id: 264090"[snip]If we implement this kind of thing, then that would be fine, but I am still absolutely opposed to the idea of using any variant of "git-number" as the way of generating a number. git-number is not even fine for trunk if you're talking about local builds. I think we should delete git-number right now as I still consider it an attractive nuisance which will cause more problems than it solves :)
On Tue, Apr 15, 2014 at 10:44 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 10:11 PM, Robert Iannucci <iann...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:47 PM, Viet-Trung Luu <v...@google.com> wrote:
On Tue, Apr 15, 2014 at 9:10 PM, Dirk Pranke <dpr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 5:26 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:52 PM, Aaron Gable <aga...@chromium.org> wrote:
On Tue, Apr 15, 2014 at 4:00 PM, Viet-Trung Luu <viettr...@chromium.org> wrote:
What good is a hash if we think that we'll rewrite history (thereby quite possibly invalidating lots of/most hashes)?Each time we rewrite history, will we have to keep a copy of the git repo before the rewrite, so that we can do proper archaeology?It's definitely not in the plan to do lots of (or any) rewriting of the history of the repo. There has been discussion of history rewriting for the sake of the Chrome+Blink merge, but that would mostly be rewriting of Blink, not Chrome.What's the plan for preventing, e.g., people from accidentally (or unaccidentally) checking in large things? (Or, not necessarily even large things, but things that shouldn't -- where "shouldn't" may only be clear in hindsight -- be committed?)I don't think we have a plan for this at the moment, at least not beyond the things we normally do (like hope it gets caught in review).My concern is that mistakes happen, and that the pain of git repo growth is inflicted on everyone in perpetuity, unless we plan on rewriting history (which really should be viewed as an awful thing -- it's antithetical to the basic purpose of revision control, and defeats any benefits that uses hashes may have).It's also not clear to me that this is a problem that needs to be urgently solved. It's true that Git is worse at handling large binary objects in a large repo than SVN is, and it's true that we have checked large things in occasionally in the past, but I don't remember anything causing much more than a bit of temporary pain.It's a concern because we apparently want to move to git as our source of truth, despite a significant number of drawbacks.Do you have specific things you're afraid of that happen regularly, or is this more of a general concern?(I do believe we need to evaluate repo size seriously in the context of the Blink merger, but that is really a separate project from flipping Chrome to Git and we shouldn't conflate the two).In general, I'm concerned about the scaling properties of git. This is not to say that git is bad, but that it obviously wasn't designed for our use case.So keep in mind, SVN is really not stellar at keeping binaries in source control either. It's easier from the client perspective, but the server side is, at best, not great.The essential difference here is that one problem (git's) is architectural, whereas the other (svn's) is implementation.Er... How is this an architectural problem instead of an implementation problem? Tools like git-annex, and git-bigfiles exist, which suggests that it is just an implementation problem. Unlike SVN however, there's a lot of development effort being put into making the tools better, because the architecture of git allows for that.
The problem with binary files is that they usually change quite radically (I don't know if git even does binary diffs, but even if it did it'd be of limited help), so changes to binary files accumulate to large repo growth.Git does use libXDiff to do deltification of packfiles. It's why the size of a git checkout of chromium is only 2x the size of the svn checkout of chromium but includes the entire history. The current size of an SVN checkout (no build artifacts) is 1.6GB. The current size of a git clone of chromium is 3.2GB.A large repo isn't necessarily a problem, within certain limits (e.g., why should dealing with binary files of size on the order of megabytes, or even tens of megabytes be a problem?). Making a large repo work quickly/efficiently is largely a problem of implementation.The problem git has with this is that the repo size is inflicted on every single clone. This is a fundamental issue.Not so. git supports shallow clones if you don't care about the history of the repo. A 1-commit shallow clone of chromium/src is 1.1GB (yep, smaller than SVN).
FTR, I think it would be absolutely worthwhile to reject pushes containing binaries once we have a transparent or semi-transparent way to push binaries into google storage (the {upload,download}_from_google_storage scripts are half of a solution). We could even have a commit-queue system do this sort of thing automatically.It seems to me that piling on more scripts only increases fragility, and indicates that git is really poorly suited for what we're doing. This applies to the proposed handling for large (binary) files just as much as it does to other things, such as revision numbering.I think this is a bit misleading because there are many flows which are enabled by git that are not enabled by svn.
Not surprisingly, chromium is a large enough project to have unique requirements. It's unlikely that there will be an out-of-the-box solution that gets everyone everything, but we're trying our best to accommodate.As I mentioned above, there's a substantial amount of work (internally and externally) being put into improving the implementation of git with binary files. The desire for revision numbers stems from the enormity of the chromium project and the need for centralized coordination in that project.
Is Blink the only repo we're thinking about bringing in? What about other repos? (Skia, the Chrome OS repos, NaCl, Android, whatever -- thinking long-term.) What's our plan to scale our repo?As far as I know, Blink is the only repo we're thinking about.Since we actively discourage people from trying to use Blink w/o the rest of Chrome, and since we increasingly need to change things in both repos at once, it's clear that there is a big win to blink devs to merge the two repos.I don't believe this is true of the others you mention, all of which have a meaningful non-chrome-centric existence.To be clear, systems like subversion allow separate and combined existence. We don't take advantage of it very much, but the capability is there. (Chromium developers tend to think of the repo as being rooted at src/, which is incorrect.)The great advantage of "one big repo" is that it allows for atomic changes, and can reduce the amount of gardening needed. (You can still have gardening schemes if you want[*], but there's the capability to use everything a ToT if you want.[**])For example, take Chrome OS. As I understand it, they currently use parts of Chromium (e.g., base/), and have to semi-regularly have to garden bits of Chromium in. Now, whenever someone does major refactoring in Chromium, they potentially inflict great pain on Chrome OS. Currently, a great deal of Chrome OS-specific UI code lives in Chromium. This is largely due to an architectural problem. But if we solve that problem, then it'd be natural to kick such code closer to Chrome OS. But this is basically undo-able in any meaningful sense, at least without inflicting great pain on everyone, with the many-repos scheme.It seems to me that moving to a revision control system that forces you to have lots of repos (and thus forcing gardening and/or code duplication) is a step in the wrong direction.[*] Subversion doesn't force you to check out all of your repo at the same revision. Things like Perforce clients offer even more mapping flexibility/pain.[**] E.g., probably you could put NaCl into the Chromium subversion repo somewhere ("beside" Chromium's src/; probably "beside" Chromium's trunk/ even), and no one would be the wiser (other than some svn paths needing to be updated, and revision numbers changing). But then if you wanted to, you could try to use NaCl at ToT.[***][***] Of course, our build/test infrastructure would need significant changes to make things like this practical, but that's a different problem. My concern is that moving to git might make this (a "google3"-like model) impossible.On the flip side, moving off SVN will enable significant improvements on the workflow side, including affording the ability to better tool the management of multiple repos. This is not to mention that the majority of devs are already using git and are suffering daily with its second-class-citizen status. In addition, there are much better stories around security and audibility of the data-at-rest with git than with SVN (even in the context of the proposed history rewrites), and we can provide significantly better QoS with git than we can with SVN.To be honest, given the amount of effort we've poured into trying to make git work, I don't think it's fair to compare versus subversion.Er... there are a lot of features that we get with git that we can't have with subversion. I'm not going to list them. If we wanted to build all of those features for subversion (or even just a couple of them), then it would probably be even more work.
Unless I missed your meaning?
And to be honest, I found the old git workflow -- the one that evmar originally set up -- to be mostly superior in its usability/reliability to what we have now. I'm not entirely sure where you're getting this "suffering daily with its second-class-citizen status" bit.A lot of the complexity with the current flow stems from the current tooling. A lot of the complexity in the current tooling (looking at you, gclient :) stems from its need to support multiple SCMs. This is one of the things we would love to dig into and clean up, but it's neigh impossible when we're in this amorphous git/svn middle transition state.
The current system which supports both git and svn has an incredible number of moving parts, many of which speak both git and svn. The ability to improve anything in this environment is staggeringly difficult.
Because all of these tools need to support both git and svn, they all must be written to serve the lowest common denominator of both systems, which means that currently we get all the pain of both, but few of the advantages of either one. Once we move to git, we'll be able to de-cruftify a lot of the tooling and begin to rely on the more advanced features of git.
One of the problems with the one-big-repo world is it can very easily lead to tight coupling of presumably independent code bases (our one-big-repo is currently not immune to this). Either they should be independent code bases (in which case atomic commits are nice but not strictly necessary: i.e. automated multi-repo commits could be enabled by better infrastructure tooling), or they really are coupled, in which case they should probably be merged together (such as blink).As I said, in the case of Chrome OS, they're already pulling things from Chromium. (Because who really wants to duplicate base/? net/? And in the future, probably more.)>>**Given improved tooling**<<, it would make sense to me (if I actually mattered here), to move these to a separate repo and pin them in both, because they're being consumed independently. Improved tooling would mean that you could prepare a multi-repo patch for chromeos, chromium and e.g. base, get it reviewed together, try it all together on the trybots, and then land the patches in dependency order (base, chromium, chromeos) when you did the 'commit' action automatically.
Improved tooling would also, in my mind, automatically post DEPS roll CLs in all downstream repos any time the upstream repo changed (or maybe batches these up to once a day) and run tryjobs for them, so an owner could just lgtm+commit them.
And so if you're suggesting that they (or at least parts of them) should be merged into the Chromium repo, it's important to ask if our repo could actually accommodate them?Here, there are actually two questions: Can git handle such a repo size at all with reasonable performance? And how painful would it be for developers? (Keep in mind that the ability of subversion (and similar systems) to do partial checkouts makes it easy to limit/eliminate the pain.)Yes, git can handle very huge repos of text data with possibly a few small binaries. If we start committing compiled build products, then not so much, but I don't think anyone's planning to do that.
I'm not sure how to answer 'how painful', but if you mean size-on-disk, then I think I've already demonstrated that this is already not-a-huge-problem, and can be mitigated by doing shallow clones (if you can't spare the extra 2GB for the full history).
On Apr 15, 2014, at 7:07 PM, Michael Moss <mm...@chromium.org> wrote:Branches already exist in git (https://chromium.googlesource.com/chromium/src.git/+log/refs/branch-heads/1933). You can 'gclient sync --with_branch_heads' to pull them into your checkout if you don't have them already.These instructions seem to indicate that there's still an svn dependency when building release branches: http://www.chromium.org/developers/how-tos/get-the-code#Working_with_release_branchesCan you update the instructions if there's now a way to do it without requiring svn?
Thanks,MarshallOn Tue, Apr 15, 2014 at 3:57 PM, Marshall Greenblatt <magree...@gmail.com> wrote:
Hi Chase,What's the timeline and plan for migrating Chromium release branches to git?Thanks,Marshall
Hi Chromium Developers,
The Chrome Infra team has been working via bugs and a planning document to complete the final tasks that remain prior to flipping the switch from SVN to Git. We are now nearly ready to make the switch.
When will the switch happen? Friday, April 25, 2014.
A known quantity of work remains before we make the switch. We are addressing that now. We plan to switch the Git repo to be authoritative for writes in the evening of April 25, 2014 ("flag day"). If some unforeseeable issue occurs on flag day, our backup date is May 2, 2014.
What do I need to do?
- Today: Since, after flag day, SVN checkouts will no longer update and Git checkouts from other locations may break in mysterious ways, please make sure your gclient ‘src’ is configured to use https://chromium.googlesource.com/chromium/src.git.
- Soon: Watch for updates about if/when services may be temporarily offline prior to and during the switch. Before the switch, we also plan to host a tech talk for the team on 4/22 (expecting this to be recorded) with more info about the switch. Details for the tech talk to follow.
Questions? If you have an issue that has not been addressed in any available documentation, please let us know.
Thanks!
Chase
+1.
There is a ton of stop-energy on this thread.
I would like to publicly thank our tireless Infra engineers for taking this on.
Personally I'd much rather Infra offered fewer awesomer solutions.
These are good people, who are clearly understaffed to maintained the
menagerie of systems they've inherited. Part of better serving Chrome
is moving from 2 version control systems to 1. I'm very thankful that
these folks are doing that *for* us. There are a number of reasons why
Git was chosen [1], but now (after multiple years of prep) is the time
to execute.
As Daniel so nicely said, "you gain some tools you lose some tools"
but we believe the end result will be positive. Lets move forward and
then pick up the pieces. Stopping for more time to prepare is not a
good option.
The infra repositories are (mostly) open source [2] and I'm sure these
engineers would love a hand with the re-painting.
-eric
1. https://docs.google.com/a/chromium.org/document/d/1JHs1SjHTnUK77PAVeG6T-xTjUWBGqfuglTvYVa2zwmU/edit#heading=h.3ptkkl4ppzn8
2. https://chromium.googlesource.com/ the tools/* repos.
On Wed, Apr 16, 2014 at 6:02 AM, Daniel Bratell <bra...@opera.com> wrote:
> On Wed, 16 Apr 2014 00:08:34 +0200, Ilya Sherman <ishe...@chromium.org>
> wrote:
>
>> Can we pretty please keep a monotonically increasing number for official
>> commits (possibly per->branch), rather than reverting to hashes? It's very
>> common for me to need to know: Is my change, >rXXXXXX, included in the build
>> corresponding to this bug report? With hashes, I need to query a tool >to
>> answer this common question. That's much less convenient, and slower, than
>> just being able to >compare two numbers.
>
>
> Ar Opera we switched to git in 2009 and this was one of the concerns
> discussed at the time, and I was admittedly one of the people raising
> concerns. In hindsight it turned out to be a much smaller problem than
> expected. You change how you work, gain a few tools and lose a few tools,
> but the end result is positive.
>
> /Daniel
On Wed, Apr 16, 2014 at 10:26 AM, Eric Seidel <ese...@chromium.org> wrote:
+1.
There is a ton of stop-energy on this thread.
I would like to publicly thank our tireless Infra engineers for taking this on.
Personally I'd much rather Infra offered fewer awesomer solutions.
These are good people, who are clearly understaffed to maintained the
menagerie of systems they've inherited. Part of better serving Chrome
is moving from 2 version control systems to 1. I'm very thankful that
these folks are doing that *for* us. There are a number of reasons why
Git was chosen [1], but now (after multiple years of prep) is the time
to execute.This document is a little hard to take seriously, since it has no discussion about the disadvantages of git and any alternatives considered.
This document is a little hard to take seriously, since it has no discussion about the disadvantages of git and any alternatives considered.
It's been stated (here) that the git submodules workflow will break with this transition. What do those of us still using that workflow need to do to transition back to the gclient workflow?
I see announcements that this migration is still happening, has the blame tool being too slow been addressed? I haven't seen anything change.https://src.chromium.org/viewvc/blink/trunk/Source/core/inspector/InspectorPageAgent.cpp?annotate=172074 takes 1 second.
https://chromium.googlesource.com/chromium/blink.git/+blame/87e70381aca484f1700ea23e72f5adc78dc4581c/Source/core/inspector/InspectorPageAgent.cpp took 6 seconds. It was faster the second time, but clicking back through the history is very slow.
Stefan
The migration to git will also break the pdb source file indexation, which is super useful when you're looking at a minidump... (This automatically download the source code at the good revision when you load it in windbg).
Maybe not a blocker but it'll be nice to fix this before doing the migration... I'll look at it next week.
--
--
Chromium Developers mailing list: chromi...@chromium.org
View archives, change email options, or unsubscribe:
http://groups.google.com/a/chromium.org/group/chromium-dev
To unsubscribe from this group and stop receiving emails from it, send an email to chromium-dev...@chromium.org.