valkey-io / valkey-doc

Other
19 stars 25 forks source link

Restored topics structure #61

Closed zuiderkwast closed 2 months ago

zuiderkwast commented 2 months ago

This massive change restores the topics/page.md structure of the doc repo, as it was a few years ago.

It my not make sense to review this manually. If you do, you probably want to review one commit at a time. Renaming the files is done in one commit. Fixing the links is done in another commit.

This is done using a script that I can share. This is what it does:

  1. The "aliases" metadata field in each markdown file is used to find the original "topics" filename. This is attempted for all files in the repo with a metadata section.
  2. For files that don't have a "topics/" alias, pick a topics name for it, like this:
    • Do this only for files under "docs/".
    • If the file path matches "..../NAME/_index.md", the new name is "topics/NAME.md"
    • Otherwise, the file path matches "..../NAME" and then the new name is "topics/NAME". (This case covers png files and other non-markdown files too.)
    • If the filename includes 'redis', this is replaced by 'valkey'. Examples: docs/getting-started/installation/install-redis-from-source.md -> topics/install-valkey-from-source.md
    • (Special case: If the target file name ends up "topics.md", use "topics/index.md" instead.)
  3. Rename the files to the new names. Commit the the renames.
  4. Update all links to files (renamed and not renamed), using all aliases discovered using all files with a metadata section.
    • The links are changed to relative links including the .md suffix. This makes it possible to click around in the github web interface. It's also good in other situations. For example, users can deploy the docs (simply .md -> .html) and don't need to deploy the docs in the root directory.
    • Examples:
      • Change link: /docs/reference/cluster-spec => cluster-spec.md (in topics/protocol.md)
      • Change link: /topics/acl => ../topics/acl.md (in commands/auth.md)

Fixes #30

zuiderkwast commented 2 months ago

To review, it's probably best to try to brows the repo in github's web interface here on my branch: https://github.com/zuiderkwast/valkey-doc/blob/restored-topics-structure/topics/introduction.md

The idea is that the links should work. (Previously they only worked in the rendered website.)

This purpose is to make it easier for doc contributors and to make the docs more self-contained.

zuiderkwast commented 2 months ago

Details about renamed/moved files and updated links within the files.

