From 0c0df0237522d2ce310d829b735cb616cfe34237 Mon Sep 17 00:00:00 2001 From: Thomas Walker Lynch Date: Mon, 25 Nov 2024 12:06:25 +0000 Subject: [PATCH 1/1] first commit --- .gitignore | 5 + LICENSE | 21 + README.md | 734 ++++++++++++++++++ developer/amd64/home | Bin 0 -> 16864 bytes developer/amd64/user | Bin 0 -> 16768 bytes developer/amd64/user-stem | Bin 0 -> 16824 bytes developer/amd64/user-subu | Bin 0 -> 16824 bytes developer/bash/Z | 3 + developer/bash/bashrc | 51 ++ developer/bash/cat_w_fn | 30 + developer/bash/githolder | 63 ++ developer/bash/rm_tilda_files_tree | 12 + developer/bash/vl | 18 + developer/cc/home.cli.c | 34 + developer/cc/user-stem.cli.c | 17 + developer/cc/user-subu.cli.c | 17 + developer/cc/user.cli.c | 11 + developer/deprecated/iseq_C/LICENSE | 21 + developer/deprecated/iseq_C/README.md | 4 + developer/deprecated/iseq_C/makefile | 28 + developer/deprecated/iseq_C/user-stem.c | 17 + developer/deprecated/iseq_C/user-subu.c | 17 + developer/deprecated/makefile | 8 + .../deprecated/release/make/environment.h | 5 + developer/deprecated/release/make/makefile | 178 +++++ .../release/make/makefile-environment | 53 ++ developer/deprecated/release/repo/repo | 73 ++ developer/deprecated/release/repo/repo_pull | 68 ++ developer/deprecated/release/repo/repo_push | 52 ++ .../release/util/rm_tilda_files_tree | 12 + developer/deprecated/repo/repo | 73 ++ developer/deprecated/repo/repo_pull | 68 ++ developer/deprecated/repo/repo_push | 52 ++ developer/deprecated/subu_setup | 55 ++ developer/deprecated/subu_systemd | 34 + developer/emacs/emacs.el | 52 ++ developer/make/RT_0.h | 5 + developer/make/environment_RT_0 | 70 ++ developer/make/targets | 173 +++++ developer/nautilus/Decrypt | 70 ++ developer/nautilus/Encrypt | 77 ++ developer/nautilus/README.md | 1 + developer/python3/gen_email | 99 +++ developer/python3/gen_passwd | 96 +++ developer/python3/gen_sig | 96 +++ developer/scratchpad/.gitignore | 2 + developer/tool/env | 38 + developer/tool/make | 6 + developer/tool/makefile | 17 + developer/tool/release | 56 ++ env_administrator | 10 + env_developer | 10 + tool/env | 33 + tool_shared/bespoke/cat_w_fn | 30 + tool_shared/bespoke/env | 65 ++ tool_shared/bespoke/githolder | 63 ++ tool_shared/bespoke/version | 6 + tool_shared/bespoke/vl | 18 + tool_shared/third_party/.gitignore | 4 + tool_shared/third_party/upstream/.gitignore | 2 + 60 files changed, 2933 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100755 developer/amd64/home create mode 100755 developer/amd64/user create mode 100755 developer/amd64/user-stem create mode 100755 developer/amd64/user-subu create mode 100755 developer/bash/Z create mode 100644 developer/bash/bashrc create mode 100755 developer/bash/cat_w_fn create mode 100755 developer/bash/githolder create mode 100755 developer/bash/rm_tilda_files_tree create mode 100755 developer/bash/vl create mode 100644 developer/cc/home.cli.c create mode 100644 developer/cc/user-stem.cli.c create mode 100644 developer/cc/user-subu.cli.c create mode 100644 developer/cc/user.cli.c create mode 100644 developer/deprecated/iseq_C/LICENSE create mode 100644 developer/deprecated/iseq_C/README.md create mode 100644 developer/deprecated/iseq_C/makefile create mode 100644 developer/deprecated/iseq_C/user-stem.c create mode 100644 developer/deprecated/iseq_C/user-subu.c create mode 100644 developer/deprecated/makefile create mode 100644 developer/deprecated/release/make/environment.h create mode 100644 developer/deprecated/release/make/makefile create mode 100644 developer/deprecated/release/make/makefile-environment create mode 100755 developer/deprecated/release/repo/repo create mode 100755 developer/deprecated/release/repo/repo_pull create mode 100755 developer/deprecated/release/repo/repo_push create mode 100755 developer/deprecated/release/util/rm_tilda_files_tree create mode 100755 developer/deprecated/repo/repo create mode 100755 developer/deprecated/repo/repo_pull create mode 100755 developer/deprecated/repo/repo_push create mode 100644 developer/deprecated/subu_setup create mode 100755 developer/deprecated/subu_systemd create mode 100644 developer/emacs/emacs.el create mode 100644 developer/make/RT_0.h create mode 100644 developer/make/environment_RT_0 create mode 100644 developer/make/targets create mode 100644 developer/nautilus/Decrypt create mode 100644 developer/nautilus/Encrypt create mode 100644 developer/nautilus/README.md create mode 100755 developer/python3/gen_email create mode 100755 developer/python3/gen_passwd create mode 100755 developer/python3/gen_sig create mode 100644 developer/scratchpad/.gitignore create mode 100644 developer/tool/env create mode 100755 developer/tool/make create mode 100644 developer/tool/makefile create mode 100755 developer/tool/release create mode 100644 env_administrator create mode 100644 env_developer create mode 100644 tool/env create mode 100755 tool_shared/bespoke/cat_w_fn create mode 100644 tool_shared/bespoke/env create mode 100755 tool_shared/bespoke/githolder create mode 100755 tool_shared/bespoke/version create mode 100755 tool_shared/bespoke/vl create mode 100644 tool_shared/third_party/.gitignore create mode 100644 tool_shared/third_party/upstream/.gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8783d88 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ + +.* +!.gitignore +*~ +temporary diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8fcce09 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020,2024 Thomas Walker Lynch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..58ce2a5 --- /dev/null +++ b/README.md @@ -0,0 +1,734 @@ +|2022-02-26|` `TWL|brought the README.md into doc/README.odt (still converting), then using online tool to convert the pdf to README.md| +| :-: | :- | :- | +|||| + +**The ‘resources’ Project** +1. # **What is it?** +A set of scripts used for the projects found in github.com/thomas-walker-lynch and other places where it has been adopted. These apply to C, C++, Python, Django, Rust, Lisp, etc. This replaces any other script you might be accustom to for entering a ‘virtual environment’. + +|setup|sets up the environment for a project| +| :- | :- | +|pull|fancy shortcut for git pull| +|push|fancy shortcut for git push| +|makefile|a genetic makefile for C/C++ projects| +|makefil-env|default variables for make| + +These scripts have been evolving with each project, so tweaks might be required. + +Assume we have a top level directory called repos, and we have expanded resources + +/home/Thomas/repos/ + +` `resources\_repo/ + +` `bin/
+ +` `include/ + +` `lib/ + +` `media/ + +` `tmp/ + +` `LICENSE + +` `README.md + +` `projects-init.sh + +1. # **Modifying the resources repo** +If you make some changes and are testing them, then do that on a branch. Merge the branch after it is tested. + +If you do something to the resources repo of general interest, then check it in to master. + +If you need special modifications specific to your needs, i.e. not of general interest even to those who might come in the future and be working in the same language, etc., then make your very own branch. + +` `If you have a fundamentally different way of going about this, some people want it, others don't - then that goes on a branch. + +1. # **Your local directory for holding project, ‘repos’** + +1. make a top level directory for holding all the repos you work on, independent of language, etc. + +` `> mkdir ~/repos + +1. expand the system repo, then inspect and install those script in the system + +\> cd ~/repos + +\> git clone git@github.com:Thomas-Walker-Lynch/system + +Follow the directions from the system repo for installing home, user, and Z. There is not really much to it. ‘Z’ is used for timestamps. home returns the home directory from /etc/passwd. + +1. expand the resources repo + +` `> cd ~/repos + +` `> git clone git@github.com:Thomas-Walker-Lynch/resources + +1. add the following to .bashrc. Note the file lib/bashrc to get started. + +` `> export PATH=~/repos/resources/bin:"$PATH" + + +1. # **The setup script** + +` `This command will open a new shell with the environment in that shell setup for the project. + +` `2022-02-25T13:06:24Z + +` `lander10@beast§~/§ + +` `> setup Endian + +` `Hello Emacs + +` `/home/Thomas/repos/bin:/home/Thomas/repos/resources/bin:/usr/local/bin:/usr/bin:/bin + +` `2022-02-25T13:06:28Z [Endian] + +` `lander10@beast§~/repos/Endian§ + +` `> + +Currently setup echos the path so that they user will understand where the executables + +come from. + +The prompt carries sufficient information for making sense of the transcript when it is read later. + +On the first line, the time shown is UTC in standard iso8601 format. This comes from the ‘/usr/bin/Z’ script. + +Following the time, in square brackets you will see the name of the project. If the square brackets are not there, then no project environment has been setup. If a user attempts to work on a project that has not been setup, he or she is likely to experience many errors. + +On the second line we have the user name, machine name, and current working directory. + +On the third line the familiar `>` appears. Anything you type after the prompt is taken as the command for the shell. It is conventional for script run as root user that this will instead be '#'. +1. # **The generic makefile** + +` `By default a C/C++ project wil have this directory structure: + +` `~/repos/ + +` `Endian/ + +` `deprecated/ + +` `doc/ + +` `exec/ + +` `lib/ + +` `src/ + +` `test/ + +` `tmp/ + +` `try/ + +` `LICENSE + +` `makefile + +` `makefile-env + +` `resources/ + +` `system/ + +` `tmp/ + +Note makefile and makefile-env inside the Endian project are there only to override defaults on the resources versions of those files. They are stubs tweak a couple of things and then pass the heavy lifting to resources/lib/makefile and resources/lib/makefile-env. Leave the resources/lib/makefile and resources/lib/makefile-env where they are and do not make copies. + +Give source files two suffixes. For example the Endian project source directory appears as: + +` `2022-02-26T10:54:55Z [Endian] + +` `thomas@beast§~/resources§ + +` `> cd $PROJECT\_HOME + +` `2022-02-26T10:55:47Z [Endian] + +` `thomas@beast§~/Endian§ + +` `> ls src + +` `endian.lib.c endian\_test.cli.c ip4.lib.c ip4\_test.cli.c + +Endian is a C project. For C++ sources the suffix will be .cc. I suppose the generic makefile should be improved by adding a variable to configure the string used for suffixes. Right now I think this convention is hard coded. + +The compiled lib files will go into lib/$PROJECT\_lib.a while the cli files will be made stand alone and appear in the exec directory. Presumably all the .cli.c files have a main function defined. +1. # **Push and pull scripts** +These are git command sequence shortcuts. They do the usual things when pushing and pulling from a git repo and also do some checks. +1. # **Other things** +` `Other useful things will be found in the resource tree. +1. # **Projects with submodules** + +` `By convention, projects with submodules have the suffix \_ensemble. + +` `1. install the project + +` `Suppose the project with submodules is called \_ensemble + +` `> cd ~/repos + +` `> git clone git@github.com//\_ensemble.git + +` `> mv \_ensemble \_master + +` `> cd \_master + +` `Note in the line that moves the cloned repo directory to `\_master`, you might + +` `use a different suffix than `master`. Conventionally the suffix is the branch to be + +` `checked out and worked on, but the scripts do not care what it is set to. Inside the + +` `scripts this suffix is called the project ‘version’. If this checkout is for + +` `working on multiple branches, just leave the \_ensemble. + +` `2. for submodules that have not yet been added: + + +` `> git submodule add https://github.com/../ + +` `> git submodule add https://github.com/../ + +` `... + + +` `Etc. for the other modules + +` `3. if a submodule is empty, then do the following: + +` `> git submodule init + +` `> git submodule update + + +` `Submodules directories will be empty when the `--recursive` switch is not provided with + +` `the clone. Actually, I prefer not to use `--recursive` and then to follow up with an + +` ``init` and `update` so that it is easier to tell what caused errors. + +1. # **## generally about project security** + +` `0. Contain your development work + +` `Consdider giving the repos directory its own user. If you do add this link so that + +` `the scripts can still have a 'repos' target. + +` `> ln -s . repos + + +` `Alternatively put them in a container or a virtual machine. + +` `1. audit source files and legible scripts + +` `Watch what git pulls. For new things that are source code or scripts, audit those. + +` `Note! ‘.gitignore’ does not apply to pulled content. + +` `2. hidden files + +` `Files that should be audited must not be hidden. Otherwise they are too easy to miss during + +` `the audit. + +` `Hidden files are not seen by file globs, so does not see the .gitignore file. + + +` `> ls -ld \* + +` `drwxrwx---. 1 thomas thomas 64 2022-02-26 07:55 bin + +` `drwxrwx---. 1 thomas thomas 142 2022-02-26 07:03 lib + +` `-rw-rw----. 1 thomas thomas 1076 2022-02-25 07:25 LICENSE + +` `drwxrwx---. 1 thomas thomas 20 2022-02-25 07:25 media + +` `-rw-rw----. 1 thomas thomas 141 2022-02-25 07:25 projects-init.sh + +` `-rw-rw----. 1 thomas thomas 18209 2022-02-26 08:02 README.md + +` `drwxrwx---. 1 thomas thomas 84 2022-02-26 05:40 tmp + + +` `Globs not seeing hidden files is generally considered to be a good thing when we do not want usual shell operations + +` `to see it. For example cp \* a repo manually we often want a copy of the project, not a copy of the repo + +` `administrative files. There is a separate command for copying a repo, git clone . + +` `If we want to 'unhide' dot file from a file glob, then we rename it. That is best. In the case .gitignore + +` `git is expecting to see the file with that very name. If we make a file that is not hidden and then + +` `link .gitignore to it, git will yell at us "too many symbolic links!". + +` `Hence, we can expose a file like .gitignore by linking to it (rather than the other way around). + +` `When doing this, typically the link name is the same but without the dot in front of it. Here I expose the + +` `.gitignore. + + +` `2022-02-26T13:02:28Z [Endian] + +` `thomas@beast§~/resources§ + +` `> ln -s .gitignore gitignore + +` `And now the file glob will pick it up. + + +` `2022-02-26T13:07:13Z [Endian] + +` `thomas@beast§~/resources§ + +` `> ls -ld \* + +` `drwxrwx---. 1 thomas thomas 64 2022-02-26 07:55 bin + +` `lrwxrwxrwx. 1 thomas thomas 10 2022-02-26 08:07 gitignore -> .gitignore + +` `drwxrwx---. 1 thomas thomas 142 2022-02-26 07:03 lib + +` `-rw-rw----. 1 thomas thomas 1076 2022-02-25 07:25 LICENSE + +` `drwxrwx---. 1 thomas thomas 20 2022-02-25 07:25 media + +` `-rw-rw----. 1 thomas thomas 141 2022-02-25 07:25 projects-init.sh + +` `-rw-rw----. 1 thomas thomas 20454 2022-02-26 08:14 README.md + +` `drwxrwx---. 1 thomas thomas 84 2022-02-26 05:40 tmp + + +` `2. PATH + +` `Do not put a repo in your execution PATH. When running tests and such call them out locally, ./program, + +` `or through one of the environment variables initialized by the setup. + +` `The ~/repos/resources/bin directory is an exception to this. We need to maintain the executables used for + +` `maintaing the projects themselves. Be careful to audit any changes to this resources. + +` `3. pulled binary executbles + +` `It is best to not pull binary executables then run them, because they can not be audited. + +` `It sometimes happens that a co-developers will compile and create an executable, and then not clean it, and then + +` `accidentally the user poisons the repo with them. Watch your pulls and clones, and remove executables from the + +` `repo, and complain about them. The generic makefile, push, and pull scripts can help with this. + +` `When an unauditable executable arrives in a pull it creates a trust problem. We distrist both the + +` `source and the integrity of the distribution process. This latter problem can be mitigated if + +` `cryptographic signatures are independently available. + +` `Consider running such an executable in a container. + +` `Make sure make your clean targets remove executables before a push. + +` `Be careful with the programs in resources/bin. + +` `4. check for the .gitignore and audit it, add to it + +` `If you add the exec or bin directories to gitignore and then forget to + +` `run make clean, it might prevent accidentally adding executables. + +` `Typical .gitignore files: + +` `env/ + +` `tmp/ + +` `.\* + +` `!.gitignore + +` `\*~ + +` `For a C or C++ project home directory we will also ignore various intermediate files, + + +` `tmp/ + +` `bin/ + +` `exec/ + +` `.\* + +` `!.gitignore + +` `\*~ + +` `\*.o + +` `\*.i + +` `\*.s + +` `a.out + + +` `For a python project: + +` `tmp/ + +` `.\* + +` `!.gitignore + +` `\_\_pycache\_\_/ + +` `\*\*/\*.pyc + + +` `And for a django project: + + +` `tmp/ + +` `.\* + +` `!.gitignore + +` `\_\_pycache\_\_/ + +` `\*\*/\*.pyc + +` `manage.py + +` `\*\*/migrations + +` `.vscode + + +\## General info and concepts + +` `### What is a ‘project’ + +` `The term ‘project’ occurs repeatedly in this document and generally when we talk about code, so it is best to start by + +` `nailing that term down. Generally speaking, a ‘project’ has a well defined final product, along with a list resource + +` `needs, tasks, task dependencies, and a tasks schedule. It is the job of the team members to execute said tasks. + +` `In project management parlance, a group of related projects is called a ‘program’. Well that sure is an unfortunate + +` `choice of terminology for us CS people, so instead we will call a group of related projects a ‘project ensemble’. A + +` `project ensemble itself is also a kind of project, where the tasks are the component projects. Hence we have a + +` `recursive structure. CS people like recursive structures ;-) + +` `Projects are held in git repositories, as project ensembles are also projects, they are also held in git + +` `repositories. When we clone a project ensemble we will find other git repositories have been expanded inside the + +` `directory tree. Those are for the component projects. In git speak we call these component project directory trees + +` `‘submodules’. + +` `When a project ensemble is expanded out, we end up with a directory tree structure where project resources, tools, and + +` `work products are stored. + + +1. # ` `**### Where project code goes** +` `-------- + +` `On a typical project we will have three distinct types of code: + +` `1. the application source code + +` `2. the libraries and other resources the application makes use of + +` `3. the tools used for building the source code + +` `Let's give these code types short names: + +` `1. source + +` `2. resources + +` `3. tools + +` `We have various places where we might put code that we need in a program: + +` `1. in the system + +` `2. in the developer's user directory + +` `3. in a project ensemble + +` `4. in a project's home directory. + + +` `We shorten this list of places to: + +` `1. system + +` `2. user + +` `3. ensemble + +` `4. project + +` `Now combining our code and locations into one list: + +` `1. source + +` `1. project + +` `2. resources + +` `1. system + +` `2. user + +` `3. ensemble + +` `3. tools + +` `1. system + +` `2. user + +` `3. ensemble + +` `So there is only one place we will find the application source code that we are + +` `developing, and that is under the project directory. Resources that we may need in + +` `order to compile our code will be found either in the system, the user directory, or in + +` `the ensemble. The same can be said for the tools we will use. + +` `This is what my home directory looks like: + +` `/home/thomas/ + +` `bin/ + +` `Desktop/ + +` `Documents/ + +` `Downloads/ + +` `repos/ + +` `chessgame/ + +` `resources/ <--- resources for all projects - expand this repo here + +` `LICENSE + +` `README.md + +` `bin/ + +` `makefile-cc + +` `pull + +` `push + +` `rm\_tilda\_files\_tree + +` `setup + +` `subu/ + +` `tm/ + +` `ws4\_master/ <--- an ensemble directory + +` `LICENSE + +` `README.md + +` `env/ <--- resources specific to the ensemble (wish this was called ‘resources’ + +` `bin/ + +` `lib/ + +` `include/ + +` `tmp/ + +` `uWebSockets/ <--- resource project directory + +` `ws4/ <--- target project directory + +` `Now looking under my `projects` directory, and expanding out `ws4\_master`: + + +` `ws4\_master/ + +` `LICENSE + +` `README.md + +` `env/ + +` `bin/ + +` `include/ + +` `lib/ + +` `tmp/ + +` `uWebSockets/ + +` `ws4/ + + +` ``ws4\_master` is a project ensemble. The component projects include `uWebSockets` and + +` ``ws4`. This project ensemble also comes from a git repo. + +` ``ws4\_master/ws4` is the home directory for the project this team is actively working on. + +` `We know it is the active project because it has the same name as the ensemble prefix. + +` `Whereas `ws4\_master/uWebSockets` is someone else's github project. There are other people + +` `working that, but it is not us, and it is being developed in a different + +` `environment. Rather we are just making use of the work product of that project. + +` `Also inside of `ws4\_master` we have a directory called `env`. Frankly, I don't like the + +` `name. I have toyed with calling it `project-share`, but `env` is the name that Python and others + +` `expect. Perhaps make it a symbol link? This directory is used to hold project specific + +` `resources and tools. Note that the contents of `env` are \*not\* pushed to the repo. This + +` `means that custom edits you make to scripts will not be backed up to the repo. I also do + +` `not like `env` because it is not pushed to the repo, but it might be \*pulled\* from it. + +` ``.gitignore` does not affect pulls. This is a security hazard. + + +1. # **## Repo and Directory Naming (again)** + +` `If a repo has submodules in it, I generally give the repo name a suffix of ‘\_ensemble’. + +` `After cloning, if I am only going to work on a given breanch within that clone, I will change + +` `the suffix to the branch name, \_. + +` `So you ask why do we need more than one directory for the same repo? Well in this case I + +` `am running a web server against the v2.0 branch, and it needs to see the files the v2.0. + +` `The v1.0 directory was the one that was formally being served. There are no servers + +` `pointed at it now, so I should probably delete it. If I ever need v1.0 again I can always + +` `check it out. + +` `> cd ~/repos + +` `> ls + +` `customer\_gateway\_master + +` `customer\_gateway\_v1.0 + +` `customer\_gateway\_v2.0 + + +` `This is how the `customer\_gateway\_master` project environment directory was made: + + +` `> cd ~/repos + +` `> git clone --recursive --jobs 8 git@github.com:Reasoning-Technology/customer\_gateway\_ensemble.git + +` `> mv customer\_gateway\_ensemble customer\_gateway\_master + +` `When downloading a `\_ensemble` repo, we can expand the submodules at the same time + +` `by including the --recursive switch, as was shown above. If the `--recursive` switch + +` `is not given, the submodules will have to be initialized and updated. + +` `The second directory was then created with the commands: + + +` `> git clone --recursive --jobs 8 git@github.com:Reasoning-Technology/customer\_gateway\_ensemble.git + +` `> mv customer\_gateway\_ensemble customer\_gateway\_v1.0 + +` `> cd customer\_gateway\_v1.0 + +` `> git checkout v1.0 + + +` `Cloning a `git` repository produces a directory tree, which in git speak is + +` `apparently called a `module`. + +` `We may `cd` into a module and clone another module, this will be called a ‘submodule’. A + +` `submodule clone operation requires a special command so that the module will know it is + +` `there: + + +` `git submodule add + + +` `We might do this because our project depends on other projects, and those other projects + +` `have their own git repositories, or because we are developing more than one project + +` `together with one shared environment. + +` `We then use the submodule just like we would use any other git module. I.e. after we make + +` `changes we must add the changes, then commit them, and then push the submodule. + +` `The parent module only sees the submodule changes when there is a commit in the + +` `submodule. Hence, after there is a commit in a submodule, we must go up to the module, and + +` `then add the submodule, commit, then push the module. + +` `We truly have two layers, and we have to maintain them individually. Luckily we have some + +` `scripts so that we don't to type stuff twice. In the `project-share` project there are two + +` `scripts, one called `push` the other called `pull`. When we run the `push` script it goes + +` `into the project home and does an add, commit, and push. It then goes up to the ensemble + +` `directory and `git add`s the project submodule, commits the change, and then pushes. Finally + +` `it pops directory back to the project. The current `pull` script pulls down all the + +` `submodules and the ensemble. + + diff --git a/developer/amd64/home b/developer/amd64/home new file mode 100755 index 0000000000000000000000000000000000000000..15ecf6805e198127d8739d8936fc38b5080d121d GIT binary patch literal 16864 zcmeHOZ)_Y#6`woDwM!cN?2yJyXtRO@B~iS-vmM8ENV5LF1}8DL>w;9eIs4A`Nq2k4 z-5#-96@pw!-4rSLQX&zgQbEa=Nae4hfQmy<(x7}u098SJAVQ7g5L#TdRHi~X-kW*v zvbQ-$2qZqhj}7)4x^)uYi9Ja1AzZsso@-JS4UnhAiUqR7}O4%;9_@CUQ3PQreC{3Qr`Q0zx3q-*;OX>lxYOgLS4;l*)+LOxDBk8m7| ziH;vJ_jp&kaQewgNyvrcdBdr}h0~>xi+t-xz>k0*0Y3tM1pEm25%44Me;9%HY9IN~ zocl|)d9?CslMv?D7Mx(=iaGbI>hm%hg`K|!xUl6i>}xj}kVAhO%WhsTK-%(4^zl*m z<`wCmMIRqoZ!Spxhv?&@>dn`{$Mzy`56oYE(wzU3IrrAm&}eUDA#%yQcyX)_s$bU) z^!F$A+D*@bL8T<%s74cg~ zOb;jn6F5WW){wtU{D;`5@0vG~&r`7tu@}#nNf!d8h35;u$!6vXr#G>4F!!Y+eGJBM{6e1ymOZr z9_z^FZ98F4X;Tvu-j+nySVz>h)8h%dY;phN9pRZ>v9|Eewq{M&n{ux%W=4`8}HF) z?rSCWS$1lL9sZtIiFXU$Vr)AAB`4{6r4gYXY&rhJfCoj5;8+kHR@5l`I`xyQbEwSw2DF#alJ%Ju&TE8u5k zJ@w)Z&465KDp$`NKnaL-#dR*MxGFPs#q}YKza{zW1z*=0{}3`5Yj0W)0V%hh;5ooG z(E!VNj1tLqz(as<_TUk~%hlh9c(7LRImnd_uE4iez_Tmh&jOD9@%HmL;2JmPvM&Q( z7YvDNPyA0K4mI)mCH(&`rk?{Ig7c@{bG+vOuMgIUm+3s@|JS~NIGjJcK1}{^7wY*v z)#HuZ4dU}}{T11&5Pt@|F4$09|3I+#0Qo_9`k;0h7ZX`0qNicK23*Z8Cpv||czh~h z0~m{EA(wOFS<6XT6Unq4&jB-*wx*Kl@o3VDIq7W9isom;L^_p8#+`Uf50__HlW>W) zqSKwEV_VtbQj#{IgU4y-#@UCz%cqt1k zUs0=IiU=-lvEs3)6D_WnDJ{c;qZKqI1!}oW2_)CilpqjMs9CL*fo_#7oPn}j+M15q zv1D9W0|$W>OW0OE7mq=YY}mz;mb}A7oj6tjcRVYT0IoHj%Tb+j{f=dg?(gPkVT6Uy zbF(QYIu6#!Dm%@&gbkyf5xTs;PuY1rlTByhS!dP-jpq}vjtf=;DOP9KKqH<&I?|`3 zxoM%tW^HIfStqMXz7)^q5^1}{v7ihNB8mdaWs;82WjA#vJ_C6fVm+IdqoBv9>5Q3< zftEd`P^XSka2_g-rVAn4r0*-SP z*7JO3k@O3s!#)OJV?EC+5`ZC<^*ld1MID`jGIzo{-06$p;9P|DJpTyM1zkP|0*Cw0 zJhoqkGMwA6&+{9N^kHhu+kb+^Hz0#uWj)WQhDdJ`k=yqk|2IkBMLeFLogn=ommcSE zUj26f!NGoM10;eV65kA zPkZ$IoUx1xB_Z*=TzM+ioJad3*suwXKi~g_1|TGFdmKMiD#Xtq%hGZI=G~z{NihFPSzlD+-*y!g{d_Lv%yk0*0Z2t(_T9>}~JPe;lV`852 z?)Z$~f&x5uxP6{S^ZIOFhmGeyCf0FW-v96O~@`%`#hgY*wi`yLmb*~{y{O9Q{#Bk;K5pFn!7N&o-= literal 0 HcmV?d00001 diff --git a/developer/amd64/user b/developer/amd64/user new file mode 100755 index 0000000000000000000000000000000000000000..19264ea3ab67e8877d3fb112e9470ecfa666e0ae GIT binary patch literal 16768 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 Sg|T~m{8#A4@ACjWs`wv#;E~z@ literal 0 HcmV?d00001 diff --git a/developer/amd64/user-subu b/developer/amd64/user-subu new file mode 100755 index 0000000000000000000000000000000000000000..bb525bb4ef93cbe17d2b7b88427fdd98263ea20c GIT binary patch literal 16824 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