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.