Moved files ``` Rename: docs/manual/keyspace.md -> topics/keyspace.md Rename: docs/reference/internals/internals-vm.md -> topics/internals-vm.md Rename: docs/about/history.md -> topics/history.md Rename: docs/data-types/strings.md -> topics/strings.md Rename: docs/get-started/img/free-cloud-db.png -> topics/free-cloud-db.png Rename: docs/reference/key-specs.md -> topics/key-specs.md Rename: docs/reference/signals.md -> topics/signals.md Rename: docs/about/_index.md -> topics/introduction.md Rename: docs/reference/internals/rdd.md -> topics/rdd.md Rename: docs/reference/eviction/index.md -> topics/lru-cache.md Rename: docs/management/replication.md -> topics/replication.md Rename: docs/data-types/geospatial.md -> topics/geospatial.md Rename: docs/connect/clients/dotnet.md -> topics/dotnet.md Rename: docs/management/sentinel.md -> topics/sentinel.md Rename: docs/data-types/_index.md -> topics/data-types.md Rename: docs/reference/command-arguments.md -> topics/command-arguments.md Rename: docs/install/install-redis/install-redis-on-windows.md -> topics/install-valkey-on-windows.md Rename: docs/management/troubleshooting.md -> topics/problems.md Rename: docs/get-started/data/bikes.json -> topics/bikes.json Rename: docs/reference/modules/modules-blocking-ops.md -> topics/modules-blocking-ops.md Rename: docs/manual/patterns/indexes/2idx_1.png -> topics/2idx_1.png Rename: docs/data-types/hashes.md -> topics/hashes.md Rename: docs/management/optimization/benchmarks/Connections_chart.png -> topics/Connections_chart.png Rename: docs/reference/eviction/lru_comparison.png -> topics/lru_comparison.png Rename: docs/about/releases.md -> topics/releases.md Rename: docs/about/license.md -> topics/license.md Rename: docs/data-types/lists.md -> topics/lists.md Rename: docs/data-types/probabilistic/hyperloglogs.md -> topics/hyperloglogs.md Rename: docs/reference/command-tips.md -> topics/command-tips.md Rename: docs/reference/protocol-spec.md -> topics/protocol.md Rename: docs/manual/patterns/indexes/index.md -> topics/indexing.md Rename: docs/get-started/_index.md -> topics/get-started.md Rename: docs/interact/pubsub.md -> topics/pubsub.md Rename: docs/management/scaling.md -> topics/cluster-tutorial.md Rename: docs/management/optimization/benchmarks/NUMA_chart.gif -> topics/NUMA_chart.gif Rename: docs/interact/programmability/lua-api.md -> topics/lua-api.md Rename: docs/management/optimization/latency.md -> topics/latency.md Rename: docs/install/install-redis/_index.md -> topics/install-valkey.md Rename: docs/reference/sentinel-clients.md -> topics/sentinel-clients.md Rename: docs/management/config.md -> topics/config.md Rename: docs/interact/programmability/eval-intro.md -> topics/eval-intro.md Rename: docs/management/security/_index.md -> topics/security.md Rename: docs/reference/clients.md -> topics/clients.md Rename: docs/data-types/bitfields.md -> topics/bitfields.md Rename: docs/interact/programmability/_index.md -> topics/programmability.md Rename: docs/data-types/bitmaps.md -> topics/bitmaps.md Rename: docs/reference/internals/internals-rediseventlib.md -> topics/internals-eventlib.md Rename: docs/management/optimization/cpu-profiling.md -> topics/performance-on-cpu.md Rename: docs/data-types/sets.md -> topics/sets.md Rename: docs/reference/arm.md -> topics/ARM.md Rename: docs/manual/patterns/distributed-locks.md -> topics/distlock.md Rename: docs/interact/programmability/functions-intro.md -> topics/functions-intro.md Rename: docs/manual/pipelining/pipeline_iops.png -> topics/pipeline_iops.png Rename: docs/reference/internals/internals-sds.md -> topics/internals-sds.md Rename: docs/management/optimization/benchmarks/Data_size.png -> topics/Data_size.png Rename: docs/data-types/streams.md -> topics/streams-intro.md Rename: docs/install/install-redis/install-redis-from-source.md -> topics/install-valkey-from-source.md Rename: docs/reference/cluster-spec.md -> topics/cluster-spec.md Rename: docs/connect/cli.md -> topics/cli.md Rename: docs/reference/modules/modules-api-ref.md -> topics/modules-api-ref.md Rename: docs/manual/keyspace-notifications.md -> topics/notifications.md Rename: docs/interact/transactions.md -> topics/transactions.md Rename: docs/reference/gopher.md -> topics/gopher.md Rename: docs/get-started/data-store.md -> topics/data-store.md Rename: docs/reference/internals/_index.md -> topics/internals.md Rename: docs/_index.md -> topics/index.md Rename: docs/manual/patterns/indexes/2idx_2.png -> topics/2idx_2.png Rename: docs/manual/patterns/bulk-loading.md -> topics/mass-insertion.md Rename: docs/management/admin.md -> topics/admin.md Rename: docs/manual/patterns/twitter-clone.md -> topics/twitter-clone.md Rename: docs/connect/_index.md -> topics/connect.md Rename: docs/install/install-redis/install-redis-on-mac-os.md -> topics/install-valkey-on-mac-os.md Rename: docs/manual/pipelining/index.md -> topics/pipelining.md Rename: docs/interact/programmability/lua-debugging.md -> topics/ldb.md Rename: docs/install/install-redis/install-redis-on-linux.md -> topics/install-valkey-on-linux.md Rename: docs/management/security/acl.md -> topics/acl.md Rename: docs/reference/modules/_index.md -> topics/modules-intro.md Rename: docs/reference/modules/modules-native-types.md -> topics/modules-native-types.md Rename: docs/connect/clients/nodejs.md -> topics/nodejs.md Rename: docs/data-types/sorted-sets.md -> topics/sorted-sets.md Rename: docs/management/optimization/latency-monitor.md -> topics/latency-monitor.md Rename: docs/management/persistence.md -> topics/persistence.md Rename: docs/management/debugging.md -> topics/debugging.md Rename: docs/connect/clients/python.md -> topics/python.md Rename: docs/management/optimization/memory-optimization.md -> topics/memory-optimization.md Rename: docs/manual/patterns/indexes/2idx_0.png -> topics/2idx_0.png Rename: docs/connect/clients/go.md -> topics/go.md Rename: docs/manual/client-side-caching.md -> topics/client-side-caching.md Rename: docs/management/optimization/benchmarks/index.md -> topics/benchmarks.md Rename: docs/connect/clients/java.md -> topics/java.md Rename: docs/get-started/faq.md -> topics/faq.md Rename: docs/management/security/encryption.md -> topics/encryption.md ```
Changed links ``` Change link: /topics/introduction => topics/introduction.md (in _index.md) Change link: /docs/data-types/streams-tutorial => streams-intro.md (in topics/pubsub.md) Change link: /topics/protocol#array-reply => protocol.md#array-reply (in topics/pubsub.md) Change link: /topics/persistence#append-only-file => persistence.md#append-only-file (in topics/transactions.md) Change link: /topics/protocol#bulk-string-reply => protocol.md#bulk-string-reply (in topics/transactions.md) Change link: /topics/protocol#nil-reply => protocol.md#nil-reply (in topics/transactions.md) Change link: /topics/protocol#nil-reply => protocol.md#nil-reply (in topics/transactions.md) Change link: /commands/eval => ../commands/eval.md (in topics/transactions.md) Change link: /docs/manual/programmability/functions-intro => functions-intro.md (in topics/programmability.md) Change link: /docs/manual/programmability/eval-intro => eval-intro.md (in topics/programmability.md) Change link: /commands => ../commands/ (in topics/programmability.md) Change link: /topics/data-types-intro => (in topics/programmability.md) Change link: /topics/lua-api => lua-api.md (in topics/programmability.md) Change link: /topics/eval-intro => eval-intro.md (in topics/programmability.md) Change link: /topics/functions-intro => functions-intro.md (in topics/programmability.md) Change link: /topics/transactions => transactions.md (in topics/programmability.md) Change link: /topics/lua-api#script_flags => lua-api.md#script_flags (in topics/programmability.md) Change link: /topics/lua-api#script_flags => lua-api.md#script_flags (in topics/programmability.md) Change link: /docs/manual/programmability/eval-intro => eval-intro.md (in topics/functions-intro.md) Change link: /topics/eval-intro => eval-intro.md (in topics/functions-intro.md) Change link: /topics/transactions => transactions.md (in topics/functions-intro.md) Change link: /topics/lua-api#runtime-globals => lua-api.md#runtime-globals (in topics/functions-intro.md) Change link: /topics/lua-api => lua-api.md (in topics/functions-intro.md) Change link: /topics/ldb => ldb.md (in topics/functions-intro.md) Change link: /topics/transactions => transactions.md (in topics/functions-intro.md) Change link: /topics/eval-intro => eval-intro.md (in topics/functions-intro.md) Change link: /topics/lua-api => lua-api.md (in topics/functions-intro.md) Change link: /topics/lua-api#server.setresp => lua-api.md#server.setresp (in topics/functions-intro.md) Change link: /topics/lua-api#server.error_reply => lua-api.md#server.error_reply (in topics/functions-intro.md) Change link: /topics/lua-api#server.register_function_named_args => lua-api.md#server.register_function_named_args (in topics/functions-intro.md) Change link: /topics/lua-api#script_flags => lua-api.md#script_flags (in topics/functions-intro.md) Change link: /topics/eval-intro => eval-intro.md (in topics/lua-api.md) Change link: /topics/functions-intro => functions-intro.md (in topics/lua-api.md) Change link: /topics/eval-intro => eval-intro.md (in topics/lua-api.md) Change link: /topics/eval-intro => eval-intro.md (in topics/lua-api.md) Change link: /topics/eval-intro#execution-under-low-memory-conditions => eval-intro.md#execution-under-low-memory-conditions (in topics/lua-api.md) Change link: /topics/protocol#resp-errors => protocol.md#resp-errors (in topics/lua-api.md) Change link: /topics/protocol#resp-simple-strings => protocol.md#resp-simple-strings (in topics/lua-api.md) Change link: /topics/protocol => protocol.md (in topics/lua-api.md) Change link: /topics/eval-intro#replicating-commands-instead-of-scripts => eval-intro.md#replicating-commands-instead-of-scripts (in topics/lua-api.md) Change link: /topics/ldb => ldb.md (in topics/lua-api.md) Change link: /topics/ldb => ldb.md (in topics/lua-api.md) Change link: /topics/acl => acl.md (in topics/lua-api.md) Change link: /docs/manual/programmability/eval-intro/#eval-flags => eval-intro.md#eval-flags (in topics/lua-api.md) Change link: /topics/eval-intro#eval-flags => eval-intro.md#eval-flags (in topics/lua-api.md) Change link: /docs/manual/programmability/#read-only_scripts => programmability.md#read-only_scripts (in topics/lua-api.md) Change link: /topics/eval-intro#eval-flags => eval-intro.md#eval-flags (in topics/lua-api.md) Change link: /topics/eval-intro#eval-flags => eval-intro.md#eval-flags (in topics/lua-api.md) Change link: /docs/manual/programmability/functions-intro/#function-flags => functions-intro.md#function-flags (in topics/lua-api.md) Change link: /docs/manual/programmability/eval-intro/#eval-flags => eval-intro.md#eval-flags (in topics/lua-api.md) Change link: /topics/protocol => protocol.md (in topics/lua-api.md) Change link: /topics/protocol#resp-integers => protocol.md#resp-integers (in topics/lua-api.md) Change link: /topics/protocol#resp-bulk-strings => protocol.md#resp-bulk-strings (in topics/lua-api.md) Change link: /topics/protocol#resp-arrays => protocol.md#resp-arrays (in topics/lua-api.md) Change link: /topics/protocol#resp-simple-strings => protocol.md#resp-simple-strings (in topics/lua-api.md) Change link: /topics/protocol#resp-errors => protocol.md#resp-errors (in topics/lua-api.md) Change link: /topics/protocol#null-elements-in-arrays => protocol.md#null-elements-in-arrays (in topics/lua-api.md) Change link: /topics/protocol#resp-arrays => protocol.md#resp-arrays (in topics/lua-api.md) Change link: /topics/protocol#resp-integers => protocol.md#resp-integers (in topics/lua-api.md) Change link: /topics/protocol#resp-bulk-strings => protocol.md#resp-bulk-strings (in topics/lua-api.md) Change link: /topics/protocol#resp-arrays => protocol.md#resp-arrays (in topics/lua-api.md) Change link: /topics/protocol#resp-simple-strings => protocol.md#resp-simple-strings (in topics/lua-api.md) Change link: /topics/protocol#resp-errors => protocol.md#resp-errors (in topics/lua-api.md) Change link: /topics/protocol#null-elements-in-arrays => protocol.md#null-elements-in-arrays (in topics/lua-api.md) Change link: /topics/protocol#resp-integers => protocol.md#resp-integers (in topics/lua-api.md) Change link: /topics/protocol => protocol.md (in topics/lua-api.md) Change link: /topics/protocol => protocol.md (in topics/ldb.md) Change link: /clients => /clients/ (in topics/ldb.md) Change link: /commands => ../commands/ (in topics/eval-intro.md) Change link: /topics/lua-api => lua-api.md (in topics/eval-intro.md) Change link: /topics/functions-intro => functions-intro.md (in topics/eval-intro.md) Change link: /topics/lua-api#the-keys-global-variable => lua-api.md#the-keys-global-variable (in topics/eval-intro.md) Change link: /topics/lua-api#the-argv-global-variable => lua-api.md#the-argv-global-variable (in topics/eval-intro.md) Change link: /topics/protocol#resp-arrays => protocol.md#resp-arrays (in topics/eval-intro.md) Change link: /topics/lua-api#data-type-conversion => lua-api.md#data-type-conversion (in topics/eval-intro.md) Change link: /topics/lua-api#server.call => lua-api.md#server.call (in topics/eval-intro.md) Change link: /topics/lua-api#server.pcall => lua-api.md#server.pcall (in topics/eval-intro.md) Change link: /clients => /clients/ (in topics/eval-intro.md) Change link: /topics/pipelining => pipelining.md (in topics/eval-intro.md) Change link: /topics/transactions => transactions.md (in topics/eval-intro.md) Change link: /topics/programmability#maximum-execution-time => programmability.md#maximum-execution-time (in topics/eval-intro.md) Change link: /topics/ldb => ldb.md (in topics/eval-intro.md) Change link: /topics/cluster-tutorial => cluster-tutorial.md (in topics/eval-intro.md) Change link: /topics/replication => replication.md (in topics/eval-intro.md) Change link: /topics/lua-api#server.replicate_commands => lua-api.md#server.replicate_commands (in topics/eval-intro.md) Change link: /topics/transactions => transactions.md (in topics/eval-intro.md) Change link: /topics/lua-api#server.replicate_commands => lua-api.md#server.replicate_commands (in topics/eval-intro.md) Change link: /topics/lua-api#runtime-libraries => lua-api.md#runtime-libraries (in topics/eval-intro.md) Change link: /topics/rediscli => (in topics/eval-intro.md) Change link: /topics/ldb => ldb.md (in topics/eval-intro.md) Change link: /topics/lua-api#server.pcall => lua-api.md#server.pcall (in topics/eval-intro.md) Change link: /topics/lua-api#script_flags => lua-api.md#script_flags (in topics/eval-intro.md) Change link: /commands/eval => ../commands/eval.md (in topics/pipelining.md) Change link: /commands/geoadd => ../commands/geoadd.md (in topics/indexing.md) Change link: /commands/eval => ../commands/eval.md (in topics/indexing.md) Change link: /topics/partitioning => cluster-tutorial.md (in topics/twitter-clone.md) Change link: /topics/protocol => protocol.md (in topics/mass-insertion.md) Change link: /commands/?group=list => ../commands/?group=list (in topics/lists.md) Change link: /docs/data-types/sorted-sets => sorted-sets.md (in topics/lists.md) Change link: /docs/data-types/streams => streams-intro.md (in topics/lists.md) Change link: /docs/manual/client-side-caching/ => client-side-caching.md (in topics/data-types.md) Change link: /docs/data-types/lists/ => lists.md (in topics/data-types.md) Change link: /docs/data-types/streams/ => streams-intro.md (in topics/data-types.md) Change link: /docs/data-types/strings => strings.md (in topics/data-types.md) Change link: /docs/data-types/strings/ => strings.md (in topics/data-types.md) Change link: /commands/?group=string => ../commands/?group=string (in topics/data-types.md) Change link: /docs/data-types/lists => lists.md (in topics/data-types.md) Change link: /docs/data-types/lists/ => lists.md (in topics/data-types.md) Change link: /commands/?group=list => ../commands/?group=list (in topics/data-types.md) Change link: /docs/data-types/sets => sets.md (in topics/data-types.md) Change link: /docs/data-types/sets/ => sets.md (in topics/data-types.md) Change link: /commands/?group=set => ../commands/?group=set (in topics/data-types.md) Change link: /docs/data-types/hashes => hashes.md (in topics/data-types.md) Change link: /docs/data-types/hashes/ => hashes.md (in topics/data-types.md) Change link: /commands/?group=hash => ../commands/?group=hash (in topics/data-types.md) Change link: /docs/data-types/sorted-sets => sorted-sets.md (in topics/data-types.md) Change link: /docs/data-types/sorted-sets => sorted-sets.md (in topics/data-types.md) Change link: /commands/?group=sorted-set => ../commands/?group=sorted-set (in topics/data-types.md) Change link: /docs/data-types/streams => streams-intro.md (in topics/data-types.md) Change link: /docs/data-types/streams => streams-intro.md (in topics/data-types.md) Change link: /commands/?group=stream => ../commands/?group=stream (in topics/data-types.md) Change link: /docs/data-types/geospatial => geospatial.md (in topics/data-types.md) Change link: /docs/data-types/geospatial/ => geospatial.md (in topics/data-types.md) Change link: /commands/?group=geo => ../commands/?group=geo (in topics/data-types.md) Change link: /docs/data-types/bitmaps/ => bitmaps.md (in topics/data-types.md) Change link: /docs/data-types/bitmaps/ => bitmaps.md (in topics/data-types.md) Change link: /commands/?group=bitmap => ../commands/?group=bitmap (in topics/data-types.md) Change link: /docs/data-types/bitfields/ => bitfields.md (in topics/data-types.md) Change link: /docs/data-types/bitfields/ => bitfields.md (in topics/data-types.md) Change link: /docs/data-types/hyperloglogs => hyperloglogs.md (in topics/data-types.md) Change link: /docs/data-types/hyperloglogs => hyperloglogs.md (in topics/data-types.md) Change link: /commands/?group=hyperloglog => ../commands/?group=hyperloglog (in topics/data-types.md) Change link: /docs/manual/programmability/ => programmability.md (in topics/data-types.md) Change link: /docs/modules/ => /resources/modules/ (in topics/data-types.md) Change link: /commands/?group=hash => ../commands/?group=hash (in topics/hashes.md) Change link: /commands/?group=bitmap => ../commands/?group=bitmap (in topics/bitmaps.md) Change link: /docs/data-types/bitmaps => bitmaps.md (in topics/strings.md) Change link: /commands/?group=string => ../commands/?group=string (in topics/strings.md) Change link: /docs/data-types/hashes => hashes.md (in topics/strings.md) Change link: /commands/?group=geo => ../commands/?group=geo (in topics/geospatial.md) Change link: /commands#hyperloglog => ../commands/#hyperloglog (in topics/hyperloglogs.md) Change link: /commands/?group=hyperloglog => ../commands/?group=hyperloglog (in topics/hyperloglogs.md) Change link: /commands/?group=stream => ../commands/?group=stream (in topics/streams-intro.md) Change link: /docs/data-types/streams-tutorial => streams-intro.md (in topics/streams-intro.md) Change link: /commands/?group=set => ../commands/?group=set (in topics/sets.md) Change link: /commands/?group=sorted-set => ../commands/?group=sorted-set (in topics/sorted-sets.md) Change link: /docs/getting-started/ => get-started.md (in topics/python.md) Change link: /docs/getting-started/ => get-started.md (in topics/nodejs.md) Change link: /docs/getting-started/ => get-started.md (in topics/dotnet.md) Change link: /docs/connect/cli => cli.md (in topics/connect.md) Change link: /docs/connect/clients/dotnet => dotnet.md (in topics/connect.md) Change link: /docs/connect/clients/go => go.md (in topics/connect.md) Change link: /docs/connect/clients/java => java.md (in topics/connect.md) Change link: /docs/connect/clients/nodejs => nodejs.md (in topics/connect.md) Change link: /docs/connect/clients/python => python.md (in topics/connect.md) Change link: /topics/mass-insert => (in topics/cli.md) Change link: /topics/ldb => ldb.md (in topics/cli.md) Change link: /commands => ../commands/ (in topics/cli.md) Change link: /topics/pubsub => pubsub.md (in topics/cli.md) Change link: /topics/latency => latency.md (in topics/cli.md) Change link: /topics/lru-cache => lru-cache.md (in topics/cli.md) Change link: /topics/lru-cache => lru-cache.md (in topics/cli.md) Change link: /topics/sentinel => sentinel.md (in topics/sentinel-clients.md) Change link: /topics/sentinel => sentinel.md (in topics/sentinel-clients.md) Change link: /docs/reference/cluster-spec => cluster-spec.md (in topics/protocol.md) Change link: /docs/manual/pubsub => pubsub.md (in topics/protocol.md) Change link: /docs/manual/cli => cli.md (in topics/protocol.md) Change link: /topics/pipelining => pipelining.md (in topics/protocol.md) Change link: /topics/lua-api#lua-to-resp3-type-conversion => lua-api.md#lua-to-resp3-type-conversion (in topics/protocol.md) Change link: /commands/command#flags => ../commands/command.md#flags (in topics/key-specs.md) Change link: /topics/modules-native-types => modules-native-types.md (in topics/modules-intro.md) Change link: /topics/modules-blocking-ops => modules-blocking-ops.md (in topics/modules-intro.md) Change link: /topics/modules-api-ref => modules-api-ref.md (in topics/modules-intro.md) Change link: /docs/install/install-redis/install-redis-from-source => install-valkey-from-source.md (in topics/install-valkey.md) Change link: /docs/install/install-redis/install-redis-on-linux => install-valkey-on-linux.md (in topics/install-valkey.md) Change link: /docs/install/install-redis/install-redis-on-mac-os => install-valkey-on-mac-os.md (in topics/install-valkey.md) Change link: /docs/install/install-redis/install-redis-on-windows => install-valkey-on-windows.md (in topics/install-valkey.md) Change link: /docs/management/admin/ => admin.md (in topics/install-valkey.md) Change link: /clients => /clients/ (in topics/install-valkey.md) Change link: /docs/management/persistence/ => persistence.md (in topics/install-valkey.md) Change link: /docs/management/persistence/ => persistence.md (in topics/install-valkey.md) Change link: /docs/management/config/ => config.md (in topics/install-valkey.md) Change link: /docs/install/install-redis/install-redis-from-source => install-valkey-from-source.md (in topics/install-valkey-on-mac-os.md) Change link: /docs/get-started/data-store => data-store.md (in topics/get-started.md) Change link: /docs/get-started/faq/ => faq.md (in topics/get-started.md) Change link: /docs/connect => /docs/connect/ (in topics/data-store.md) Change link: /commands/ => ../commands/ (in topics/data-store.md) Change link: /docs/manual/keyspace/ => keyspace.md (in topics/data-store.md) Change link: /commands/scan/ => ../commands/scan.md (in topics/data-store.md) Change link: /commands/scan/ => ../commands/scan.md (in topics/data-store.md) Change link: /topics/partitioning => cluster-tutorial.md (in topics/faq.md) Change link: /topics/memory-optimization => memory-optimization.md (in topics/faq.md) Change link: /docs/manual/eviction/ => lru-cache.md (in topics/faq.md) Change link: /topics/partitioning => cluster-tutorial.md (in topics/faq.md) Change link: /topics/history => history.md (in topics/faq.md) Change link: /docs/data-types/strings/ => strings.md (in topics/introduction.md) Change link: /docs/data-types/hashes/ => hashes.md (in topics/introduction.md) Change link: /docs/data-types/lists/ => lists.md (in topics/introduction.md) Change link: /docs/data-types/sets/ => sets.md (in topics/introduction.md) Change link: /docs/data-types/sorted-sets/ => sorted-sets.md (in topics/introduction.md) Change link: /docs/data-types/bitmaps/ => bitmaps.md (in topics/introduction.md) Change link: /docs/data-types/hyperloglogs/ => hyperloglogs.md (in topics/introduction.md) Change link: /docs/data-types/geospatial/ => geospatial.md (in topics/introduction.md) Change link: /docs/data-types/streams/ => streams-intro.md (in topics/introduction.md) Change link: /topics/replication => replication.md (in topics/introduction.md) Change link: /commands/eval => ../commands/eval.md (in topics/introduction.md) Change link: /docs/reference/eviction/ => lru-cache.md (in topics/introduction.md) Change link: /topics/transactions => transactions.md (in topics/introduction.md) Change link: /topics/persistence => persistence.md (in topics/introduction.md) Change link: /topics/sentinel => sentinel.md (in topics/introduction.md) Change link: /topics/cluster-tutorial => cluster-tutorial.md (in topics/introduction.md) Change link: /commands/append => ../commands/append.md (in topics/introduction.md) Change link: /commands/hincrby => ../commands/hincrby.md (in topics/introduction.md) Change link: /commands/lpush => ../commands/lpush.md (in topics/introduction.md) Change link: /commands/sinter => ../commands/sinter.md (in topics/introduction.md) Change link: /commands/sunion => ../commands/sunion.md (in topics/introduction.md) Change link: /commands/sdiff => ../commands/sdiff.md (in topics/introduction.md) Change link: /commands/zrange => ../commands/zrange.md (in topics/introduction.md) Change link: /topics/persistence#snapshotting => persistence.md#snapshotting (in topics/introduction.md) Change link: /topics/persistence#append-only-file => persistence.md#append-only-file (in topics/introduction.md) Change link: /topics/replication => replication.md (in topics/introduction.md) Change link: /topics/transactions => transactions.md (in topics/introduction.md) Change link: /topics/pubsub => pubsub.md (in topics/introduction.md) Change link: /commands/eval => ../commands/eval.md (in topics/introduction.md) Change link: /commands/expire => ../commands/expire.md (in topics/introduction.md) Change link: /docs/reference/eviction => lru-cache.md (in topics/introduction.md) Change link: /topics/sentinel => sentinel.md (in topics/introduction.md) Change link: /clients => /clients/ (in topics/introduction.md) Change link: /topics/security => security.md (in topics/admin.md) Change link: /topics/quickstart => (in topics/admin.md) Change link: /topics/sentinel => sentinel.md (in topics/admin.md) Change link: /topics/cluster-tutorial => cluster-tutorial.md (in topics/admin.md) Change link: /topics/lru-cache => lru-cache.md (in topics/config.md) Change link: /docs/reference/eviction => lru-cache.md (in topics/memory-optimization.md) Change link: /commands/slowlog => ../commands/slowlog.md (in topics/latency.md) Change link: /topics/latency-monitor => latency-monitor.md (in topics/latency.md) Change link: /topics/latency-monitor => latency-monitor.md (in topics/latency.md) Change link: /commands/slowlog => ../commands/slowlog.md (in topics/latency.md) Change link: /topics/pipelining => pipelining.md (in topics/benchmarks.md) Change link: /topics/latency => latency.md (in topics/latency-monitor.md) Change link: /docs/manual/scaling => cluster-tutorial.md (in topics/sentinel.md) Change link: /topics/acl => acl.md (in topics/sentinel.md) Change link: /topics/acl => acl.md (in topics/sentinel.md) Change link: /topics/acl => acl.md (in topics/sentinel.md) Change link: /topics/sentinel-clients => sentinel-clients.md (in topics/sentinel.md) Change link: /topics/latency => latency.md (in topics/problems.md) Change link: /topics/debugging => debugging.md (in topics/problems.md) Change link: /docs/management/security/acl/ => acl.md (in topics/security.md) Change link: /topics/key-specs#logical-operation-flags => key-specs.md#logical-operation-flags (in topics/acl.md) Change link: /topics/security => security.md (in topics/replication.md) Change link: /topics/cluster-spec => cluster-spec.md (in topics/cluster-tutorial.md) Change link: /topics/cluster-spec => cluster-spec.md (in topics/cluster-tutorial.md) Change link: /topics/cluster-spec => cluster-spec.md (in topics/cluster-tutorial.md) Change link: /docs/reference/protocol-spec#arrays => topics/protocol.md#arrays (in README.md) Change link: /docs/reference/protocol-spec#bulk-strings => topics/protocol.md#bulk-strings (in README.md) Change link: /docs/reference/protocol-spec#simple-errors => topics/protocol.md#simple-errors (in README.md) Change link: /docs/reference/cluster-spec/#hash-tags => ../topics/cluster-spec.md#hash-tags (in commands/sort.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xpending.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xpending.md) Change link: /docs/interact/pubsub/ => ../topics/pubsub.md (in commands/psubscribe.md) Change link: /topics/client-side-caching => ../topics/client-side-caching.md (in commands/client-trackinginfo.md) Change link: /topics/client-side-caching => ../topics/client-side-caching.md (in commands/client-tracking.md) Change link: /topics/client-side-caching => ../topics/client-side-caching.md (in commands/client-tracking.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-delete.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xreadgroup.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xreadgroup.md) Change link: /topics/programmability => ../topics/programmability.md (in commands/evalsha.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/evalsha.md) Change link: /docs/manual/programmability/#read-only-scripts => ../topics/programmability.md#read-only-scripts (in commands/evalsha_ro.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/evalsha_ro.md) Change link: /docs/management/scaling/ => ../topics/cluster-tutorial.md (in commands/keys.md) Change link: /docs/reference/cluster-spec/#hash-tags => ../topics/cluster-spec.md#hash-tags (in commands/keys.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xclaim.md) Change link: /topics/pubsub#pubsub => ../topics/pubsub.md#pubsub (in commands/cluster-info.md) Change link: /topics/pubsub#sharded-pubsub => ../topics/pubsub.md#sharded-pubsub (in commands/cluster-info.md) Change link: /topics/cluster-spec#cluster-current-epoch => ../topics/cluster-spec.md#cluster-current-epoch (in commands/cluster-info.md) Change link: /docs/manual/programmability/functions-intro/#function-flags => ../topics/functions-intro.md#function-flags (in commands/function-list.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-list.md) Change link: /topics/acl => ../topics/acl.md (in commands/client-kill.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/script-flush.md) Change link: /topics/pubsub#sharded-pubsub => ../topics/pubsub.md#sharded-pubsub (in commands/spublish.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-kill.md) Change link: /topics/programmability => ../topics/programmability.md (in commands/fcall.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/fcall.md) Change link: /topics/client-side-caching => ../topics/client-side-caching.md (in commands/client-getredir.md) Change link: /topics/pubsub#sharded-pubsub => ../topics/pubsub.md#sharded-pubsub (in commands/ssubscribe.md) Change link: /topics/lua-api#server.register_function => ../topics/lua-api.md#server.register_function (in commands/function-load.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-load.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/script-load.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xread.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xread.md) Change link: /docs/management/scaling/ => ../topics/cluster-tutorial.md (in commands/scan.md) Change link: /docs/reference/cluster-spec/#hash-tags => ../topics/cluster-spec.md#hash-tags (in commands/scan.md) Change link: /topics/memory-optimization => ../topics/memory-optimization.md (in commands/scan.md) Change link: /topics/memory-optimization => ../topics/memory-optimization.md (in commands/scan.md) Change link: /docs/manual/keyspace => ../topics/keyspace.md (in commands/scan.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-stats.md) Change link: /topics/clients#client-eviction => ../topics/clients.md#client-eviction (in commands/client-no-evict.md) Change link: /topics/clients#client-eviction => ../topics/clients.md#client-eviction (in commands/client-no-evict.md) Change link: /topics/acl => ../topics/acl.md (in commands/acl-setuser.md) Change link: /topics/acl#key-permissions => ../topics/acl.md#key-permissions (in commands/acl-setuser.md) Change link: /topics/acl#key-permissions => ../topics/acl.md#key-permissions (in commands/acl-setuser.md) Change link: /docs/management/security/acl#selectors => ../topics/acl.md#selectors (in commands/acl-setuser.md) Change link: /topics/key-specs#logical-operation-flags => ../topics/key-specs.md#logical-operation-flags (in commands/command-getkeys.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-flush.md) Change link: /docs/interact/pubsub/ => ../topics/pubsub.md (in commands/subscribe.md) Change link: /docs/management/security/acl/ => ../topics/acl.md (in commands/acl.md) Change link: /topics/signals => ../topics/signals.md (in commands/shutdown.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-restore.md) Change link: /topics/lua-api => ../topics/lua-api.md (in commands/eval.md) Change link: /topics/lua-api#the-keys-global-variable => ../topics/lua-api.md#the-keys-global-variable (in commands/eval.md) Change link: /topics/programmability => ../topics/programmability.md (in commands/eval.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/eval.md) Change link: /topics/client-side-caching => ../topics/client-side-caching.md (in commands/client-caching.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/script-kill.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xadd.md) Change link: /topics/acl => ../topics/acl.md (in commands/auth.md) Change link: /topics/acl => ../topics/acl.md (in commands/auth.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/script-exists.md) Change link: /topics/pubsub#sharded-pubsub => ../topics/pubsub.md#sharded-pubsub (in commands/sunsubscribe.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xrange.md) Change link: /topics/streams-intro => ../topics/streams-intro.md (in commands/xrange.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/function-dump.md) Change link: /docs/management/security/acl/#command-categories => ../topics/acl.md#command-categories (in commands/command-list.md) Change link: /docs/manual/programmability/#read-only-scripts => ../topics/programmability.md#read-only-scripts (in commands/eval_ro.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/eval_ro.md) Change link: /topics/transactions => ../topics/transactions.md (in commands/command.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/command.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/command.md) Change link: /topics/pubsub => ../topics/pubsub.md (in commands/command.md) Change link: /docs/manual/programmability/#read-only_scripts => ../topics/programmability.md#read-only_scripts (in commands/fcall_ro.md) Change link: /topics/functions-intro => ../topics/functions-intro.md (in commands/fcall_ro.md) Change link: /topics/ldb => ../topics/ldb.md (in commands/script-debug.md) Change link: /topics/eval-intro => ../topics/eval-intro.md (in commands/script-debug.md) Change link: /topics/cluster-spec#ask-redirection => ../topics/cluster-spec.md#ask-redirection (in commands/asking.md) Change link: /topics/key-specs#logical-operation-flags => ../topics/key-specs.md#logical-operation-flags (in commands/command-getkeysandflags.md) Change link: /topics/key-specs#logical-operation-flags => ../topics/key-specs.md#logical-operation-flags (in commands/command-getkeysandflags.md) ```
zuiderkwast commented 2 months ago

