Cyril de Catheu

Cyril de Catheu

Data Engineer

Newsletter

SNPTS

Things I use but often forget.

Cleanup before a merge request

Squash commits (interactive)

git rebase -i HEAD~3 --autostash

Effect: rerun the 3 last commits.
Do: follow the interactive indication.
Prefer fixup to stash to put one minor commit into another.
Prefer --force-with-lease to --force when pushing.

Rewrite commits

git reset (--soft) HEAD~3

Effect: remove the last 3 commits, but keep the changes
use –soft to keep the changes in the staging area
Do: create new commits

Change last commit message

git commit --amend -m "New Message"

Cheery pick some changes

git cherry-pick <SHA-1>

Use --no-commit or -n to pick the change without committing.

Quick stash

--autostash works with most of the commands.

Does not work with checkout, so:

git stash && git fetch && git checkout my_branch && git stash pop

Download a single file

git fetch --all
git checkout origin/myBranch -- my/file.cpp

Bash

Files with details

ls -hal

Change permissions

More permissions here.

chmod -R MODE DIRECTORY

chmod -R 755 /var/www/html

MODE in octal notation is handy but cannot do incremental change.

chmod +x my script.sh

See the official doc for more variable expansion.

getValue or default

${MY_VAR:-"default_value"}

getValue or default and set

If MY_VAR is not set, it is set to the right side.

${MY_VAR:="default_value"}

Expand if not empty else nothing

Expand the right if left is set and non-empty. Otherwise expands to nothing

${MY_VAR:+"$MY_VAR"}

Slice

string=01234567890abcdefgh
echo ${string:7}
>>> 7890abcdefgh
echo ${string:7:2}
>>> 78
echo ${string:7:-2}
>>> 7890abcdef
echo ${string: -7}
>>> bcdefgh
$ echo ${string: -7:2}
bc
$ echo ${string: -7:-2}
bcdef

Get the length of a variable

${#VAR}

Maven

Find unused dependencies

./mvnw dependency:analyze

If the dependency is not used at compile time, the plugin will state a dependency is not used. To mark a dependency as used:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <configuration>
        <usedDependencies>
            <dependency>commons-collections:commons-collections</dependency>
        </usedDependencies>
    </configuration>
</plugin>

Find dependency updates

./mvnw versions:display-dependency-updates

Find dependency conflicts

./mvnw dependency:tree -Dverbose -Dincludes=org.eclipse.jetty:::

Use includes to filter.

Static Analysis

Run infer on maven project

infer -- ./mvnw clean package -DskipTests

JFR profiling

For a short running process

-XX:StartFlightRecording=settings=profile,filename=test-run.jfr,dumponexit=true -XX:FlightRecorderOptions=stackdepth=128

Check ANSI SQL conformance:

--