File 0237-otp-Document-previously-removed-functions.patch of Package erlang
From bc2d571d71edaa394a626e458adafde510900453 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?John=20H=C3=B6gberg?= <john@erlang.org>
Date: Mon, 18 Jan 2021 16:31:27 +0100
Subject: [PATCH] otp: Document previously removed functions
This commit adds a page for Removed Functionality in the user's
guide, listing the functions we've removed recently and still
warn about.
---
HOWTO/DEPRECATE.md | 8 +-
lib/stdlib/scripts/update_deprecations | 99 ++++++++++++++----------
system/doc/general_info/DEPRECATIONS | 46 +++++++++++
system/doc/general_info/Makefile | 4 +-
system/doc/general_info/part.xml | 1 +
system/doc/general_info/removed_head.inc | 39 ++++++++++
system/doc/general_info/xmlfiles.mk | 1 +
7 files changed, 153 insertions(+), 45 deletions(-)
create mode 100644 system/doc/general_info/removed_head.inc
diff --git a/HOWTO/DEPRECATE.md b/HOWTO/DEPRECATE.md
index a33b555e89..e292ca4c76 100644
--- a/HOWTO/DEPRECATE.md
+++ b/HOWTO/DEPRECATE.md
@@ -62,8 +62,9 @@ about their use.
The [$ERL_TOP/system/doc/general_info/DEPRECATIONS][1] file contains additional
information about each deprecated function, namely in what release it was deprecated
and optionally in what release it will be removed. The information in this file will
-be used to generate the [Deprecations](http://erlang.org/doc/general_info/deprecations.html)
-and [Scheduled for Removal](http://erlang.org/doc/general_info/scheduled_for_removal.html)
+be used to generate the [Deprecations](http://erlang.org/doc/general_info/deprecations.html),
+[Scheduled for Removal](http://erlang.org/doc/general_info/scheduled_for_removal.html),
+and [Removed Functionality](http://erlang.org/doc/general_info/removed.html),
pages in the documentation.
Here is how the entry for `erlang:now/0` that was deprecated in OTP 18 looks like:
@@ -74,6 +75,9 @@ Here is an example of a function that was deprecated in OTP 23 and is scheduled
filename:safe_relative_path/1 since=23 remove=25
+After removing a function it's important to keep its line in the DEPRECATIONS
+file for as long as we wish to raise warnings about it. Should a removal be
+postponed, the corresponding `remove` attribute must be bumped accordingly.
[1]: ../system/doc/general_info/DEPRECATIONS
[2]: ../lib/stdlib/src/otp_internal.erl
diff --git a/lib/stdlib/scripts/update_deprecations b/lib/stdlib/scripts/update_deprecations
index 47723ca4bc..013ef33991 100755
--- a/lib/stdlib/scripts/update_deprecations
+++ b/lib/stdlib/scripts/update_deprecations
@@ -201,48 +201,62 @@ insert_removals([], _Depr) ->
make_xml(Top, Type, OutFile, InfoText0) ->
DeprecationFile = deprecation_file(Top),
OutDir = filename:dirname(DeprecationFile),
- InfoTextMap = maps:from_list(make_xml_info(InfoText0)),
Depr0 = read_deprecations(DeprecationFile),
Depr = maps:to_list(Depr0),
- {Key,Prefix} = case Type of
- "deprecations" ->
- {since,"deprecations"};
- "removals" ->
- {remove,"scheduled_for_removal"}
- end,
- Collected = make_xml_collect(Depr, Key, InfoTextMap, []),
- All = make_xml_gen(lists:reverse(Collected), Type, Prefix, OutDir),
+
+ {RelKey, AttrTag} =
+ case Type of
+ "deprecations" ->
+ %% Group by 'since' in DEPRECATIONS, grab text from
+ %% 'deprecated' attributes.
+ {since, deprecated};
+ "scheduled_for_removal" ->
+ {remove, deprecated};
+ "removed" ->
+ {remove, removed}
+ end,
+
+ InfoTextMap = maps:from_list(make_xml_info(InfoText0, AttrTag)),
+ Collected = make_xml_collect(Depr, RelKey, InfoTextMap, []),
+
+ All = make_xml_gen(lists:reverse(Collected), Type, OutDir),
file:write_file(OutFile, All),
+
ok.
-make_xml_info([{deprecated,M,F,A,Text}|T]) ->
- [{{M,F,A},Text}|make_xml_info(T)];
-make_xml_info([{removed,_,_,_,_}|T]) ->
- make_xml_info(T);
-make_xml_info([]) ->
+make_xml_info([{Tag,M,F,A,Text} | Attributes], Tag) ->
+ [{{M,F,A}, Text} | make_xml_info(Attributes, Tag)];
+make_xml_info([_ | Attributes], Tag) ->
+ make_xml_info(Attributes, Tag);
+make_xml_info([], _Tag) ->
[].
-make_xml_collect([{MFA,Ps}|T], Key, InfoTextMap, Acc) ->
- case lists:keyfind(Key, 1, Ps) of
- {Key,Rel} ->
- InfoText = case InfoTextMap of
- #{MFA := Text} -> Text;
- #{} -> []
- end,
- make_xml_collect(T, Key, InfoTextMap, [{Rel,{MFA,InfoText}}|Acc]);
- false ->
- make_xml_collect(T, Key, InfoTextMap, Acc)
- end;
-make_xml_collect([], _Key, _InfoTextMap, Acc) ->
+%% Joins `DEPRECATIONS` with module attributes, grabbing the text from said
+%% attributes and grouping them by the release version pointed out by `RelKey`
+%% ('since' or 'remove').
+make_xml_collect([{MFA, Ps} | T], RelKey, InfoTextMap, Acc0) ->
+ Acc = case lists:keyfind(RelKey, 1, Ps) of
+ {RelKey, Rel} ->
+ case InfoTextMap of
+ #{ MFA := Text } ->
+ [{Rel, {MFA,Text}} | Acc0];
+ #{} ->
+ Acc0
+ end;
+ false ->
+ Acc0
+ end,
+ make_xml_collect(T, RelKey, InfoTextMap, Acc);
+make_xml_collect([], _RelKey, _InfoTextMap, Acc) ->
rel2fam(Acc).
-make_xml_gen(Collected, Type, Prefix, Dir) ->
- Head = get_xml_template(Dir, Prefix, head),
- Contents = make_xml_gen_list(Collected, Type, Prefix, Dir),
+make_xml_gen(Collected, Type, Dir) ->
+ Head = get_xml_template(Dir, Type, head),
+ Contents = make_xml_gen_list(Collected, Type, Dir),
Footer = "</chapter>\n",
[Head,Contents,Footer].
-make_xml_gen_list([{Rel,MFAs}|T], Type, Prefix, Dir) ->
+make_xml_gen_list([{Rel,MFAs}|T], Type, Dir) ->
RelStr = lists:concat(["OTP ",Rel]),
RelMarker = lists:concat(["otp-",Rel]),
Head = ["<section>\n",
@@ -252,16 +266,18 @@ make_xml_gen_list([{Rel,MFAs}|T], Type, Prefix, Dir) ->
SubTitle = case Type of
"deprecations" ->
["Functions Deprecated in ",RelStr];
- "removals" ->
- ["Functions Scheduled for Removal in ",RelStr]
+ "scheduled_for_removal" ->
+ ["Functions Scheduled for Removal in ",RelStr];
+ "removed" ->
+ ["Functions Removed in ",RelStr]
end,
SubHead = ["<section>\n",
"<title>",SubTitle,"</title>\n"],
SubFooter = "</section>\n",
- [Head, get_xml_template(Dir, Prefix, Rel),
+ [Head, get_xml_template(Dir, Type, Rel),
SubHead, make_xml_gen_mfas(MFAs), SubFooter,
- Footer | make_xml_gen_list(T, Type, Prefix, Dir)];
-make_xml_gen_list([], _, _, _) ->
+ Footer | make_xml_gen_list(T, Type, Dir)];
+make_xml_gen_list([], _, _) ->
[].
make_xml_gen_mfas(MFAs) ->
@@ -295,10 +311,11 @@ check_deprecations(Top, #st{functions = Fs} = St) ->
[] ->
St#st{deprecations = Depr};
[_|_] ->
- Msg = "The following function(s) have -deprecated() attributes, "
- "but are not present in the DEPRECATIONS file:\n\n",
+ Msg = "The following function(s) have -deprecated() or "
+ "-removed() attributes, but are not present in the "
+ "DEPRECATIONS file:\n\n",
Bad = [io_lib:format(" ~w:~w/~w\n", [M,F,A]) ||
- {deprecated,M,F,A,_} <- Bad0],
+ {_,M,F,A,_} <- Bad0],
Loc = ["\n","Please update ",DeprFile,".\n"],
io:put_chars(standard_error, [Msg,Bad,Loc]),
halt(1)
@@ -312,10 +329,8 @@ read_deprecations(File) ->
deprecation_file(Root) ->
filename:join(Root, "system/doc/general_info/DEPRECATIONS").
-in_deprecations({deprecated,M,F,A,_}, Depr) ->
- is_map_key({M,F,A}, Depr);
-in_deprecations({removed,_,_,_,_}, _Depr) ->
- true.
+in_deprecations({Tag,M,F,A,_}, Depr) when Tag =:= deprecated; Tag =:= removed ->
+ is_map_key({M,F,A}, Depr).
parse_deprecations([<<"#",_/binary>>|Lines]) ->
parse_deprecations(Lines);
diff --git a/system/doc/general_info/DEPRECATIONS b/system/doc/general_info/DEPRECATIONS
index ccbe94bf5b..0b18d6216f 100644
--- a/system/doc/general_info/DEPRECATIONS
+++ b/system/doc/general_info/DEPRECATIONS
@@ -134,6 +135,7 @@ sys:get_debug/3 since=22
# Added in OTP 21.
#
+erlang:get_stacktrace/0 since=21 remove=23
ssl:ssl_accept/_ since=21 remove=24
#
@@ -157,8 +159,41 @@ random:_/_ since=19
# Added in OTP 18.
#
+core_lib:literal_value/1 since=18 remove=19
+core_lib:is_literal_list/1 since=18 remove=19
+core_lib:is_literal/1 since=18 remove=19
+core_lib:set_anno/2 since=18 remove=19
+core_lib:get_anno/1 since=18 remove=19
+
erlang:now/0 since=18
+erl_lint:modify_line/2 since=18 remove=19
+
+erl_parse:get_attribute/2 since=18 remove=19
+erl_parse:get_attributes/1 since=18 remove=19
+erl_parse:set_line/2 since=18 remove=19
+
+erl_scan:token_info/_ since=18 remove=19
+erl_scan:attributes_info/_ since=18 remove=19
+erl_scan:set_attribute/3 since=18 remove=19
+
+ssl:connection_info/1 since=18 remove=20
+ssl:negotiated_next_protocol/1 since=18 remove=20
+
+httpd_conf:make_integer/1 since=18 remove=23
+httpd_conf:is_file/1 since=18 remove=23
+httpd_conf:is_directory/1 since=18 remove=23
+httpd_conf:custom_clean/3 since=18 remove=23
+httpd_conf:clean/1 since=18 remove=23
+httpd_conf:check_enum/2 since=18 remove=23
+
+#
+# Added in OTP 17.
+#
+
+asn1ct:encode/_ since=17 remove=20
+asn1ct:decode/_ since=17 remove=20
+
#
# Added in OTP 16.
#
@@ -184,6 +219,14 @@ wxPostScriptDC:setResolution/1 since=16
wxCursor:new/3 since=16
wxCursor:new/4 since=16
+#
+# Added in OTP R13B03 or earlier. We don't know exactly when these were
+# deprecated.
+#
+
+os_mon_mib:_/_ since=13 remove=22
+erlang:hash/2 since=13 remove=20
+
#
# Added in OTP 12.
#
@@ -195,6 +238,9 @@ auth:node_cookie/_ since=12
calendar:local_time_to_universal_time/1 since=12
+rpc:safe_multi_server_call/3 since=12 remove=19
+rpc:safe_multi_server_call/2 since=12 remove=19
+
#
# Added in OTP 10.
#
diff --git a/system/doc/general_info/Makefile b/system/doc/general_info/Makefile
index 5f087e22be..f7e1a86c5a 100644
--- a/system/doc/general_info/Makefile
+++ b/system/doc/general_info/Makefile
@@ -89,8 +89,10 @@ $(XMLDIR)/deprecations.xml: DEPRECATIONS
$(gen_verbose)escript $(DEPRECATIONS_SCRIPT) make_xml deprecations $(ERL_TOP) $@
$(XMLDIR)/scheduled_for_removal.xml: DEPRECATIONS
- $(gen_verbose)escript $(DEPRECATIONS_SCRIPT) make_xml removals $(ERL_TOP) $@
+ $(gen_verbose)escript $(DEPRECATIONS_SCRIPT) make_xml scheduled_for_removal $(ERL_TOP) $@
+$(XMLDIR)/removed.xml: DEPRECATIONS
+ $(gen_verbose)escript $(DEPRECATIONS_SCRIPT) make_xml removed $(ERL_TOP) $@
clean clean_docs:
rm -f $(XMLDIR)/*.xml
diff --git a/system/doc/general_info/part.xml b/system/doc/general_info/part.xml
index fead7d58e7..f0f9194a47 100644
--- a/system/doc/general_info/part.xml
+++ b/system/doc/general_info/part.xml
@@ -30,5 +30,6 @@
<file>part.xml</file>
</header>
<xi:include href="deprecations.xml"/>
+ <xi:include href="removed.xml"/>
<xi:include href="scheduled_for_removal.xml"/>
</part>
diff --git a/system/doc/general_info/removed_head.inc b/system/doc/general_info/removed_head.inc
new file mode 100644
index 0000000000..1e87e87a74
--- /dev/null
+++ b/system/doc/general_info/removed_head.inc
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE chapter SYSTEM "chapter.dtd">
+
+<chapter>
+ <header>
+ <copyright>
+ <year>2021</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ </legalnotice>
+
+ <title>Removed Functionality</title>
+ <prepared></prepared>
+ <docno></docno>
+ <date></date>
+ <rev></rev>
+ <file>removed.xml</file>
+ </header>
+ <section>
+ <title>Introduction</title>
+ <p>This document lists all removed functionality in
+ Erlang/OTP. For more information regarding the strategy regarding
+ removals see the documentation of <seeguide
+ marker="system/system_principles:misc#removal">Support,
+ Compatibility, Deprecations, and Removal</seeguide>.</p>
+ </section>
diff --git a/system/doc/general_info/xmlfiles.mk b/system/doc/general_info/xmlfiles.mk
index c52930c62d..ebd69cafda 100644
--- a/system/doc/general_info/xmlfiles.mk
+++ b/system/doc/general_info/xmlfiles.mk
@@ -22,4 +22,5 @@ GENERAL_INFO_CHAPTER_FILES =
GENERAL_INFO_CHAPTER_GEN_FILES = \
deprecations.xml \
+ removed.xml \
scheduled_for_removal.xml
--
2.26.2