Skip to content
Snippets Groups Projects
developer-tips.md 3.58 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Hypha developer tips
    
    
    ## Git configuration and commands
    
    
    To avoid spurious merge commits use a rebase workflow when appropriate.
    
    Set this to always use rebase when pulling in updates in a branch.
    
    ```shell
    git config --global branch.autosetuprebase always
    ```
    
    When updating a feature branch with new commits from the main branch use `rebase` and not `merge`
    
    ```shell
    git switch feature-branch-name
    git fetch origin
    git rebase origin/main
    ```
    
    
    To update the feature branch on GitHub you then need to do a forced push. Instead of `--force` use `--force-with-lease`. If someone have made changes to the branch that you do not have locally you get a warning. It is a good habit to always use `--force-with-lease`. One day it will save you from a bad mistake.
    
    ```shell
    git push --force-with-lease
    ```
    
    
    ## Postgres snapshots/restore
    
    Hypha dev requirements contain the [dslr](https://github.com/mixxorz/DSLR) tool. Use this for fast snapshots and restores of the postgres database.
    
    Perfekt when testing migrations and other times when you need to reset the database or switch between databases.
    
    Take a snapshot, you can have as many as you like.
    
    ```shell
    dslr snapshot name-of-the-snapshot
    ```
    
    Restore the snapshot.
    
    ```shell
    dslr restore name-of-the-snapshot
    ```
    
    Delete a snapshot you no longer need.
    
    ```shell
    dslr delete name-of-the-snapshot
    ```
    
    List all your snapshots:
    
    ```shell
    dslr list
    ```
    
    ## Commands in Makefile
    
    This is the one stop place to find commands for runiing test, build resources and docs, linting and code style checks/fixes.
    
    ## Coding style and linting in pre-commit hook
    
    Hypha's coding style is enforced by ruff and prettier and comes pre-configured with prettier.
    
    Install pre-commit to auto-format the code before each commit:
    
    ```shell
    pre-commit install
    ```
    
    ## Editor extensions
    
    If you editor does not a Language Server Protocol (LSP) preinstalled make sure to add the plugin for it. Then add "LSP-ruff" for a fast Python linter and code transformation tool.
    
    Your editor most likely have plugins for the other languages Hypha uses as well, css/scss, yaml and html. We recoment to install them as well.
    
    
    ## Shell configuration
    
    In the shell you can press the up arrow to see earlier (history) commands. It is possible to bind this to history search.
    
    You can then e.g. write `git` and then press the upp arrow and see the commands from your history that start with `git`. So useful and intuitive that it should be the default.
    
    For zsh:
    
    ```shell
    # Settings for history function
    HISTFILE=$ZDOTDIR/.zsh_history
    HISTSIZE=75000
    SAVEHIST=70000
    setopt append_history
    setopt extended_history
    setopt hist_expire_dups_first
    setopt hist_ignore_dups
    setopt hist_ignore_space
    setopt hist_reduce_blanks
    setopt hist_verify
    setopt inc_append_history
    setopt share_history
    autoload -Uz up-line-or-beginning-search
    autoload -Uz down-line-or-beginning-search
    zle -N up-line-or-beginning-search
    zle -N down-line-or-beginning-search
    
    # Bind up/down arrows to history search.
    if [[ $OSTYPE == darwin* ]]; then
      bindkey '\e[A' up-line-or-beginning-search
      bindkey '\e[B' down-line-or-beginning-search
    else
      bindkey "${terminfo[kcuu1]}" up-line-or-beginning-search
      bindkey "${terminfo[kcud1]}" down-line-or-beginning-search
    fi
    ```
    
    For bash:
    
    ```shell
    # Settings for history function
    export HISTFILESIZE=50000
    export HISTSIZE=50000
    export HISTCONTROL=ignoreboth:erasedups
    export HISTIGNORE='\&:e:c:l:ca:cd:cd -'
    
    # Make history work well with multiple shells
    # append to the history file, don't overwrite it
    shopt -s histappend
    
    # Bind up/down arrow to history search
    bind '"\e[A":history-search-backward'
    bind '"\e[B":history-search-forward'
    ```