Here is the Perl script. (Sorry, Perl is my native language for this kind of tasks. :grin:)

move-files-fix-links.pl ``` #!/usr/bin/perl # # "Usage: find | $0\n"; # use warnings; use strict; my $verbose = 1; my $filenames = []; my $rename_to = {}; # current filename => preferred filename my $aliases = {}; # alias name (starts with slash, no suffix) => target filename sub add_filename_alias { my ($alias, $target) = (@_); $alias =~ s!\.md$!!; $alias = "/" . $alias; $target =~ s!/_index$!/!; $aliases->{$alias} = $target; } # 1st pass. Collect filenames, aliases and store prefered alias in rename_to. while (<>) { chomp; s!^\./!!; # Strip leading ./ from path next if /^\./; # Skip hidden files next if /^tmp/; # Skip tmp files my $filename = $_; add_filename_alias("$filename/", "$filename/index.md") if -d $filename; next unless -f $filename; # Skip non-regular files. open my $f, $filename or die; push @$filenames, $filename; #print "Added $filename\n"; # Add alias to itself /xxx --> xxx.md add_filename_alias($filename, $filename); # If there's any metadata, the first line contains three dashes (optionally # preceded by an UTF-8 BOM). $_ = <$f>; # if (!defined $_) { # die "Something whatever in $filename\n"; # } do {close $f; next} unless /^(?:\x{ef}\x{bb}\x{bf})?---/; my $in_aliases = 0; my $topic = undef; while (<$f>) { last if /^---/; if ($in_aliases) { last if /^\]/; if (/^\s*-?\s*([\/\w\d\._-]+),?\s*$/) { my $alias = $1; if ($alias =~ /_/) { # Alias contains underscore. Add aliases with underscore and # with dash. One example is known (topics/lru-cache) $aliases->{$alias} = $filename; $alias =~ tr/_/-/; } $aliases->{$alias} = $filename; if (!$topic && $alias =~ /^\/topic.*/) { $topic = $alias; $topic .= '.md' unless $topic =~ /\.md$/; $rename_to->{$filename} = $topic; } } } else { $in_aliases = 1 if /^aliases:/; } } close $f; } print @$filenames." files found\n"; if (!@$filenames) { die "Usage: find | $0\n"; } # 2nd pass: # - Choose a new name for files that don't aldready have a /topic/ alias. # - Some processing of the target filename. foreach my $filename (@$filenames) { my $target; if (defined $rename_to->{$filename}) { $target = $rename_to->{$filename}; $target =~ s!^/!!; } elsif ($filename !~ /^docs\//) { # Outside of docs, only rename _index.md to index.md $target = $filename; $target =~ s!/_index.md!/index.md!; } elsif ($filename =~ /\/([^\/]+)\/_index.md$/) { $target = "topics/$1.md"; } elsif ($filename =~ /([^\/]+)$/) { $target = "topics/$1"; } else { die "Can't figure out new filename for $filename\n"; } # Some processing of the names. Only rebrand pages under topics. (We don't # want to rename clients.) $target =~ s/\bredis\b/valkey/g if $target =~ /^topics\//; $target = "topics/index.md" if $target eq "topics.md"; # Add alias with the name minus .md if ($target =~ /^([^\/].*)\.md$/) { $aliases->{"/$1"} = $target; } unless ($filename eq $target) { $rename_to->{$filename} = $target; } } # 3rd pass: Update the aliases which map to a file that is to be renamed foreach my $alias (keys %$aliases) { my $filename = $aliases->{$alias}; if (defined $rename_to->{$filename}) { my $to = $rename_to->{$filename}; $aliases->{$alias} = $to; } print "Alias: $alias -> $aliases->{$alias}\n" if $verbose; } sub unalias { my ($link, $filename) = (@_); my $old = $link; # new link my $anchor = ""; if ($link =~ /^https?::/ || $link =~ /^#/) { printf "Skip non-relative link $link in $filename\n"; return $link; } if ($link =~ /^([^?#]*)([?#].*)/) { $link = $1; $anchor = $2; } if (defined $aliases->{$link}) { # Alias found. $link = $aliases->{$link}; } elsif ($link =~ /^(.*)\// && defined $aliases->{$1}) { # Link has trailing slash. Alias doesn't. Drop it. $link = $aliases->{$1}; } elsif ($link =~ /[^\/]$/ && defined $aliases->{"$link/"}) { # Link missing trailing slash, but alias has one. Use that. $link = $aliases->{"$link/"}; } elsif ($link =~ /\/$/ && defined $aliases->{$link . "_index"}) { # Link has trailing slash, alias has /_index. Use that. $link = $aliases->{$link . "_index"}; } elsif ($link =~ /[^\/]$/ && defined $aliases->{"$link/_index"}) { # Link missing trailing slash, alias has /_index. Use that. $link = $aliases->{"$link/_index"}; } elsif ($link =~ /\/$/ && defined $aliases->{$link . "index"}) { # Link has trailing slash, alias has /index. Use that. $link = $aliases->{$link . "index"}; } elsif ($link =~ /[^\/]$/ && defined $aliases->{"$link/index"}) { # Link missing trailing slash, alias has /index. Use that. $link = $aliases->{"$link/index"}; } else { print "### Broken link $link in file $filename\n"; return $link; } $link =~ s!/index.md!/!; $link = "/$link"; $link .= $anchor if $anchor; # Convert to relative link. if ($link =~ m!^/topics/! && $filename =~ m!^topics/[^/]*$!) { $link =~ s!^/topics/!!; } elsif ($link =~ m!^/commands/! && $filename =~ m!^commands/[^/]*$!) { $link =~ s!^/commands/!!; } elsif ($filename =~ m!^[^/]*$!) { # File is in the root dir. Remove leading slash in link. $link =~ s!^/!!; } elsif ($link =~ m!^/topics/! && $filename =~ m!^commands/[^/]*$!) { $link = "..$link"; } elsif ($link =~ m!^/commands/! && $filename =~ m!^topics/[^/]*$!) { $link = "..$link"; } if ($link eq $old) { # print "Link unchanged: $link in $filename\n"; } else { print "Change link: $old => $link (in $filename)\n"; # print as a diff } return $link; } # 4th pass: rename files. foreach my $key(keys %$rename_to) { my $value = $rename_to->{$key}; if ($value =~ m!^/!) { die "Don't want to rename $key to $value\n"; } print "Rename: $key -> $value\n"; `git mv $key $value`; } # Commit renamed files `git commit -sam "Move doc files to /topics/"`; # 5th pass: update links inside files. foreach my $filename (@$filenames) { if (defined $rename_to->{$filename}) { $filename = $rename_to->{$filename}; } next if $filename !~ /\.md$/; open(my $in, "<", $filename) or die "Can't open $filename: $!"; open(my $out, ">", "$filename~~~") or die "Can't create $filename~~~: $!"; while (<$in>) { s%\]\((/[^:\)]*)\)%'](' . unalias($1, $filename) . ')'%ge; print $out $_; } close $in; close $out; rename "$filename~~~", $filename; } ```

(If you want to try it, first mkdir topics. Otherwise it doesn't work.)

zuiderkwast commented 2 months ago

Personally, I think we can merge this and get the website up. Then we can update it regularily later. The longer this kind massive (but somehow trivial) changes wait, the more merge conflicts and other trouble for this and other PRs.

stockholmux commented 2 months ago

Although that Perl is gnarly and I never want to see it again @zuiderkwast ;)

zuiderkwast commented 2 months ago

Awesome, thanks! Should we keep the individual commits? It makes it easier to see what's moved in one commit. (I can enable rebase-and-merge temporarily.)

zuiderkwast commented 2 months ago

Should we keep the individual commits?

Squash-merged. It's possible to go back to this PR to see each commit, if anyone ever wants to do that.