WEBVTT 00:00.000 --> 00:13.360 So, welcome everyone, so I'm Pirate David, I'm walking at Octobus, and I've been walking 00:13.360 --> 00:23.520 a Macreal contributor for about 15 years now, and for those who don't know Macreal is 00:23.520 --> 00:28.320 a distributed version control, it's the same in generation as we have been created by 00:28.320 --> 00:34.400 the same kind of people, by the same kind of, for the same kind of reason, with the same kind 00:34.400 --> 00:40.560 of inspiration and the same kind of dynamitell. So, both Git and Macreal are about 20 years 00:40.560 --> 00:46.080 or now, and Macreal is quite still active. It has also been the inspiration from multiple 00:46.080 --> 00:53.360 of the new wave of DVCS like sapling and jiu-jitsu. It has a lot of great scaling, a lot of 00:53.360 --> 00:58.640 feature, very extensible, it has distributed history, writing, and a bunch of things like that, 00:58.640 --> 01:04.000 but I'm not going to cover all of that because it's a lighting talk, and I'm not going to dive into 01:04.000 --> 01:09.760 what is Macreal and our innovation. Instead, I'm going to try to answer a common question of 01:10.320 --> 01:17.280 what it's like to walk with Macreal that is kind of different than other tools. And so, I'm going to 01:17.280 --> 01:24.400 go through a simple scenario to show some of the basic commands, I'm not going to cover everything, 01:24.400 --> 01:31.680 I'm not going to explain much because I just want to give a feel of what it is. I'm not going 01:31.680 --> 01:35.120 to show any comment graph, we have nice comment graph, they are nice for explaining things, 01:35.120 --> 01:38.640 but we don't need to explain things, and we don't actually need to see them that much. 01:39.920 --> 01:44.560 So, the lighting talk instruction where you're not going to use your own laptop, 01:44.640 --> 01:55.680 and it's the beginning. And so, it's kind of the usual common kind of talk where I do demo in 01:55.680 --> 02:03.280 a terminal, but I was not expecting a terminal. So, I have a terminal output, could be best 02:03.280 --> 02:09.680 said in slide, and I'm going to try to make that still interesting. Some of the output are going 02:09.760 --> 02:14.480 to be small because they are not that interesting and in an effort to make the interesting 02:14.480 --> 02:23.600 output bigger. So, in that scenario, there is multiple people that are going to walk on a small 02:23.600 --> 02:31.760 script. The small script is a Fibonacci sequence computation. If it's still small, it's on 02:31.840 --> 02:37.200 purpose, if you can read it, it's not the point. But so, that's the script we're going to 02:37.200 --> 02:45.120 welcome. And you're developer, and you want to write a first patch to fix something. So, 02:45.680 --> 02:50.080 you've got some kind of you have AGDs that show you what I've shown in your walking 02:50.080 --> 02:55.680 clipping, and you want to do a feature run to some review and everything. So, you say AG, 02:55.680 --> 03:00.160 topic, robustness, the name of your feature branch, and you don't commit your type to commit 03:00.160 --> 03:06.800 message, and you're good to go. Then you can push it, and it goes for review on the main server. 03:09.360 --> 03:13.680 You also wrote two other patches to make the scenario more interesting, and I'm not going to 03:13.680 --> 03:18.960 use patches because that's not the point. But so, now you have three patches, one is sent for review, 03:18.960 --> 03:24.560 the other two, and I've just done finishing with them writing test and everything. And I get a 03:24.560 --> 03:29.680 message from my review about the first patch. You say, okay, the patch looks good, but there was a 03:29.760 --> 03:36.320 cheaper one, I fixed it, and you needed to rebase it, and I did it, and now it's merged. So, 03:36.320 --> 03:42.480 thank you for your contribution. And it's like, okay, so someone touched my branch. But yeah, I mean, 03:43.440 --> 03:49.040 multiple people who worked on the same branch, and I think of four, one trip, we may be someone 03:49.040 --> 03:54.400 in Japan, to say, oh, you need to fix a typo and something, it just did it, and pushed it, and now it's 03:55.120 --> 04:01.520 merged. So, what does it look from my perspective? Before I add the stack that I showed you before, 04:01.520 --> 04:06.000 with the AG stack is showing you, basically, the content of your current feature range, 04:06.000 --> 04:11.520 and I add the variables flag so that we see the actual commit ash, that we don't use that much, 04:11.520 --> 04:16.400 because they change when you rewrite, but here at that point we want to see the content change. So, 04:17.280 --> 04:24.400 I have three patches in my feature branch, and now I do a pull. The pull is adding two 04:24.400 --> 04:29.760 chance sets, it's updating one chance set, which is the old version of mine, and I have two 04:29.760 --> 04:35.200 or chance sets, we're going to talk more about the or chance later. And if I look back at the stack, 04:35.200 --> 04:40.720 I only have two chance sets in my stack now. The first one I've been automatically removed from 04:40.720 --> 04:45.840 the feature branch, because it's merged. And it's now the base of the two other one, and the 04:45.840 --> 04:50.960 ash is different here. I am sure you remember the ash for the first, from two slides ago. 04:50.960 --> 04:56.000 But so the ash is different. So, what happened to that thing? Like, as a developer someone touched 04:56.000 --> 05:02.960 my patch, but what happened to it? Like, how can I add an idea of what happened, and is it fine? 05:02.960 --> 05:08.560 So, I can say, AG upslug as zero, which is a strategy and defy her for the base, and I see that 05:08.560 --> 05:14.160 add a version here, and it was amended to the content of the patch change by the reviewer, 05:14.640 --> 05:20.240 and then, as we base, by the same reviewer, as a parent change, when the content didn't 05:20.240 --> 05:26.240 according to the markers. And so, I have an idea of what happened by womb when, if I want to 05:26.240 --> 05:33.280 validate something. And I can also ask for the patch to see what I have been changed in my patch, 05:33.280 --> 05:38.160 in that case, going to focus on patch here. We also have, like, commit that, actually, 05:38.160 --> 05:42.560 a false snapshot, but usually, when you do review, you focus on what other you'll change, 05:42.560 --> 05:46.240 and you want to see the change to the patch itself, and not the rules that are fine. 05:46.240 --> 05:51.680 And so, here, we see that it fixed the type on Fibonacci name somewhere, and that's about it. 05:51.680 --> 05:55.040 That's the only thing that changed in my patch, so that's great. I'm appealing at it. 05:56.640 --> 06:02.240 So, we're two or fans earlier. So, what are the off-hand? The off-hand are 06:02.240 --> 06:06.320 chanted are based on something that's got to be written. And so, we know about that, 06:06.320 --> 06:10.800 because we have the information of what is written, and we can flag them as off-hand. 06:11.520 --> 06:18.240 It's look a bit scary, but actually it's not. Like, I run AGVOLV, and the two move them, 06:18.240 --> 06:24.480 where they need to be doing the rebays and merging attitude. And so, now, I still have two 06:24.480 --> 06:31.600 chanted in my stack, but they are longer off-hand. And I can just push them for review. 06:32.800 --> 06:37.680 Until I go to my coffee, and then come back and have a few message from my reviewer. 06:37.680 --> 06:41.360 He has feedback on the first chanted, he's back on the second chanted, I need to fix something 06:41.360 --> 06:46.560 in the commit message. And he also say that he added type annotation in this clip, so maybe they 06:46.560 --> 06:52.800 will conflict and see like that. So, now I need to update the two patch. I can move to the previous 06:52.800 --> 07:01.600 patch, to the first patch. I'm liking AGV previews. And here I am. My check-out is now the first patch 07:01.600 --> 07:08.720 of the stack, not the last patch of the stack. And I can do change, I have a diff, I knew an amend, 07:09.440 --> 07:16.160 and that's it. When I do the amend, I have changed the base of the second chanted, I get an 07:16.160 --> 07:21.840 orphan as before. But before it was not really scary to solve it, and in that case, it's even less 07:21.840 --> 07:27.200 scary. So, if I, as the stack, what is the state of things, it's still not that there is the first 07:27.200 --> 07:32.080 one, and the second one, that's going to be the second one, and if I say AG next, I move to the 07:32.080 --> 07:37.600 second one, solving the orphan SN, and everything. And so, I could do an AG stack, and it would be 07:37.600 --> 07:44.240 all fine. So, I need to fix the second chanted. In this case, I'm showing a different command, 07:44.240 --> 07:49.280 which is PDF. This is going to show you the difference between the commit you have in your 07:49.280 --> 07:55.120 walking copy and the file you have. And PDF is going to show you what is going to be the patch, 07:55.200 --> 08:00.160 like the commit, if you do an amend. So, I can, I can validate either that I did the right 08:00.160 --> 08:06.560 portions I wanted, or that the patch is going to look like I want. So, AG PDF, I have the patch I want, 08:06.560 --> 08:11.760 I can AG and then dash dash edit. So, at that time, I actually, I did the commit message, and, 08:13.040 --> 08:19.280 and that's it. I have a new version that is fixed, according to reviewer request. 08:20.160 --> 08:26.560 So, there was still this thing about, oh, by the way, I added typing information. So, 08:27.120 --> 08:34.480 I can just use AG pool to get the new version, and if you run AG stack, you get a new 08:34.480 --> 08:42.320 information that say that your stack is behind by one chanted. So, I just run AG rebase, 08:42.320 --> 08:47.440 because the stack no where it's going, and it's going to move the stack to the right location. 08:47.440 --> 08:53.360 In this case, there was a small issue that, in one of the patch, I touched the function signature 08:53.360 --> 08:58.080 and on the main branch, now we have typing information. So, we have a conflict. And so, 08:58.080 --> 09:04.720 have a conflict, I solved it the usual way. I use AG continue to continue to do the current 09:04.720 --> 09:10.000 operation. And then, it's fine, my two chanted rebase on the main branch, and I can push. 09:10.000 --> 09:14.880 I just push, because it know that the new chanted replace the old chanted. So, it's pushing the new 09:14.880 --> 09:19.680 chanted. It's pushing the introspection about the fact that they evolve to be the new chanted. 09:19.680 --> 09:23.360 And it obsolete, we can make disappear the old chanted on the server. 09:26.720 --> 09:32.000 Now, let's move to the point of view of the other person and getting to the reviewer seeds, 09:32.000 --> 09:36.480 because in the first part, we saw that we were able to follow whether we were, 09:36.480 --> 09:42.080 with you, or did, to my chanted. But it's also interesting for the reviewer of the review tool 09:42.080 --> 09:46.240 to be able to see what happened to the chanted when some chanted were requested. 09:47.040 --> 09:53.840 So, it's going to AG pull on his clone. You get the same kind of message, because you get the same 09:53.840 --> 10:01.040 information that I just pushed. And then it can do the same kind of introspection that I did with 10:01.040 --> 10:06.720 upslung. I'm not going to go into too much detail, because I don't want to, or everything, but in 10:06.720 --> 10:12.960 that case, we see that there was a conflict. And we see information about there was a conflict 10:12.960 --> 10:19.840 and now it was solved. And also, what was changed in the patch itself before it was updated and 10:19.840 --> 10:25.600 re-based and in everything. And the same way for the second patch, there was this small change 10:25.600 --> 10:29.840 that we have already seen, but there is also the fixed to the commit message. And we saw the 10:29.840 --> 10:35.040 difference between the ultimate message and the new commit message to see that it was properly fixed. 10:35.520 --> 10:39.360 And so, the reviewer at the same kind of tool that I had, and the reviewer tool at the same 10:39.360 --> 10:44.800 kind of tool that I have to make sure that all this re-writing distributed is actually fine, 10:44.800 --> 10:55.600 and we can follow what's going on. I don't know if you noticed, but when we stay the upsluck patch 10:55.600 --> 11:03.360 for the less-than-thed, for example, we have a small diff that is the diff of what is the difference 11:04.160 --> 11:09.280 between the patch, not as diff as diff, but difference between the states that we are intended. 11:10.720 --> 11:16.000 Actually, if you look at the diff between the first version of the chenset, as at the full snapshots 11:16.000 --> 11:20.400 and the last version of the chenset, as the full snapshots, you have something that is much bigger 11:20.400 --> 11:28.640 because you insert all the diffs from the thing you were based on and the update you need on your 11:28.800 --> 11:34.800 parents when you have the stack and everything. And so, this is already in this demo much bigger 11:34.800 --> 11:40.080 and much harder to actually follow what is the actual thing that change. While the thing on the left 11:40.080 --> 11:46.640 is the thing you want to see if you're just reviewing, okay, is this change updated as it should be. 11:47.360 --> 11:52.320 And if you're in a company with like Android of 1000 of commit going on between each of your 11:52.960 --> 11:59.760 the right side version is completely unusable. And so, just to conclude, there we go back to the 11:59.760 --> 12:05.920 developer's seat, if you are agey pool, the two chenset that he pushed are now public, so they are 12:05.920 --> 12:11.200 no longer in the future, but they have been accepted in the main branch. And the the future branch 12:11.200 --> 12:17.200 basically fade away by itself and you don't have to care about deleting it in various places and 12:17.200 --> 12:22.240 everything. Like it's done, everybody knows it's done and that's it. So, what do we have here? 12:23.440 --> 12:28.960 We have simple commands with few lines like we just simple command for each for their purpose 12:28.960 --> 12:36.880 doing their small things. We propagate the story we're writing so that you can actually do things 12:36.880 --> 12:42.960 without troubles. We have the history of each commit to understand what happened if we want to. 12:43.040 --> 12:48.720 You don't do that every day, but that's some time you do. We can automatically resolve the 12:48.720 --> 12:55.920 instability that comes from rewriting other people patches and everything. The future branch is kind 12:55.920 --> 13:02.720 of scoped and nice, you don't have to be too much concerned about, okay, this thing part of 13:02.720 --> 13:08.960 one thing or another. And overall we can we can have a simple and safe collaboration of draft 13:09.040 --> 13:13.760 which is nice. And this is not all the commands we have and everything, but this is the kind of 13:13.760 --> 13:18.880 a version that you do every day with Michael Lee, where they fix some type or help them fix some 13:18.880 --> 13:24.640 test testing like that. You can have more than one developers working on the same branch 13:24.640 --> 13:32.880 with your collaboration tool, which is kind of the point. So, I hope the tickle your appetite. I'm 13:32.880 --> 13:38.160 not doing it to any taking all the day of hours. If you're interested in material you can join us 13:38.800 --> 13:44.080 or commit these things. If you need commercial support for material that's what Octobus is doing 13:44.080 --> 13:49.600 and if you need hosting for material there is the Apple project which is a friendly 13:49.600 --> 13:57.680 focus of Git lag with material support. If you have any question, you can meet me outside or maybe 13:57.680 --> 14:00.160 you can have a few here.