WEBVTT 00:00.000 --> 00:15.000 Thanks for the introduction, so today I want to talk about a new tool I'm doing in my spare 00:15.000 --> 00:16.000 time. 00:16.000 --> 00:20.000 It's called sub-patch that I want to present to you today. 00:20.000 --> 00:23.000 For me, I'm a embedded system developer. 00:23.000 --> 00:30.000 I'm doing Android, embedded stuff, and Yachto, embedded stuff. 00:30.000 --> 00:32.000 This project I'm doing for fun. 00:32.000 --> 00:36.000 I'm doing my jacket away, my company, jacket away, 00:36.000 --> 00:39.000 and now I have the first time the fun part. 00:39.000 --> 00:41.000 Now begins. 00:41.000 --> 00:42.000 What is sub-patch? 00:42.000 --> 00:45.000 Here is the website, so I have not bought any slides today. 00:45.000 --> 00:49.000 I show the website, so I will just read out the website 00:49.000 --> 00:55.000 out loudly to you today and show maybe some comments. 00:55.000 --> 00:59.000 I heard that you should repeat everything that is important, 00:59.000 --> 01:01.000 so call to action first. 01:01.000 --> 01:06.000 If you have questions, if you have future requests or something like that, 01:06.000 --> 01:08.000 please join on Matrix. 01:08.000 --> 01:10.000 I've created a channel there. 01:10.000 --> 01:12.000 They are currently just one member in this channel. 01:12.000 --> 01:14.000 This is me, please join. 01:14.000 --> 01:19.000 Or go to get up, open an issue, or you can email me, 01:19.000 --> 01:22.000 or you can also meet me then outside. 01:22.000 --> 01:25.000 So what do I do today? 01:25.000 --> 01:27.000 Yeah, presents the call of action. 01:27.000 --> 01:28.000 Please contact me. 01:28.000 --> 01:30.000 I will go through the homepage. 01:30.000 --> 01:33.000 I will maybe do a short showcase of the tool, 01:33.000 --> 01:37.000 and again, with PC call to action, so you know it. 01:37.000 --> 01:41.000 So let's start with the homepage. 01:41.000 --> 01:43.000 Yeah, it works. 01:43.000 --> 01:47.000 So sub-head fearless multipository managed to stay relaxed. 01:47.000 --> 01:52.000 So this is the tool I envision that does multipository managed to write. 01:52.000 --> 01:56.000 Multipository management means that you are dealing 01:56.000 --> 01:58.000 with multiple git repositors at once. 01:58.000 --> 02:02.000 They should behave like a git, like a bit repository. 02:02.000 --> 02:05.000 So if you are currently using git sub modules, 02:05.000 --> 02:10.000 or repo, repo is a tool by Google using for the AOSP, 02:10.000 --> 02:14.000 the Android open source project, and you are first rated. 02:14.000 --> 02:17.000 Everyone using git sub modules, and it's a pain. 02:17.000 --> 02:20.000 Yeah, my tool will be hopefully better. 02:20.000 --> 02:24.000 So if you're interested, please email me. 02:24.000 --> 02:28.000 An important point sub-head is not production ready. 02:28.000 --> 02:31.000 I say it's currently an alpha stage prototype, 02:31.000 --> 02:33.000 but please try it out. 02:33.000 --> 02:36.000 And if feedback and based on your feedback, 02:36.000 --> 02:39.000 I will develop or we together will develop the tool further. 02:39.000 --> 02:41.000 Quick start. 02:41.000 --> 02:43.000 You need to be for the tool. 02:43.000 --> 02:45.000 You need to be in a git repository. 02:45.000 --> 02:48.000 For now, then you download a Python script. 02:48.000 --> 02:50.000 This is called the prototype. 02:50.000 --> 02:52.000 It's just a Python script. 02:52.000 --> 02:53.000 You download. 02:53.000 --> 02:56.000 Then you make a script executable, 02:56.000 --> 02:58.000 and then you can use a script. 02:58.000 --> 02:59.000 This is the add command. 02:59.000 --> 03:02.000 So this adds a sub repository. 03:02.000 --> 03:06.000 We'll project into your super project. 03:06.000 --> 03:08.000 So here it's Google Test. 03:08.000 --> 03:10.000 Google Test is the sub project. 03:10.000 --> 03:13.000 And the super project is the repository. 03:13.000 --> 03:16.000 Your command line is currently in. 03:16.000 --> 03:19.000 So that's for the terminology. 03:19.000 --> 03:21.000 You have for sub projects. 03:21.000 --> 03:23.000 You have here the URL. 03:23.000 --> 03:28.000 Here, for example, you clone the Google Test repository and code. 03:28.000 --> 03:31.000 Here, that's the path where you are cloning into. 03:31.000 --> 03:34.000 So the local path in your super project. 03:34.000 --> 03:36.000 And you can also specify a revision. 03:36.000 --> 03:39.000 In that case, it's version number, which is a git tag. 03:39.000 --> 03:41.000 But it can also be a branch. 03:41.000 --> 03:46.000 Then you can call or step at status to see what's going on. 03:46.000 --> 03:49.000 And in your repository, then you commit your changes. 03:49.000 --> 03:51.000 If it's all white and both. 03:51.000 --> 03:54.000 And then you can also get call and get status again to see what's 03:54.000 --> 03:55.000 have changed. 03:55.000 --> 03:59.000 So what are the intended use cases for my tool? 03:59.000 --> 04:03.000 So you can use it to assemble a monitoring repository from multiple 04:03.000 --> 04:05.000 Git repository. 04:05.000 --> 04:09.000 Or whether you want to integrate a third part in dependency 04:09.000 --> 04:11.000 in your code base, which asks source files. 04:11.000 --> 04:15.000 So without application package manager like NPM or cargo, 04:15.000 --> 04:18.000 if you want to just include these source files, 04:18.000 --> 04:22.000 you can also now use or when it's ready, sub page. 04:22.000 --> 04:26.000 And if you want to maintain a local foc of an upstream project, 04:26.000 --> 04:29.000 but sometimes at least in the embedded spaces often 04:29.000 --> 04:32.000 the case that you use a library using Linux kernel. 04:32.000 --> 04:36.000 But it does not work out of the box for your device or for your target. 04:36.000 --> 04:38.000 And then you have to apply fixes and features. 04:38.000 --> 04:41.000 And then we are maintaining local focs of the projects. 04:41.000 --> 04:45.000 And the sub page, this will be also possible to maintain 04:45.000 --> 04:49.000 a linear path stack based on an upstream project. 04:49.000 --> 04:51.000 Concept and design. 04:51.000 --> 04:54.000 It's based on Git app. 04:54.000 --> 04:57.000 So the files of the sub project are added just as is 04:57.000 --> 04:59.000 into the super project. 04:59.000 --> 05:01.000 So like unpacking a table or 05:01.000 --> 05:03.000 zip file. 05:03.000 --> 05:06.000 In most cases, the sub projects will be just 05:06.000 --> 05:08.000 give you repositories. 05:08.000 --> 05:11.000 But I envision that they can buy also 05:11.000 --> 05:14.000 tables or make you a pool and make you a 05:14.000 --> 05:18.000 pool with repositories or as for any repositories, 05:18.000 --> 05:21.000 everything that should work. 05:21.000 --> 05:25.000 For the design, the metadata is in a Git 05:25.000 --> 05:28.000 config style format because it's easy and well known. 05:28.000 --> 05:32.000 And you can maintain our local foc with a linear 05:32.000 --> 05:35.000 path stack and sub page will help you 05:35.000 --> 05:37.000 to maintain the linear path stack. 05:37.000 --> 05:40.000 And important new versions will 05:40.000 --> 05:44.000 be used for future new features in the sub project or 05:44.000 --> 05:45.000 bug fixes. 05:45.000 --> 05:48.000 Sub page should have a sub page update 05:48.000 --> 05:51.000 command to also incorporate this new features from the 05:51.000 --> 05:52.000 sub project. 05:52.000 --> 05:55.000 So the main difference to other tools is that 05:55.000 --> 05:58.000 other tools, for example, like the sub modules, 05:58.000 --> 05:59.000 repo by Google. 05:59.000 --> 06:01.000 Cust is by Siemens for 06:01.000 --> 06:03.000 Dr. projects and rest is by 06:03.000 --> 06:05.000 Saffer for 06:05.000 --> 06:06.000 Saffer projects. 06:06.000 --> 06:09.000 These tools deal with multiple Git repositories 06:09.000 --> 06:12.000 that are cloned onto your local checkout 06:12.000 --> 06:14.000 and you have multiple Git repositories in your 06:14.000 --> 06:16.000 local checkout and the main difference to 06:16.000 --> 06:18.000 sub page is that 06:18.000 --> 06:20.000 sub page will only on your local checkout will have 06:20.000 --> 06:22.000 one Git repository and that is your 06:22.000 --> 06:23.000 super project. 06:23.000 --> 06:27.000 And this is a lot simpler. 06:27.000 --> 06:29.000 There's also more comparison here when 06:29.000 --> 06:30.000 I click on this link. 06:30.000 --> 06:33.000 You are more comparison for that. 06:33.000 --> 06:35.000 So website and documentation. 06:35.000 --> 06:37.000 So here you are seeing the website. 06:37.000 --> 06:39.000 This is your homepage. 06:39.000 --> 06:43.000 There are also the new releases 06:43.000 --> 06:45.000 announced on the release notes page. 06:45.000 --> 06:46.000 It's fast here. 06:46.000 --> 06:49.000 For example, I have already three releases in 06:49.000 --> 06:50.000 the offer stage. 06:50.000 --> 06:52.000 So not production ready. 06:52.000 --> 06:53.000 And again, yeah. 06:53.000 --> 06:55.000 Supporting if you want to have support or 06:55.000 --> 06:57.000 want to post picture requests. 06:57.000 --> 06:58.000 Join matrix. 06:58.000 --> 07:00.000 Go on GitHub or email. 07:00.000 --> 07:02.000 Code and license. 07:02.000 --> 07:03.000 Yeah. 07:03.000 --> 07:05.000 The code is on GitHub. 07:05.000 --> 07:09.000 This repository, I license C source code or 07:09.000 --> 07:11.000 low license C source code. 07:11.000 --> 07:13.000 As GPL2 only, while doing this, 07:13.000 --> 07:14.000 it's the same license. 07:14.000 --> 07:16.000 The Linux kernel is using. 07:16.000 --> 07:19.000 And the Git is also using the same license. 07:19.000 --> 07:21.000 Again, open source. 07:21.000 --> 07:24.000 The website is licensed with creative 07:24.000 --> 07:25.000 comments. 07:25.000 --> 07:26.000 Yeah. 07:26.000 --> 07:28.000 If you contribute, please add your sign-off. 07:28.000 --> 07:30.000 Also the same factors as 07:30.000 --> 07:32.000 get users and the Linux kernel uses. 07:32.000 --> 07:33.000 Yeah. 07:33.000 --> 07:36.000 Please do not look too much into the code. 07:36.000 --> 07:38.000 So it's a prototype. 07:38.000 --> 07:41.000 I've written it from scratch very, very quickly. 07:41.000 --> 07:42.000 It works. 07:42.000 --> 07:45.000 I have a good test coverage. 07:45.000 --> 07:51.000 But roughly I have 10 to do a pair of 10 lines of code. 07:51.000 --> 07:53.000 I have one to do comment. 07:53.000 --> 07:56.000 So yeah, a lot of two comments in the code yet. 07:56.000 --> 07:57.000 Yeah. 07:57.000 --> 07:59.000 The less feedback is welcome. 07:59.000 --> 08:00.000 And yeah, open source. 08:00.000 --> 08:02.000 One, T, this claimer. 08:02.000 --> 08:03.000 Yeah. 08:03.000 --> 08:05.000 As also see in the in-get. 08:05.000 --> 08:08.000 In the GPL version two. 08:08.000 --> 08:12.000 So on the left side, you have the menu. 08:12.000 --> 08:16.000 I've written an introduction to the multi repository problem. 08:16.000 --> 08:20.000 I have written about see my personal history about 08:20.000 --> 08:23.000 see multi repository problem. 08:23.000 --> 08:25.000 I started to have this issue. 08:25.000 --> 08:27.000 I think now nine years ago. 08:27.000 --> 08:32.000 And this where I explain what I have seen in the wide, for example, 08:32.000 --> 08:35.000 we put tool, get sub modules. 08:35.000 --> 08:37.000 Everyone knows get sub three. 08:37.000 --> 08:38.000 Yeah. 08:38.000 --> 08:40.000 And I also don't like it. 08:40.000 --> 08:41.000 Yeah. 08:41.000 --> 08:45.000 And here I'm trying to explain what problems I see with all these tools. 08:45.000 --> 08:47.000 And why I'm new to sub patch. 08:47.000 --> 08:49.000 I think it's new. 08:49.000 --> 08:50.000 Okay. 08:50.000 --> 08:54.000 And I also have a page about two requirements. 08:54.000 --> 08:56.000 So what are the requirements for a new tool. 08:56.000 --> 08:59.000 So what are the requirements? 08:59.000 --> 09:02.000 And I also recommend my design decisions. 09:02.000 --> 09:04.000 So I want to be upfront. 09:04.000 --> 09:06.000 Very transparent. 09:06.000 --> 09:08.000 What I'm doing with situ. 09:08.000 --> 09:11.000 Whereas doing the direction and why I've done that. 09:11.000 --> 09:12.000 Yeah. 09:12.000 --> 09:13.000 Okay. 09:13.000 --> 09:16.000 And we have five minutes. 09:16.000 --> 09:19.000 So we can do demo. 09:19.000 --> 09:21.000 And I have tutorial. 09:21.000 --> 09:22.000 How to install it. 09:22.000 --> 09:25.000 You can also install it with tip. 09:25.000 --> 09:28.000 So you don't have to download the standard on script. 09:28.000 --> 09:31.000 But you can also download the standard on script. 09:31.000 --> 09:34.000 Tutorial with basic usage. 09:34.000 --> 09:35.000 Yeah. 09:35.000 --> 09:37.000 I already have a command line. 09:37.000 --> 09:40.000 Reference with four commands. 09:40.000 --> 09:43.000 List status at an update for now. 09:43.000 --> 09:51.000 And I also have a glossary where trying to explain all the terms that I'm using the project. 09:51.000 --> 09:53.000 One of the problems is with this. 09:53.000 --> 09:56.000 It's a very, very complex thing. 09:56.000 --> 09:58.000 There are a lot of moving parts. 09:58.000 --> 10:07.000 And just describing what is going on is one of the biggest things to do for this project. 10:07.000 --> 10:08.000 Okay. 10:08.000 --> 10:10.000 Then we have we go on the home. 10:10.000 --> 10:11.000 And five minutes. 10:11.000 --> 10:12.000 It's talk is over. 10:12.000 --> 10:13.000 Yeah. 10:13.000 --> 10:14.000 So click start. 10:14.000 --> 10:16.000 We go to my console. 10:16.000 --> 10:17.000 So here. 10:17.000 --> 10:19.000 I have folder. 10:19.000 --> 10:21.000 See, folder is empty. 10:21.000 --> 10:23.000 If we do a get in it. 10:23.000 --> 10:24.000 Yeah. 10:24.000 --> 10:26.000 We do empty commit. 10:26.000 --> 10:28.000 Just to be safe. 10:28.000 --> 10:31.000 Allow empty. 10:31.000 --> 10:33.000 Get status. 10:33.000 --> 10:34.000 Okay. 10:34.000 --> 10:35.000 Empty. 10:35.000 --> 10:36.000 Nice. 10:36.000 --> 10:38.000 So now we. 10:38.000 --> 10:40.000 Okay. 10:40.000 --> 10:46.000 Now we want to add a subject. 10:47.000 --> 10:49.000 We copy this. 10:49.000 --> 10:53.000 Of course, I can also do some such help. 10:53.000 --> 10:56.000 So here we are listing all the commands. 10:56.000 --> 10:58.000 We have add updates that is at list. 10:58.000 --> 11:04.000 Now I'm pasting command to download to integrate a subject. 11:04.000 --> 11:07.000 Now this will download it from GitHub. 11:07.000 --> 11:09.000 And oh, it's already over. 11:09.000 --> 11:10.000 And yeah. 11:10.000 --> 11:15.000 And it also prints some information what you can do now. 11:15.000 --> 11:19.000 So to inspect your changes, use get status and get different stage. 11:19.000 --> 11:21.000 So we make a get status. 11:21.000 --> 11:22.000 What we see. 11:22.000 --> 11:23.000 Oh. 11:23.000 --> 11:25.000 This has added a lot of files. 11:25.000 --> 11:27.000 All the files from this project. 11:27.000 --> 11:30.000 And now added to the super project. 11:30.000 --> 11:32.000 We can also do a get diff. 11:32.000 --> 11:33.000 Not a get diff is real. 11:33.000 --> 11:35.000 Nothing because it's already staged. 11:35.000 --> 11:36.000 So we do get staged. 11:36.000 --> 11:40.000 And now we see all the changes from the upstream project. 11:40.000 --> 11:44.000 But we can also look at the config format. 11:44.000 --> 11:47.000 It's in the files of sub patch. 11:47.000 --> 11:50.000 And this is the git start config format. 11:50.000 --> 11:53.000 I'm talking about sub patch. 11:53.000 --> 11:55.000 So here it's just sub patch. 11:55.000 --> 11:59.000 The path you're cloning into the URL of the upstream project. 11:59.000 --> 12:02.000 And the revision you have integrated. 12:02.000 --> 12:05.000 But we are not finished because the changes are only staged. 12:05.000 --> 12:07.000 And get it not committed. 12:07.000 --> 12:09.000 So we do a commit. 12:09.000 --> 12:11.000 Add G test. 12:12.000 --> 12:15.000 Now we added it. 12:15.000 --> 12:17.000 It's that is nothing to commit. 12:17.000 --> 12:21.000 And on the disk we have the external folder where the Google test folder. 12:21.000 --> 12:26.000 And now you have added your sub project with sub patch. 12:26.000 --> 12:28.000 And sub patch status. 12:28.000 --> 12:31.000 We'll also list all our sub files. 12:31.000 --> 12:34.000 We have in this repository we now have one. 12:34.000 --> 12:36.000 Sub project. 12:36.000 --> 12:38.000 Add C location external. 12:38.000 --> 12:39.000 Google test. 12:39.000 --> 12:41.000 It was integrated from that URL. 12:41.000 --> 12:46.000 And we have to infect the data from the configuration. 12:46.000 --> 12:48.000 Okay. 12:48.000 --> 12:51.000 Two minutes left. 12:51.000 --> 12:52.000 Maybe just one thing. 12:52.000 --> 12:56.000 So why I think sub patch will be easier to use. 12:56.000 --> 12:59.000 And for example, sub modules. 12:59.000 --> 13:03.000 One thing I have seen that in normal software projects. 13:04.000 --> 13:07.000 You have two kind of different developers. 13:07.000 --> 13:13.000 You have the occasional contributor or small contributor to our project, 13:13.000 --> 13:17.000 which is not which is maybe from the outside or 13:17.000 --> 13:19.000 that cannot use git very well. 13:19.000 --> 13:21.000 And you have the project maintainers. 13:21.000 --> 13:23.000 So they know the code base. 13:23.000 --> 13:24.000 They know all the tools. 13:24.000 --> 13:26.000 They get posts. 13:26.000 --> 13:29.000 And if you use git sub modules. 13:29.000 --> 13:32.000 Then everyone has to get use git sub modules. 13:32.000 --> 13:35.000 So the small contributor has to use it. 13:35.000 --> 13:37.000 When he wants to download your project, 13:37.000 --> 13:41.000 they have to add git clone minus minus recursive load. 13:41.000 --> 13:43.000 Sub modules. 13:43.000 --> 13:45.000 And so if you use git sub modules, 13:45.000 --> 13:50.000 both people have to have C pain with git sub modules. 13:50.000 --> 13:53.000 So the small contributor and the maintainer. 13:53.000 --> 13:55.000 If sub patch, this will be different. 13:55.000 --> 13:58.000 Because sub patch is not a wrapper around git. 13:58.000 --> 14:01.000 It's just a small addition to git. 14:01.000 --> 14:04.000 So the small contributor, you will do, 14:04.000 --> 14:09.000 or she will get clone, get clone from git. 14:09.000 --> 14:12.000 Get the source code, make a modification. 14:12.000 --> 14:14.000 Push, tag everything. 14:14.000 --> 14:19.000 She will never notice that the project is actually using 14:19.000 --> 14:21.000 or assembled from multiple sub repositories. 14:21.000 --> 14:25.000 Only the maintainer who adds sub projects will have to 14:25.000 --> 14:28.000 need to install sub patch and will have to use sub patch 14:28.000 --> 14:30.000 to update dependencies. 14:30.000 --> 14:33.000 That's why I think sub patch will be easier to use. 14:33.000 --> 14:35.000 And for other reasons, then git sub modules. 14:35.000 --> 14:39.000 Because small contributors will not have to deal with it. 14:39.000 --> 14:43.000 Only the maintainers who are more experienced than you do it. 14:43.000 --> 14:46.000 So then we come and to the presentation. 14:46.000 --> 14:48.000 They are called to action again. 14:48.000 --> 14:51.000 So if you think it's a good idea, if you think it's a better idea, 14:51.000 --> 14:53.000 please join the matrix room, 14:53.000 --> 14:56.000 present your source, open your issue, 14:56.000 --> 15:00.000 and get up, or email me, or I will be outside right now 15:00.000 --> 15:01.000 after the talk. 15:01.000 --> 15:05.000 And yeah, come to me and talking about how we can make a better 15:05.000 --> 15:08.000 multi repository management tool. 15:08.000 --> 15:09.000 Thanks. 15:09.000 --> 15:11.000 Thank you.